mroonga 2.00リリース
今日は4年に1度の肉の日ですね。
mroonga 2.00 をリリースしました!
それぞれの環境毎のインストール方法: インストール
今回のリリースでメジャーバージョンがあがって2.00となっています!今回のリリースでもデータベースの更新が必要なので注意してください。(詳細は後述)
メジャーバージョンアップについて
mroongaのメジャーバージョンアップの理由も groongaのメジャーバージョンアップの理由 と同じです。1.xxから2.xxにメジャーバージョンがあがったのは今日が特別な日ということもありますが、より安心して使ってもらえることをアピールしたいという意図があります。
1.00のリリースは2011/9/29と半年も経っていませんが、1.00をリリースしてからそれまでに比べて本当に多くの人に使ってもらえるようになりました。機能追加の要望やバグ報告も多くなり、これまでよりも開発スピードがあがり( リリースノート を見るとよくわかります)、より便利により速くより安定してきました。
すでに利用されているみなさんはmroongaが毎月着実によくなっていることを実感していることでしょう。しかし、まだ利用されていない方々にはそこが届きにくいようです。そこで、メジャーバージョンをあげることで、よくなっている感を大きくアピールして、これまでmroongaの採用・検証を見送っていたみなさんにも、mroongaが十分実用的な全文検索エンジンであることを試してもらえることを期待しています。
もし、まわりに「MySQLで全文検索したいんだけどどうしよう…」という方がいたら、ぜひ「mroongaが2.00になっているから試してみなよ!」とオススメしてください。
新ロゴ
groongaのロゴ変更 に合わせて、mroongaのロゴも変更しました。groongaと色味が変わっています。
これらのロゴやpowered by mroongaのようなバナーも準備を進めていて、近いうちに自由に簡単に利用できるような形で提供する予定です。mroongaを使っている人はぜひ使ってください!(ステッカーも作る予定もあります。)
注意: アップグレード時にデータベースの再構築が必要
前回のリリースに引き続き今回もデータベースの再構築が必要になります。
もし、1.20よりも前のバージョンからバージョンアップする場合は以下の手順ではなく、 1.20へバージョンアップするときの手順 を使ってください。1.20よりも前から2.00へアップグレードするときも1.20へバージョンアップする手順でOKです。
もしバージョンアップに失敗してしまった場合は MySQL の INSTALL PLUGIN に失敗する時の処方箋(mroonga-1.20編)- よし研 -日々クリエイション- を参考にしてください。
非互換な変更点
このリリースでは、データベースの再作成が必要な変更点が2つあります。
- データベース名、テーブル名、カラム名に任意の文字を使えるようにした。
- MySQLの YEAR 型にgroongaが提供する時間型を使うようにした。
更新手順
mroongaを使っているデータベースをダンプします:
% mysqldump MY_MROONGA_DATABASE > database-mroonga.dump
既存のデータベースを削除します:
% mysql -u root -e 'DROP DATABASE MY_MROONGA_DATABASE'
バージョンアップします。Debian GNU/LinuxやUbuntuでは apt-getを使います。CentOSやFedoraでは yum を使います。
Debian GNU/LinuxまたはUbuntuの場合:
% sudo apt-get install -y mysql-server-mroonga
CentOSまたはFedoraの場合:
% sudo yum install -y mysql-mroonga
再起動します。
Debian GNU/LinuxまたはUbuntuの場合:
% sudo /usr/sbin/service restart mysql
CentOSの場合:
% sudo /sbin/service restart mysqld
Fedoraの場合:
% sudo systemctl restart mysqld
データベースを作り直します:
% mysql -u root -e 'CREATE DATABASE MY_MROONGA_DATABASE'
修正したダンプファイルを使ってデータベースを復旧します:
% mysql -u root MY_MROONGA_DATABASE < database-mroonga.dump
これで2.00を使うことができるようになります。
SQL実行の最適化について
mroongaではより高速に動作するようにするために特定のSQLに対して処理を最適化しています。例えば、以下のようにORDER BY LIMITを指定した場合に必要なレコードのみを返す、という最適化をしています。
SELECT ... FROM ... WHERE MATCH(...) AGAINST(...) ORDER BY ... LIMIT ...
これは、MySQLレベルでソートするよりもgroongaのカラムベースという特性を活かしてソートしたほうが高速である、というところ理由からです。
今回のリリースに先立って、この最適化がどのくらい有効かということをtwitterのデータ(7357415件)を使って検証してみました。
ヒットする件数が多いとき(1044001件ヒットするとき)は5倍ほど高速になり、ヒット件数が少ないとき(32件ヒットするとき)はほぼ同じ性能でした。ヒット件数が多いほどこの最適化が有効であることは認識していましたが、ヒット件数が少なくなると最適化のせいで逆に遅くなるのではないかと予想していました。
しかし、今回の検証で常に最適化しても性能に問題がないということがわかったので、自信を持って、これまで通り常に最適化するようにします!
データによってはこの傾向が変動する可能性があります。もし、ORDER BY LIMITの最適化により逆に遅くなる場合は、 強制的に最適化を無効にすることができる ので、それを試してみてください。
ただ、性能がでない場合は報告してもらえると嬉しいです。もしかしたら、より高速に動作させるようにできるかもしれません。
変更点
1.20からの変更点: 2.00リリース - 2012/02/29
さいごに
2.00になり、さらに改良を続けているmroongaをぜひ使ってみてください!