mroonga - MySQLで高速に全文検索するためのオープンソースのストレージエンジン

1. mroongaの特徴

1.1. mroongaとは

mroongaは全文検索エンジンであるgroongaをベースとしたMySQLのストレージエンジンです。

MySQLではver5.1からPluggable Storage Engineインタフェースが採用され、以前よりも柔軟に独自のストレージエンジンを利用できるようになりました。そこでgroongaにストレージエンジンインタフェースを実装し、MySQL経由でもgroongaを利用できるようにしました。

mroongaを経由することでgroongaをSQLコマンドでも利用することができるようになります。

1.2. Tritonnの後継

MySQLで日本語全文検索を実現するための方法として、MySQLにgroongaの前身である全文検索ライブラリSennaを組み込んだプロダクトをTritonnプロジェクトから開発・リリースされて来ました。mroongaはその後継プロダクトとなります。

1.3. MySQLのプラグインとして動作

TritonnではMySQLサーバのソースコードを直接修正していましたので、使用するためには利用者がソースから自分でビルドするか、あるいはTritonnプロジェクトが配布するバイナリを使う必要がありました(MySQL本家が配布する公式バイナリを利用できませんでした)。

一方、mroongaはPluggable Storage Engineインタフェースを利用した独立したプログラム(共有ライブラリ)であるため、MySQLの公式バイナリに手を加えずにプラグインとして動的にロードして利用することが可能となっています。これによりTritonnよりもさらに手軽に利用できるようになりました。

1.4. 更新性能の向上

Sennaと比較するとgroongaではインデックス追加/更新時のスループットが大幅に改善されています。

mroongaでもこの更新性能の向上の恩恵を受けています。

1.7. groongaストレージファイル経由でのシステム連携

mroongaではgroongaのDB APIを使用してデータの格納を行っています。この時作成されるストレージファイルはgroonga単体でデータ管理を行う場合と同じフォーマットとなります。つまり以下のような使い方も可能となります。

  • mroonga(MySQL)経由で格納したデータをgroongaサーバ(単体)の高度な検索機能を利用して検索
  • groongaサーバ(単体)経由で格納したデータをmroonga(MySQL)経由で参照

またgroongaのストレージファイルは複数プロセスや複数スレッドで共有することができますので、同じストレージファイルに対して複数パタンでの同時アクセスも可能です。

1.8. 他のストレージエンジンとの連携

mroongaには2つの動作モードがあります。

1つが「ストレージモード」で、データストアも検索機能もすべてgroongaを使うモードです。これがデフォルトのモードです。上述の参照ロックフリーなgroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。一方、トランザクションなどの機能は提供されません。

もう1つが「ラッパーモード」で、MyISAMやInnoDBといった他のストレージエンジンに 全文検索機能だけ を追加するモードです。このモードではトランザクションなど他のストレージエンジンがサポートしている機能に加えてgroongaの高速な全文検索機能を利用することができます。一方、groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネックになることが多いでしょう。

1.9. サポートしているプラットフォーム

現在サポートしているプラットフォームは以下の通りです。

  • Linux x86_64 (Intel64/AMD64)