隔週連載groonga

最終回 groongaの今と未来

2013年4月2日より約半年にわたり(およそ)隔週でgroongaという全文検索エンジンプロダクトに関する情報を届けてきました。⁠読者の皆さんがgroongaを使いたくなる!」ことを目指し、事例とプロダクトを紹介しました。

事例を紹介することにより、具体的にどのように使うのかがイメージしやすくなることを狙いました。プロダクトそのものも紹介することにより、検索機能を提供するブラックボックスなプロダクトではなく、自分たちの問題と同じことを解決しようとしている自分たちにあったプロダクトなのかを判断できるようになることを狙いました。みなさんの役に立った記事はあったでしょうか?

さて、最終回の今回はgroongaおよびgroonga関連プロダクトの最新情報とこれからの予定について紹介します。

ぐるんが族の最新情報

最初にぐるんが族[1]の最新情報を紹介し、それから近い未来の予定について紹介します。

groongaの最新情報

まずはgroongaの最新情報です。

groongaはあいかわらず毎月肉の日(29日)にリリースしています。毎月10から20個の改良・修正が入っています。

修正の多くはユーザのみなさんが報告してくれたものです。以前より報告件数が増えているため、ユーザ、それも問題を発見したら報告してくれるユーザが増えていることがわかります。groongaコミュニティーがよい方向に成長している証ですね。

ユーザが増えたのは、もしかしたらこの連載を始めたおかげかもしれません。だとしたら、この連載を続けた甲斐があったというものです。

大きめの新機能は次のとおりです。

  • マルチセクションインデックスで使うセクションを指定できるようになりました。これは、後述するmroongaの「Wプラグマ」機能を実現するための機能拡張です。
  • tokenizeコマンドを追加しました。これでトークナイザーの挙動を簡単に確認できるようになりました。

他にもログまわりなどで使いやすくなる改良がいくつも入っています。運用面で便利になる機能も整備されており、groongaがより安定したサービスとして使えるようになりました。運用時のフィードバックをさらに反映することで、より運用しやすいサービスとして成長しています。

mroongaの最新情報

次はmroongaの最新情報です。mroongaについては第3回の記事も参考にしてください。

mroongaはgroongaをバックエンドとして使っているMySQLのストレージエンジンでしたね。SQLでgroongaを使えるようになるため、既存のSQLクライアントライブラリを使って高速な全文検索機能を利用できます。

mroongaもあいかわらず毎月肉の日(29日)にリリースしています。こちらもgroongaと同じように毎月10から20個の改良・修正が入っています。

メーリングリストでの質問やバグ報告の多くはmroongaに関するものです。その中でもgroonga側で対応したほうがよいものはgroongaで対応し、mroongaで対応したほうがよいものはmroongaで対応しています。

groongaコミュニティーがよい方向に成長しているのはmroongaユーザが増えていることが大きな理由でしょう。groongaを直接使ったほうがドリルダウン検索(ファセット検索)などより柔軟で高度な検索ができるのですが、クライアント側のライブラリが充実していてアプリケーションを作りやすいため、これからもmroongaユーザは増えていくでしょう。

使い方が難しいのですが、SQLでgroongaのコマンドを実行する機能をmroongaに追加したので、やろうと思えばmroongaからgroongaの柔軟で高度な検索機能を使うこともできます。このあたりも、groongaを直接使うのではなく、mroonga経由で使うユーザが増えている理由でしょう。

大きめの新機能は次のとおりです。

  • TritonnにあったWプラグマをサポートしました。これでほとんどのよく使われるTritonnの機能はmroongaでもできるようになりました。Tritonnからmroongaへの移行に関しては第6回の記事を参照してください。
  • Windowsでmroongaを使えるようになりました。これでより手軽に試せます。これは後述するMariaDBへのバンドルに向けた作業の一歩でもあります。

前にmroongaを検討してみたけどそのときはやめたんだよなぁという人は、ぜひもう一度検討してみてください。かなり進化していることに驚くことでしょう。

rroongaの最新情報

次はrroongaの最新情報です。rroongaについては第5回の記事も参考にしてください。

rroongaはgroongaをRubyから使うためのライブラリです。インストールのしやすさとRubyらしいAPIを提供しているため、Rubyで書かれたアプリケーションに簡単に全文検索機能を組み込める便利なライブラリです。mroongaと同じようにrroongaも広く使われています。比較的大きなデータを扱うときはmroongaが使われることが多く、中規模くらいのデータまではrroongaが使われることが多いようです。これは、rroongaは別途サーバプロセスを用意しなくてもよいため、アプリケーションのみの構成ですむ中規模くらいのデータに使いやすいからでしょう。

rroongaは毎月肉の日(29日)近辺にリリースしています。groongaがリリースされてから数日遅れでリリースしている感じです。

rroongaはユーザのみなさんからのフィードバックというよりは、groongaの最新機能を使えるようにするための変更が多いです。そのため、最新のgroongaの機能を使いたい場合は最新のrroongaを使うことをオススメします。

近い未来の予定

ここまでは現在の最新情報の紹介でした。ここからは、これからの近い未来の予定について紹介します。

groongaの未来

groongaは約5年前の2009年の1月にSennaから名前を変えました[2]⁠。これは、大幅に内部構造を刷新するためです。

例えば、Sennaの頃はデータストア機能は持たず、全文検索インデックス関連の機能だけを提供していましたが、groongaにはカラムベースのデータストア機能を実装しました。クエリ実行エンジンもSchemeベースからスタックベースの独自処理系に書き換えました。あわせて、クエリ言語もSchemeベースからECMAScriptベースの構文にしました。

