Mroongaブログ

2013-02-28

mroonga 3.01リリース

mroonga 3.01 をリリースしました!

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

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

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

1.20より前のバージョンからアップグレードする場合は 1.20リリース 2012/01/29 にある手順を使ってください。

1.20からアップグレードする場合は 2.00リリース 2012/02/29 にある手順を使ってください。

2.00か2.01からアップグレードする場合は、 2.02リリース 2012/04/29 にある手順でパッケージ署名用の新しい鍵をインポートしてください。

2.00以降でストレージモードにてマルチカラムインデックスを使っている場合は 2.02リリース 2012/04/29 にある手順でインデックスを作り直してください。

2.04以降でストレージモードにてSETカラムもしくは要素数が256より少ないENUMを使用している場合は、 2.05リリース 2012/07/29 にある手順でデータベースを再作成してください。

2.05以降でマルチカラムインデックスをVARCHARやCHAR型に対して使っている場合は、 2.08リリース 2012/10/29 にある手順でインデックスを再作成してください。

2.08以降でTIMESTAMP型のカラムを使っているテーブルがあれば、データベースを再作成してください。CHAR(N)を主キーとしているテーブルがあれば、インデックスを再作成してください。手順は 2.09リリース 2012/11/29 にあります。

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

  • utf8_unicode_ci, utf8m4_unicode_ciのサポート
  • FOREIGN KEY制約のサポート(制限あり)

utf8_unicode_ci, utf8m4_unicode_ciのサポート

3.00リリースの目玉でもあった、MySQL互換の照合順序ですが、今回のリリースでは utf8_unicode_ciと utf8m4_unicode_ciも追加でサポートしました。

照合順序としてutf8_unicode_ciもしくはutf8mb4_unicode_ciを使いたい場合には、groonga-normalizer-mysqlをあらかじめインストールしておく必要があります。(1.0.1以降が必要です。パッケージの場合にはmroongaと一緒にインストールされます。)

この変更は非互換な変更です。

既存のデータベースへの影響について:

  • 新しく作成するテーブル・カラム・インデックスから有効になります。(これは、3.00でサポートしたutf8_general_ciやutf8mb4_general_ciと同様です。)
  • すでに存在しているカラム・インデックスはこれまで通り、groonga独自のnormalizer(NormalizerAuto)が使われます。(utf8_general_ciやutf8mb4_general_ci適用済みのものを除く)

そのため、mroongaを3.01へとアップデートして既存のデータベースを使い続けるとカラム毎に異なるnormalizerを使うことになる点に注意が必要です。

全体で同じnormalizerを使う方法について:

  • 新しく作るテーブル・カラム・インデックスのCOLLATIONとしてutf8_general_ci,utf8_general_ci,utf8_unicode_ci,utf8mb4_unicode_ciではないCOLLATIONを指定する方法があります。この方法ではgroongaのnormalizerに統一(従来通りの挙動)できます。
  > ALTER TABLE (テーブル名) ADD (カラム定義) COLLATE 'utf8_roman_ci';

カラムに指定したCOLLATIONについては以下のようにして確認することができます。

  > SHOW FULL COLUMNS FROM (テーブル名);  

注意:

  • utf8_general_ci,utf8_general_ci,utf8_unicode_ci,utf8mb4_unicode_ciではないCOLLATIONはgroonga独自のnormalizerを使うようになっています。
  • utf8_binはCOLLATIONを使わないという意味なので、正規化したい場合はこれも使ってはいけません。

mroongaをパッケージではなく、ソースからインストールする場合にもMySQL互換のnormalizerを使いたい場合には、あらかじめ groonga-normalizer-mysql をインストールしておいてください。

groonga-normalizer-mysqlもソースからインストールしたい場合、1.0.1のソースアーカイブは こちら からダウンロードすることができます。

FOREIGN KEY制約のサポート(制限あり)

今回のリリースではFOREIGN KEY制約を限定的にサポートしました。

限定的にというのは、mroongaとMySQLとではテーブル間の関係性の表現に違いがあるからです。

本質的にはmroongaは内部でgroongaを使っているので、groongaとMySQLの違いということになります。

groongaはカラムの型として別のテーブルを指定する参照型という機能があります。groongaではテーブル間の関係というとこの 参照型 を使います。

一方、MySQLではテーブル間の関係をカラムの型で明示することができないので、FOREIGN KEY制約を指定することでテーブル間の関係を明示するのが通例です。

今回のリリースでは、mroongaでFOREGIN KEY制約を使ってテーブルを構築すると、透過的にgroongaのスキーマへと参照型を使ってその情報を反映できるようにしました。

これができるようになると何が嬉しいかというと、mroongaで作ったgroongaのデータベースを(mroongaではなく)groongaから検索するときにテーブル間の関係を利用して検索ができるようになります。

ただし、今回のサポートにはいくつか制限があります。

まず、MySQL 5.6でのみ利用可能なことです。

MySQL 5.6向けのmroongaパッケージの提供は一部のディストリビューションにしか行なっていません。そのため、今回のFOREIGN KEY制約のサポートをすぐに試せるのはCentOS 5のみとなっています。

また、それ以外にも以下の制限があります。

  • 必ず参照先テーブルはPKであり、マルチカラムでない必要がある。
  • 制約名は、何を指定しても参照元カラム名に変更される。
  • 「ON DELETE」「ON UPDATE」には、何を指定しても「RESTRICT」に変更される。

mroonga公式ではありませんが、WING☆さんがMySQL 5.6系のmroongaパッケージを独自に提供してくださっているので、CentOS 6をお使いの方は そちら を利用されるのも良いでしょう。

さいごに

3.00からの詳細な変更点は 3.01リリース 2013/02/28 を確認してください。

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