BloGroonga

2016-01-29

Groonga 5.1.2リリース

今日は今年最初の肉の日ですね!

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

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

変更内容

主な変更点は以下の通りです。パフォーマンス改善、データベース単位の設定項目サポート、エイリアス機能の追加、mruby関連のクラッシュバグ修正などもりだくさんです。

  • [パフォーマンス改善] 多くの条件でシーケンシャルサーチのパフォーマンスが向上しました。件数が多ければ多いほど効果が大きくなります。100万件くらいのレコードであれば数倍速くなります。
  • [設定] データベース単位で設定項目を管理できるようになりました。永続化されるため1度設定した値は再起動後も残っています。
  • [エイリアス] テーブル・カラムなどの名前に別名(エイリアス)をつけられるようになりました。スキーマ変更の助けになるはずです。
  • [mruby] mruby本体にあったクラッシュバグを修正しました。また例外発生時にバックトレースが壊れる問題も修正しました。安定性、問題発生時のデバッグのしやすさが改善しています。

パフォーマンス改善

前回のリリースではCOLUMN @~ "CONSTANT_PATTERN"のような定数のパターンに対する正規表現マッチのシーケンシャルスキャン検索のパフォーマンスを改善しました。

今回のリリースでは、さらに、true29のような定数のみの条件、COLUMN == 29のような二項演算の条件でもシーケンシャルスキャン検索のパフォーマンスを改善しました。二項演算は==だけでなく非等価演算(!=)と<>=などの比較演算も改善対象なので多くのケースで高速になります。

Groongaはカラムストアのデータストアを採用しており、カラム単位での処理を効率よく実現できるアーキテクチャーになっています。今回のパフォーマンス改善はこの特性を活かしたものです。(さらに活かしているのがgrn_tsで、今回の改善後から、さらに数倍速いです。)

現在のGroongaの検索処理はインデックスを使えるならできるだけインデックスを使う、という方針で実行しているのですが、十分に絞り込めている状態ではインデックスを使うよりもシーケンシャルスキャンした方が速いこともあります。今後は実行プランを改善し、場合によってはシーケンシャルスキャンも優先して、トータルでより高速な検索処理を実現する予定です。

設定

データベース単位で設定項目を管理できるようになりました。コマンドライン引数やリクエストパラメーターと違い、データベースに永続化されるため、1度設定した値は再起動後も残っています。

設定項目は以下のコマンドで管理できます。

この設定機能はGroonga内部で使うために開発した機能ですが、ユーザーも自由に使えます。プラグインの挙動をカスタマイズしたい、ちょっとしたキーバリューストアが欲しい、といったときに活用してください。

エイリアス

前述の設定機能を使っているのがこのエイリアス機能です。この機能を使うと、テーブル・カラム・関数名・コマンド名など、Groonga内で名前で参照しているものすべてに別名(エイリアス)をつけることができます。

サービスに影響がないようにスキーマ変更をしたり、後方互換性を実現するために有用です。

たとえば、ユーザーにはaliased_columnのようにエイリアス名を使うようにしてもらいます。管理者はaliased_columncurrent_columnを指すようにします。その後、current_columnを変更したnew_columnを新しく用意し、準備ができた段階でaliased_columnが指すカラムをnew_columnに変更すれば、ユーザーのクエリーを一切変更せずにnew_columnを使えるようになります。

エイリアスをスキーマ変更のために使う例はエイリアスでも説明しているので参照してください。

関数名・コマンド名を変更するとき、変更前の名前をエイリアスとして登録しておけば、変更後もその名前でアクセスできるので後方互換性を維持できます。

活用してください。

mruby

Groongaがmrubyを組み込んでから2年ほど経っています。mrubyを活用する場面は徐々に増えていて、コマンドラインツールgrndbはmrubyで実装していますし、シャーディング機能もmrubyで実装しています。

Groongaプロジェクトはmrubyで問題が見つかったときはmruby本体にフィードバックしています。今回のリリースで修正した内容もmruby本体にフィードバックして取り込まれています。

今回の修正でGroongaのユースケースとしてはmrubyは十分安定したと言えます。近い将来、mrubyを必須のモジュールとし、よりmrubyを活用することを検討しています。

イベントのおしらせ

今月・来月には以下のイベントが予定されています。

さいごに

5.1.1からの詳細な変更点は5.1.2リリース 2016-01-29を確認してください。

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