2012年2月29日

[mysql 15688] [ANN] mroonga 2.00

須藤です。

今日は4年に1度の肉の日ですね。

特別な日なので、mroongaのメジャーバージョンをあげて2.0.0と
してリリースしました!
http://mroonga.github.com/ja/docs/news.html#release-2-00

mroongaはTritonnの後継プロジェクトで、MySQLからSQLを使って
groongaの機能を利用するためのストレージエンジンです。mroonga
を使うことによりMySQLで日本語データを高速に全文検索することが
できます。

ドキュメント:
http://mroonga.github.com/ja/
インストールガイド:
http://mroonga.github.com/ja/docs/install.html

!!!注意!!!
今回のリリースでもデータベースの更新が必要です!
(詳細は後述)

もし失敗してしまった場合は↓のページを参考にしてください。
http://d.hatena.ne.jp/yoshi-ken/20120204
MySQL の INSTALL PLUGIN に失敗する時の処方箋(mroonga-1.20編)
- よし研 -日々クリエイション-

○ メジャーバージョンアップについて

mroongaのメジャーバージョンアップの理由もgroongaのメジャーバー
ジョンアップの理由と同じです。1.xxから2.xxにメジャーバージョ
ンがあがったのは今日が特別な日ということもありますが、より安
心して使ってもらえることをアピールしたいという意図があります。

1.00のリリースは2011/9/29と半年も経っていませんが、1.00をリ
リースしてからそれまでに比べて本当に多くの人に使ってもらえる
ようになりました。機能追加の要望やバグ報告も多くなり、これま
でよりも開発スピードがあがり(リリースノートを見るとよくわか
ります)、より便利により速くより安定してきました。

すでに利用されているみなさんはmroongaが毎月着実によくなってい
ることを実感していると思いますが、まだ利用されていない方々に
はそこが届きにくいと思います。そこで、メジャーバージョンをあ
げることで、よくなっている感を大きくアピールして、これまで
mroongaの採用・検証を見送っていたみなさんにも、mroongaが十分
実用的な全文検索エンジンであることを試してもらいたいと思って
います。

もし、まわりに「MySQLで全文検索したいんだけどどうしよう…」と
いう方がいたら、ぜひ「mroongaが2.00になっているから試してみな
よ!」とオススメしてもらえると嬉しいです。

○ 新ロゴ

groongaのロゴ変更に合わせて、mroongaのロゴも変更しました。
groongaと色味が変わっています。
http://mroonga.github.com/images/logo.png

これらのロゴやpowered by mroongaのようなバナーも準備を進めて
いて、近いうちに自由に簡単に利用できるような形で提供する予定
です。mroongaを使っている人はぜひ使ってください!
(ステッカーも作ろうかと思っています。)

○ 注意: アップグレード時にデータベースの再構築が必要

前回のリリースに引き続き今回もデータベースの再構築が必要にな
ります。すみません。。。

!!!注意!!!

もし、1.20以前からバージョンアップする場合は以下の手順ではな
く、↓にある手順を使ってください。
http://mroonga.github.com/ja/docs/news.html#release-1-20

以下にある手順は1.20から2.00にバージョンアップする場合の手順
です。

もし失敗してしまった場合は↓のページを参考にしてください。(再掲)
http://d.hatena.ne.jp/yoshi-ken/20120204
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の最適化により逆に遅くなる場合は、強制的に最適
化を無効にすることもできるので、それを試してみてください。
http://mroonga.github.com/ja/docs/reference.html#mroonga-enable-optimization

ただ、性能がでない場合は教えてもらえると嬉しいです。もしかし
たらより高速に動作させるようにできるかもしれません。

○ 変更点

1.20からの変更点は以下の通りです。
http://mroonga.github.com/ja/docs/news.html#release-2-00

2.00リリース - 2012/02/29
-------------------------

改良
^^^^

* MySQL 5.5.21に対応。
* groonga 2.0.0以降を必須にした。
* MySQL 5.6とMariaDBで使える小数付きのTIMESTAMPに対応した。
* [ストレージモード] 主キーがない場合でも ORDER LIMIT を最適化できるようにした。
* [ストレージモード] 全文検索と COLUMN = INT_VALUE を一緒に
使った場合でも ORDER LIMIT を最適化できるようにした。
* [ストレージモード] サブクエリ内での全文検索に対応した。 [@camyuyさんが報告]
* [非互換] groongaからデータを読めるように、MySQLの YEAR を
groongaの Time に対応させるようにした。
* [ストレージモード] 更新時の必要ない書き込みロックを削除し
た。 [#1271] [Takahiro Nagaiさんが報告]
* 最適化のオン・オフを切り替える
mroonga_enable_optimization システム変数を追加した。ベン
チマーク時に便利。
* [ラッパーモード] 一時テーブルに対応した。 [#1267]
* [非互換] データベース名に / を使えるようにした。 [#1281]
* INSERT ... ON DUPLICATE KEY UPDATE のときに不必要なメッセー
ジが表示されないようにした。
* UNIQUE KEY を使った INSERT ... ON DUPLICATE KEY UPDATE に
対応した。 [#1283] [@104yuki_nさんが報告]
* 主キーに DATETIME, DATE, TIMESTAMP, TIME, DECIMAL, YEAR を使えるようになった。
* [非互換] データベース名、テーブル名、カラム名にすべての文
字を使えるようになった。 [#1284]
* [ラッパーモード] 255バイト以上のインデックスに対応した。 [#1282]
* [ラッパーモード] 主キーの更新に対応した。 [#1195]
* [ラッパーモード] ALTER TABLE でエラーが発生したときの処理を追加した。 [#1195]
* [ラッパーモード] LineString のような未サポートの位置情報
型を使った場合のエラーメッセージを改良した。 [#1195]
* [ラッパーモード] INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS に対応した。 [#1195]

修正
^^^^

* [rpm] プラグインを再インストールするようにした。
* [doc] ストレージエンジン名が間違っていた問題を修正。
[Tomoatsu Shimadaさんが報告]

感謝
^^^^

* @camyuyさん
* Takahiro Nagaiさん
* Tomoatsu Shimadaさん
* @104yuki_nさん


--
須藤 功平 <kou@xxxxx>
株式会社クリアコード < http://www.clear-code.com/>; (03-6231-7270)

プログラミングが好きなソフトウェア開発者を募集中:
http://www.clear-code.com/recruitment/


投稿者 xml-rpc : 2012年2月29日 15:24
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/108815
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。