Mroongaブログ

2014-01-29

Mroonga 3.12リリース

Mroonga 3.12 をリリースしました!

インストール/アップグレード方法

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

以前のバージョンからアップグレードする場合には、アップグレード手順に注意が必要です。現在お使いのバージョンごとの アップグレード手順 を参照してください。

今回のリリースの主なトピックは以下の通りです。

  • ロックタイムアウトを動的に変更できるようになりました
  • WプラグマのTritonnとの互換性を改善しました

Wプラグマの挙動については、これまでと非互換な変更となっているので注意してください。Wプラグマを使ったクエリの修正が必要です。

ロックタイムアウトを動的に変更できるようになりました

今回のリリースでは、ロックタイムアウトを動的に変更できるようになりました。

クラッシュせずにロックが競合してしまった場合、Mroongaからは処理中の扱いにしか見えず、Groonga内部でひたすらロックのタイムアウト待ちになる場合がありえます。

ただ、Groonga内部のタイムアウト設定はソースコード上決めうちになっていたので、これまでは直接Groongaのソースコードを書き換えてビルドする必要がありました。リリースされるたびにパッチをあてて対処しなくてもすむようになっています。

挙動を変更するには、mroonga_lock_timeoutを次のように実行します。1000ミリ秒でタイムアウトする場合はこんな感じです。

SET GLOBAL mroonga_lock_timeout = 1000;

この機能はyokuさんからの提案で実現しました。経緯については、yokuさんが詳しくエントリを書いてくれています。

WプラグマのTritonnとの互換性を改善しました

今回のリリースでは、WプラグマのTritonnとの互換性を改善しました。

Tritonn由来でWプラグマというマルチカラムインデックスでカラムごとに重みづけをする機能があるのですが、このときのセクションの指定が0オリジンだったのを1オリジンに変更しました。これはTritonnと異なる実装だったのを修正したものです。

また、これにあわせてセクションを省略したときの重みが0だったのを1に変更しました。これもTritonnと同じになるように修正したものです。

Wプラグマを使っている既存のクエリーはすべてこの変更の影響を受けます。

移行するための具体的な例を次に示します。サンプルとしてtitleカラムとcommentカラムに対するマルチカラムインデックスを設定しているとします。

CREATE TABLE books (
  `id` INTEGER AUTO_INCREMENT,
  `title` text,
  `comment` text,
  PRIMARY KEY(`id`),
  FULLTEXT INDEX content_index (title, comment)
) engine=mroonga default charset utf8;

従来のWプラグマでは0オリジンなので、titleカラムの重みを10にし、commentカラムの重みを1にして検索するクエリは次のようになります。

SELECT title, comment, MATCH (title,comment) AGAINST('*W0:10,1:1 +Groonga' IN BOOLEAN MODE) AS score FROM books;

0オリジンなので、titleカラムは0番目のセクション、commentカラムは1番目のセクションに対応しています。

3.12以降では、1オリジンなので、titleカラムは1番目のセクション、commentカラムは2番目のセクションに対応します。同じクエリをMroonga 3.12対応にするには次のように書き換えます。

SELECT title, comment, MATCH (title,comment) AGAINST('*W1:10,2:1 +Groonga' IN BOOLEAN MODE) AS score FROM books;

さいごに

3.12からの詳細な変更点は 3.12リリース 2013/12/29 を確認してください。

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