そんなSennaから現代風に大成長したgroongaですが、5年も経つとgroongaでの制限が足かせになるケースがちらほら見えてきました。そこで、groongaのコア部分を再度現代風にブラッシュアップするべく開発しているプロダクトがあります。それがgrnxx(⁠⁠ぐるんたす」と読む)です。

grnxxは、レコードIDのサイズなど現在のgroongaの制限の多くを撤廃した上でさらに高速に動作するように設計・実装を進めています。近い未来、groongaのコア部分はgrnxxを使うようになる予定です。プロダクト名は変わらずgroongaで、APIレベルでの互換性も(それほど)壊れない予定ですが、データベースのフォーマットは変わります。そのため、コア部分がgrnxxに置き換えられたあとにアップデートするときはデータベースを再構築する必要があります。

grnxxのもっと詳しい情報は後述する「groonga勉強会」で開発者の矢田さんから聞ける予定です。grnxxの詳細が気になる方はぜひ参加を検討してください!

mroongaの未来

最近のmroongaは前身であるTritonnをリプレースできる機能・品質を目標として開発を進めてきました。そして、その目標が達成されているというのは第6回第7回第10回の記事を読めばわかるはずです。

近い未来のmroongaの目標は「MariaDBへのバンドル」です。先日リリースされたMariaDB 10.0.4からSpiderストレージエンジンがバンドルされるようになりました。SpiderはMySQL/MariaDBにクラスター機能を追加するプラグインで、mroongaの開発チームの1人でもある斯波さんが開発しています。Spiderとmroongaを組み合わせることで複数のサーバで大きなデータの全文検索を実現することができます[3]⁠。

第9回の記事でも紹介しましたが、mroongaは簡単に導入できることを大事にしています。mroongaもMariaDBにバンドルされるようになれば、MariaDBをインストールするだけでSpiderもmroongaも揃い、これまでより簡単に導入できます。

MariaDBにバンドルされるためにはプロダクトの品質をあげる必要があるため、そこに注力していきます。

大規模データとgroongaの未来

Spiderとmroongaを組み合わせることにより今でも大規模データを全文検索できる仕組みはあります。しかし、SQLで検索することになるため、苦手なクエリもあります。例えば、ドリルダウン検索(ファセット検索)です。このあたりはgroongaの方に分があります。

groongaでも大規模データを扱えればより高度な検索ができるのに…そんな野望を実現するためにdroongaというプロダクトを開発しています。droongaは「distributed groonga」⁠分散groonga)の略で、⁠どぅるんが」と読みます。読みにくいですね。

droongaは、fluentdのプラグインとして実装されている分散検索エンジンモジュールと、HTTPやSocket.IOなど使いやすいプロトコルで分散検索エンジンモジュールにアクセスするためのAPIを提供するAPIサーバモジュールで構成されています。

droongaのモジュール
droongaのモジュール

分散検索エンジンモジュールは直接groongaのデータベースを操作します。ここはRubyで実装しているのでrroongaを使っています。

APIサーバモジュールはnode.jsで実装しています。ここは単にAPIの変換だけを行い、groongaのデータベースには触りません。そのため、分散検索エンジンモジュールと同じRubyではなく、多くの同時接続をさばくのが得意なnode.jsを選択しました。

droongaのモジュールの実装言語
droongaのモジュールの実装言語

droonga、気になってきましたか? droongaについても「groonga勉強会」で開発者の森さんから話を聞ける予定です。droongaの詳細が気になる方はぜひ参加を検討してください!

いい肉の日に第4回groonga勉強会を開催

groonga開発チームは毎月肉の日(29日)にgroongaをリリースし、毎年いい肉の日(11月29日)にgroonga勉強会を開催しています。もちろん、今年も全文検索エンジンgroongaを囲む夕べ 4と題してgroonga勉強会を開催します。すでに参加登録は始まっています!

前述のとおり、grnxxやdroongaの話も聞けますし、mroongaの最新情報やgroongaを商用利用するときに有用な情報も聞けます。また、発表の公募もします。groongaに関する話題ならなんでも構いません。例えば、事例紹介や自作のgroonga関連プロダクトの紹介などでもよいです。先着順で採択するため、ネタがある人は急いで応募してください! 詳細はイベントページの説明を参考にしてください。

今年のgroonga勉強会は例年より2時間早い17:00開始となっていることに注意してください。1ヶ月以上先の話なので、今のうちから調整をして17:00から参加できるように準備しておいてください。

今年はDeNAさんに会場を提供していただきます。ありがとうございます。懇親会も同じ会場で開催できる予定です。ぜひ、懇親会まで参加してgroonga関連情報をたくさん共有してください!

まとめ

最終回ということでこれまでの記事の内容を参照しつつ、最新のgroonga/mroonga/rroongaの情報とこれからのgroongaの予定を紹介しました。連載は今回で終了しますが、groonga勉強会でみなさんに会えることを楽しみにしています!

この連載は「読者の皆さんがgroongaを使いたくなる!」を目標としていました。もし、この連載を読んでgroongaを使いたくなったという人は、groonga勉強会などなにかの機会にでも、⁠この連載を読んでいたよ」とか、⁠連載を読んでgroongaを使い始めたよ」と声を掛けてもらえるとうれしいです。

それでは、groongaでガンガン検索してください!

おすすめ記事

記事・ニュース一覧