分12今回から始まった隔週連載groongaでは,groongaを使いたくなるような情報を隔週毎にお届けします。groongaとはGitHubで公開されているオープンソースの全文検索エンジンです。大量にある文書の中から目的のキーワードを持つ文書を高速に見つけることができます。groongaのロゴ©groongaプロジェクト第1回目である今回は,この連載についてとgroongaの特徴を紹介します。この連載についてまず,この連載について説明します。この連載は「読者の皆さんがgroongaを使いたくなる!」ことを目指しています。そのために,次の2点の情報を次回から交互にお届けします。利用事例を紹介することで,「⁠あそこでも使っているなら自分も使ってみようかなぁ」とか「こんな使い方をしているなら自分も使ってみようかなぁ」と思ってもらえることを狙っています。利用事例の次の回では,その利用事例に関する役立つ情報を紹介します。一歩進んだ使い方や,別のやり方などの情報を紹介します。利用事例をアレンジして自分の用途になじませて使う時に役立つことを狙っています。この連載は利用事例が尽きたら終了してしまいます。そのため,連載中もgroongaの利用事例を紹介してくれる人を募集します。「⁠この連載を読んでgroongaを使い始めました!」という人が利用事例を紹介してくれるようになれば,胸を張って「この連載は成功だった!」と言えます。,「⁠いま抱えている問題をgroongaで解決できないか?」という視点で読んでみてください。groongaについて連載の最初なので,今回はgroongaについて紹介します。最初にgroongaの読み方を紹介しなくてはいけないでしょう。groongaは「ぐるんが」と読みます。命名者はgroongaを書き始めた森さんです。名前の由来は「強そう」だからとのことです。「⁠ぐるんが!」たしかに強そうですね。「⁠ジャングルとかにぐるんが族とかいそうじゃない?」という勝手なイメージから,最初のgroongaのロゴは仮面をベースにしていました。古いgroongaのロゴ©groongaプロジェクトもうひとつ名前の由来があります。そちらは「Webの検索エンジンで見つけやすい」というものです。広く使われている名前と同じものにすると,Webで検索したときに他の名前の結果に埋もれて見つかりにくくなってしまいます。すると,せっかく興味をもって検索してくれた人に情報が届きません。そのため,当時ほとんど使われていなかったgroongaになりました。groongaは元々Senna(せな)という名前で開発されていました。これはF1ドライバーのアイルトン・セナに由来しています。広く使われている名前にちなんでいるため,Webで検索しづらかったのです。groongaに改名した理由さて,今後また名前を変えることはあるのか?というのは気になるところですよね。それは,もうなさそうです。Sennaからgroongaに名前を変えた理由は,より性能を向上させるためにAPIを大きく変えたいからというものでした。非互換が導入されるため,名前を変えて互換性がないということをわかりやすく表現したのです。既存のSennaユーザがgroongaに乗り換える敷居も高くなりました。名前を変えることにより,変更前のものとは違うことが伝わりやすくなりましたが,既存のユーザが離れやすくなってしまいました。新しく,より性能も向上しているのにです。このような出来事があったため,「⁠今後は名前を変更しないでしょう」と森さんも話しています。名前について理解が深まったところで,次にgroongaの特徴を紹介します。具体的には次の4つの特徴を見ていきます。高速な位置情報検索機能groongaについてもっと知りたい場合は,groongaのドキュメントを読んでみてください。実際にgroongaを動かしてチュートリアルをやってみると理解が深まります。検索可能な全文検索機能groongaは全文検索エンジンなので,当然,全文検索機能があります。全文検索機能とは検索対象の文書(テキストデータの集まり)から指定したキーワードを含む文書を見つける機能です。Googleでは,検索対象の文書がWebページで,検索ボックスに入力したキーワードが指定したキーワードです。他の全文検索エンジンと比べて,groongaは情報の鮮度をとても大事にしています。情報の鮮度を大事にするというのは,「⁠新しい情報をできるだけすぐに検索可能にする」ということです。朝,出かけようとしてお昼の天気が気になったとします。雨が降りそうなら傘を持って出かけたいですからね。このとき,当日に発表された天気予報と1週間前に発表された天気予報では,情報の鮮度が違います。1週間前に発表された天気予報よりも,当日に発表された天気予報のほうがより当たりそうですし,できれば当日に発表された天気予報を参考にしたいですよね。これは,新しい情報のほうが価値が高いため,すぐに検索できると嬉しい例です。groongaは,新しい情報をすぐに検索できるようにするため,インデックスを動的に更新します。インデックスとは高速に全文検索をするためのデータです。動的にインデックスを更新するとは,このデータを変更して新しい情報を検索対象とすることです。静的にインデックスを更新するとは,1からインデックスを作成するということです。静的にインデックスを更新すると1からインデックスを作成するため,動的にインデックスを更新するよりも新しい情報が検索可能になるまでに時間がかかります。groongaはインデックスを動的に更新できるため,新しい情報をすぐに検索できる全文検索エンジンです。参照ロックフリーgroongaは,データを更新しているときでもデータの読込みをブロックしません。更新処理が参照処理の邪魔をしないということです。これを参照ロックフリーといいます。参照ロックフリーであれば,全文検索機能を提供しながら随時新しい文書を登録しても,検索機能がストップすることはありません。更新処理時に参照ができなくなると,新しい文書を登録する毎に検索機能がストップしてしまいます。前述のすぐに検索可能な全文検索機能は,この参照ロックフリーという仕組みの上で実現されています。高速なドリルダウン機能groongaには,文書の属性値でグループ化する機能があります。この機能はドリルダウンやファセットと呼ばれる機能です。groongaではドリルダウンと呼んでいますが,今後ファセットと呼ぶようになるかもしれません。ドリルダウン機能は検索結果をさらに絞り込みたいときに便利です。ブログ記事をキーワードで検索したとします。キーワードが一般的すぎてまだたくさんの記事がヒットしています。このとき,記事にタグがつけてあると,キーワードだけでなくタグも検索条件に加えることでさらに絞り込むことができます。キーワードでヒットした記事のタグをグループ化すると,有効なタグのみを抽出できます。有効なタグとは,ヒットした記事につけられているタグということです。ヒットしなかった記事につけられているタグは含みません。この「有効なタグのみ」ということが重要です。有効なタグのみを抽出できると,ユーザに「このタグなら絞り込めますよ」ということを伝えることができます。すべてのタグしか使えないと,ユーザには「このタグで絞り込めますよ。何もヒットしない可能性がありますけど」ということを伝えることになってしまいます。groongaはこのドリルダウン機能を高速に実行できます。これは,groongaが文書の属性値毎に局所化してデータを格納しているからです。属性値が局所化してあることで,キャッシュミスが起きにくくなり,高速にデータにアクセスできます。ドリルダウン機能は文書の属性値に集中的にアクセスする処理が必要になるため,この特性がドリルダウン機能の高速化に効いています。groongaは文書の属性を保存する場所をカラムと呼んでいます。カラムの値を局所化して格納することをカラム指向や列指向といいます。多くのRDBMSはカラム指向ではなく行指向のデータの格納方法です。カラム毎にデータを局所化するのではなく,レコード毎にデータを局所化して格納しています。高速な位置情報検索機能groongaは全文検索エンジンでありながら位置情報検索もできます。位置情報検索では,「⁠今いる場所から半径何メートル以内にあるコンビニ」というような検索ができます。GPS付きのモバイル端末が当たり前になった現在ではとても有用な機能です。groongaの位置情報検索機能は全文検索機能でも使っているインデックスの仕組みを使います。そのため,高速な全文検索機能を実現するためにチューニングしてきた成果を位置情報検索機能でも使うことができ,高速な位置情報検索機能を実現しています。次回以降に始まる事例紹介の中には,位置情報検索機能を使った事例もあるので楽しみにしてください。Yoshiharaプログラマ。株式会社クリアコード所属。Rubyを中心にソフトウェアを作成している。学生時にはRubyでOSを書く研究をしていた。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。