BloGroonga

2015-10-29

Groonga 5.0.9リリース

今日は肉の日ですね!

Groonga 5.0.9 をリリースしました!

それぞれの環境毎のインストール方法: インストール

次の条件に当てはまる人はアップグレードを推奨します。

  • 5.0.3-5.0.8を使っている
  • テーブルにパトリシアトライ(TABLE_PAT_KEY)を使っている
  • パトリシアトライを使ったテーブルのレコードを削除している

変更内容

今回のリリースではパトリシアトライ関連の次の問題を修正しています。そのため、前述の条件に当てはまる人はアップグレードしてください。

  • 要素を削除するとパトリシアトライが壊れてしまう可能性がある
  • 存在しない要素を削除しようとするとパトリシアトライが壊れてしまう可能性がある

パトリシアトライが壊れている場合は存在するはずのレコードが見える、同じレコードが複数回見える、テーブル全体のレコード数として返される値と実際にアクセスできるレコード数が違う、といった現象が発生します。

それ以外では次の変更があります。

  • C APIの拡充
  • [実験的] クエリー書き換えメカニズムを追加
  • [実験的] データベースに設定を保存するメカニズムを追加
  • schemaコマンドを追加
  • grn_tsを組み込み

それぞれ説明します。

C APIの拡充

Groongaは単独で全文検索サーバーとして動くこともできますが、ライブラリーとして他のシステムに組み込むことができます。これは、Groonga開発当初から大事にしてきたことです。

Groongaを他のシステムに組み込んでいる例として、MySQLに組み込んだMroonga、PostgreSQLに組み込んだPGroonga、Rubyに組み込んだ(Rubyのライブラリーとして使えるようにした)Rroongaなどがあります。

他のシステムに組み込むと、いつもの慣れた方法で全文検索機能を使えるようになります。たとえば、Mroonga/PGroongaはSQLでGroongaが提供する全文検索機能を使えます。Groongaが提供するコマンド群を覚える必要がないので学習コストが大きく下がります。

C APIを拡充すると、他のシステムに組み込むときに便利になる、より多くのGroongaの機能を組み込んだシステムから使えるようになる、といったメリットがあります。そのため、今回のリリースに限らず今後も必要なAPIについては追加で提供するようにしていきます。

[実験的] クエリー書き換えメカニズムを追加

Groongaはselect--query--filterで指定された検索条件を評価する前に内部で最適化した上で実行しています。

今回のリリースでは検索条件を最適化する前に検索条件を書き換える機能を導入しました。検索条件を書き換えることができると、たとえば次のようなことを実現できます。

  • 最適化
  • 条件を変更
  • 常に特定の条件を挿入

それぞれもう少し説明します。

現在実行している最適化は式の順番までは入れ替えません。しかし、検索条件を書き換える機能では式の順番も入れ替えることができます。これにより、現在実行している最適化機能よりアグレッシブな最適化を実現することができます。

スキーマを管理している人とselectを実行している人がわかれていると、スキーマを変えたくても使っている人がいるから変えられないということがあります。そのような場合でも、サーバー側で検索条件を変更することで、クライアント側を変更しなくても新しいスキーマを使って動くようにできます。

常に特定の条件を挿入することで一部のデータが必ずヒットしないようにすることができます。これをクライアント側を変更せずにサーバー側だけで実現できます。

他にも使い道はいろいろあるはずです。

検索条件を書き換える機能はプラグインとしてユーザーが後から追加できるようになっています。ユーザーはこの機能をRuby(mruby)で実装します。

具体的な実装法は今後ドキュメントを提供する予定です。

[実験的] データベースに設定を保存するメカニズムを追加

Groongaにはいくつか決め打ちになっていることがあります。たとえば、TokenFilterStopWordが使っているis_stop_wordというカラム名です。多くの場合は困りませんが、既存のカラム名と名前が重複してしまったときに困ります。

このように、Groongaが提供する値はあるが特定のデータベースでは違う値を使いたいというケースに対応するため、データベース単位で設定を保存できるようにしました。これを使うと、あるデータベースではisStopWordというカラム名を使う、ということができるようになります。

今はC APIしか提供していませんが、今後のリリースでconfig_getconfig_setといったコマンドを提供していく予定です。

schemaコマンドを追加

Groongaはtable_listcolumn_listといったスキーマの一部を取得コマンドを提供しています。すべてのスキーマを取得するときはdumpコマンドを使います。

dumpコマンドは便利ですが、スキーマの情報をプログラムで加工することには不向きです。Groongaコマンドのフォーマットだからです。table_listcolumn_listはJSONなのでパースしやすいですが、Groongaコマンドのフォーマットはそういうわけにはいきません。

そこでschemaコマンドを追加しました。このコマンドを使うことでテーブルやカラム、トークナイザーなどスキーマに関する情報をJSONで取得できます。スキーマを解析するプログラムを書きやすくなります。

grn_tsを組み込み

Groongaはカラムストア方式のデータストアを提供しています。これは、カラム毎の集計操作(ドリルダウン)は重要な操作であり、この操作を高速に実現できることは大事なことであるという設計思想からきています。

grn_ts(ぐるんたす)はこのカラムストア方式の特徴をより強化するための新しいクエリー実行エンジンです。

以前のリリースまではgrn_tsを組み込むにはビルドオプションを指定する必要があったのですが、今回のリリースからデフォルトで組み込まれるようになりました。grn_tsを使ってクエリーを実行する方法はgrn_ts(ぐるんたす)の紹介を参照してください。

おしらせ

1ヶ月後は年に一度のいい肉の日(11月29日)です。今年もイベントを開催するので、Groongaを使っている、興味があるという方はぜひお越しください。今年はぐるなびさんに会場を提供してもらいます。さらに!ぐるなびさんから懇親会用の飲食物も提供してもらえることになりました!ありがとうございます!

無料で懇親会まで参加でき、Groongaの最新情報、他のユーザーがどのように使っているかの情報などを得ることができるイベントになっています。参加申し込みは↓のイベントページからお願いします。

このイベントでは参加者だけでなく発表者・イベント手伝い(受付など)をしてくれる方を募集しています。お気軽にご連絡ください。

また、来週は次のイベントがあります。「Groongaで学ぶ全文検索」は予習・復習なしで全文検索を学ぶ、参加者に合わせて内容を決める、という限られた時間内でできるだけ実りある時間にしようというスタイルの勉強会です。全文検索を学びたい!という方はご活用ください。

さいごに

5.0.8からの詳細な変更点は5.0.9リリース 2015-10-29を確認してください。

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