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

お知らせ

2.03リリース - 2012/05/29

ご用心

このリリースにはマルチカラムインデックスに関する後方互換性のない変更が1つあります。もし、 ストレージモード でマルチカラムインデックスをつかっている場合は ALTER TABLE DISABLE KEYSALTER TABLE ENBALE KEYS を使ってインデックスを作り直してください:

mysql> ALTER TABLE table_name DISABLE KEYS;
mysql> ALTER TABLE table_name ENABLE KEYS;

改良

  • [ストレージモード] バルクインサートにてインデックスの有効/無効化をサポート。 [#1310]
  • [rpm][centos] MySQL 5.5.24に対応。
  • [rpm][fedora] MySQL 5.5.23に対応。
  • mroonga_match_escalation_threshold システム変数を追加。
  • groonga 2.0.3以降を必須にした。
  • [yum] groongaのyumリポジトリを提供するRPMパッケージ名をgroonga-repositoryからgroonga-releaseへと変更し、RPMパッケージ命名規則をcentos-releaseやfedora-releaseに合わせた。
  • [Mac OS X] Homebrewでインストールできるようになった。詳細はこちら: インストールガイド

修正

  • Mac OS Xでビルドに失敗する問題を修正。
  • [ラッパーモード] トランザクション内の検索で見つからないというエラーが報告される不具合を修正[#1322][groonga-dev,00746] [石橋卓見さんが報告]
  • [rpm] mroongaプラグインがアップグレードのときに登録解除される不具合を修正。[groonga-dev,00810] [石橋卓見さんが報告][岩井さんがパッチ提供]
  • MySQL 5.5以前では行ベースのレプリケーションで間違ったデータが転送されてしまう不具合を修正。 [#1379][groonga-dev,00902] [土井健司さんが報告]

感謝

  • 石橋卓見さん
  • 岩井さん
  • 土井健司さん

2.02リリース - 2012/04/29

ご用心

今回のリリースよりパッケージへ署名する鍵を変更しました。groongaパッケージを更新する前にパッケージ署名用の新しい鍵をインポートして下さい。

Debian/Ubuntu:

% sudo apt-get update
% sudo apt-get -y --allow-unauthenticated install groonga-keyring

CentOS/Fedora:

% sudo yum update
% sudo yum install --nogpgcheck -y groonga-repository

ご用心

このリリースは ENUM 型に関して後方互換性がありません。もし、256個以上の値を持つ ENUM 型を使っている場合はアップグレード前にデータベースをダンプし、アップグレード後にリストアする必要があります。

ご用心

このリリースは SET 型に関して後方互換性がありません。もし、32個以上の値を持つ SET 型を使っている場合はアップグレード前にデータベースをダンプし、アップグレード後にリストアする必要があります。

改良

  • GCC 4.7とMySQL 5.5.22の組み合わせでビルドするための一時的な対応を追加した。この組み合わせではgccの -Wdeprecated オプションを指定するとビルドに失敗します。 [#1337] [かずひこさんが報告]
  • [mariadb] MariaDB 5.5.23をサポート。 [#1339] [かずひこさんが報告] [Ryo Onoderaさんが報告]
  • [ストレージモード] REPLACE 時に、プライマリーキーを使わなかったという必要のない警告がでないようにした。
  • [ストレージモード] インデックスを使った ENUM の検索をサポート。 [@104yuki_nさんが提案]
  • [非互換] ENUM 用のgroongaの型を符合付き2バイト整数型から符号なし2バイト整数型に変更した。 ENUM 型のカラムを作りなおす必要があります。
  • [非互換] SET 用のgroongaの型を符合付き8バイト整数型から符号なし8バイト整数型に変更した。 SET 型のカラムを作りなおす必要があります。
  • MySQL 5.5.23に対応。
  • groonga 2.0.2以降を必須にした。
  • [非互換][実験的] MATCH AGAINST IN NATURAL LANGUAGE MODE での検索方法をフレーズ検索から類似検索に変更した。
  • [apt][yum] パッケージに署名する鍵を変更。
  • Ubuntu 12.04 Precise Pangolinに対応。

修正

  • [ストレージモード] キーの長さが間違っていた問題を修正。
  • 大きな転置索引を更新中に検索するとクラッシュする問題を修正。 [#1321] [groonga-dev,00743] [河野隆志さんが報告] [groonga-dev,00746] [石橋卓見さんが報告]
  • TRUNCATE したテーブルのトークナイザーとエンコーディングが壊れる問題を修正。 [#1335] [@boss_satoさんが報告]
  • Spiderとmroongaを組み合わせたときに最初の INSERT が失敗する問題を修正。 [#1319] [groonga-dev,00736] [Takayuki Hondaさんが報告]

感謝

  • 河野隆志さん
  • @boss_satoさん
  • かずひこさん
  • Ryo Onoderaさん
  • @104yuki_nさん
  • Takayuki Hondaさん
  • 石橋卓見さん

2.01リリース - 2012/03/29

改良

  • MySQL 5.5.22に対応。
  • MySQL 5.1.62に対応。
  • groonga 2.0.1以降を必須にした。
  • [rpm] アップグレード時のプラグインアンインストール処理を改良した。
  • [rpm] アップグレード時のプラグインアンインストール処理を改良した。
  • [ラッパーモード] MyISAMと一緒に使ったときに INSERT ON DUPLICATE KEY ERROR を使えるようにした。 [#1300] [@104yuki_nさんが報告]
  • [ラッパーモード] ラップしているテーブルの table_flags() を使うようにした。 [#1304]
  • MySQLがValgrindサポート付きでビルドされているとき用に --with-valgrind configureオプションを追加した。
  • [mariadb] 小数形式秒指定を使った DATETIME 型をサポートした。
  • 位置情報サポートなしでのビルドをサポートした。 [#1313] [かずひこさんが報告]
  • [ストレージモード] i386環境で最適化オプションを指定したときでもマルチカラムインデックスが動くようにした。 [かずひこさんが報告]
  • [ラッパーモード] ラッパーモードでInnoDBを使って、InnoDBのテストが通ることを確認した。
  • [solaris] Solaris 11上でのビルドできるようにした。 [かずひこさんが報告]
  • [mariadb55] MariaDB 5.5で mroonga_default_parser が動くようにした。 [#1314] [かずひこさんが報告]
  • [mariadb55] MariaDB 5.5で ORDER LIMIT 最適化が動くようにした。 [#1315] [かずひこさんが報告]
  • [doc] MeCabについて追記した。
  • [ストレージモード] 値が0のレコードをインデックスを使って検索できるようにした。 [@104yuki_nさんが報告]
  • [ストレージモード] 最適化ビルドフラグを指定してもUbuntu Hardy上で正しく動くようにした。 [かずひこさんが報告]
  • ロゴ を追加した。
  • HTMLのデザインを更新した。

修正

  • [ストレージモード] メモリリークを修正。
  • [ストレージモード] マルチカラムインデックスを使って検索したときに見つかったのに結果が返されない問題を修正した。 [#1300] [@ytaka5さんが報告]
  • [ストレージモード] COUNT (*) の効果がなかった問題を修正した。 [groonga-dev,00717] [Takayuki Hondaさんが報告]
  • DROP DATABASE 時に発生していたメモリリークを修正した。
  • [ストレージモード] 32bit環境で last_insert_grn_id() が壊れた値を返すことがある問題を修正した。 [かずひこさんが報告]
  • [ストレージモード] COUNT (*) が0を返すことがある問題を修正した。 [groonga-dev,00736] [Takayuki Hondaさんが報告]

感謝

  • @ytaka5さん
  • @104yuki_nさん
  • Takayuki Hondaさん
  • かずひこさん

2.00リリース - 2012/02/29

ご用心

このリリースは後方互換性がありません。アップグレードするにはデータベースをダンプ・リストアする必要があります。

このリリースでは、データベースの再作成が必要な変更点が2つあります。

  1. データベース名、テーブル名、カラム名に任意の文字を使えるようにした。
  2. MySQLの YEAR 型にgroongaが提供する時間型を使うようにした。

以下が更新手順です。

mroongaを使っているデータベースをダンプします:

% mysqldump MY_MROONGA_DATABASE > database-mroonga.dump

既存のデータベースを削除します:

% mysql -u root -e 'DROP DATABASE MY_MROONGA_DATABASE'

"mroonga"ストレージエンジンにアップグレードします。Debian GNU/LinuxやUbuntuでは apt-get を使います。CentOSやFedoraでは yum を使います。

apt-get:

% sudo apt-get install -y mysql-server-mroonga

yum:

% sudo yum remove -y mysql-mroonga
% sudo yum install -y mysql-mroonga

ご用心

yum install の前に yum remove を実行することを忘れてはいけません。もし、 yum remove を実行することを忘れると、MySQLのシステムテーブルを壊してしまうかもしれません。

データベースを作り直します:

% mysql -u root -e 'CREATE DATABASE MY_MROONGA_DATABASE'

修正したダンプファイルを使ってデータベースを復旧します:

% mysql -u root MY_MROONGA_DATABASE < database-mroonga.dump

これで2.00を使うことができるようになりました。

改良

  • 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さん

1.20リリース - 2012/01/29

ご用心

このリリースは後方互換性がありません。アップグレードするにはデータベースをダンプ・リストアする必要があります。

このリリースでは、データベースの再作成が必要な変更点が2つあります。

  1. ストレージエンジン名を"groonga"から"mroonga"へ改名。
  2. MySQLのDATE、DATETIME、TIMESTAMP型にgroongaが提供する時間の値を使うようにした。

"CREATE TABLE" SQL内の"ENGINE=groonga"を変更するためにダンプしたデータベースを変更する必要があります。以下が更新手順です。

mroongaを使っているデータベースをダンプします:

% mysqldump MY_MROONGA_DATABASE > database-groonga.dump

ダンプファイル中のストレージエンジンを変更します:

% sed -e 's/^) ENGINE=groonga/) ENGINE=mroonga/' database-groonga.dump > database-mroonga.dump

CREATE TABLEENGINE=groonga だけが ENGINE=mroonga に変更されていることを確認します。 @@ ... @@ 行に CREATE TABLE が含まれているかを確認します。この行が CREATE TABLE を含んでいたら、その変更はほぼ間違いなく CREATE TABLE 用の変更です:

% diff -up database-groonga.dump database-mroonga.dump
--- database-groonga.dump     2012-01-29 16:53:20.732624670 +0900
+++ database-mroonga.dump     2012-01-29 16:54:47.608420981 +0900
@@ -29,7 +29,7 @@ CREATE TABLE `diaries` (
   PRIMARY KEY (`id`),
   FULLTEXT KEY `title_index` (`title`),
   FULLTEXT KEY `body_index` (`body`)
-) ENGINE=groonga DEFAULT CHARSET=utf8;
+) ENGINE=mroonga DEFAULT CHARSET=utf8;
 /*!40101 SET character_set_client = @saved_cs_client */;

 --

既存のデータベースを削除します:

% mysql -u root -e 'DROP DATABASE MY_MROONGA_DATABASE'

"mroonga"ストレージエンジンにアップグレードします。Debian GNU/LinuxやUbuntuでは apt-get を使います。CentOSやFedoraでは yum を使います。

apt-get:

% sudo apt-get install -y mysql-server-mroonga

yum:

% sudo yum remove -y mysql-mroonga
% sudo yum install -y mysql-mroonga

ご用心

yum install の前に yum remove を実行することを忘れてはいけません。もし、 yum remove を実行することを忘れると、MySQLのシステムテーブルを壊してしまうかもしれません。

データベースを作り直します:

% mysql -u root -e 'CREATE DATABASE MY_MROONGA_DATABASE'

修正したダンプファイルを使ってデータベースを復旧します:

% mysql -u root MY_MROONGA_DATABASE < database-mroonga.dump

これで1.20を使うことができるようになりました。

改良

  • MySQL 5.5.20に対応。
  • MySQL 5.1.61に対応。
  • groonga 1.3.0以降を必須にした。
  • [非互換] ストレージエンジン名を"groonga"から"mroonga"に変更。
  • UTF8_BINコレーションに対応。 [#1150]
  • strict-aliasingの警告が出ないようにした。 [@issmさんが報告]
  • DECIMALに対応した。 [#1249] [@Kiskeさんが報告]
  • [storage mode] HA_KEYREAD_ONLY対応。インデックス内のカラム値のアクセスが高速になるはず。 [#1212]
  • [ストレージモード] float値のマルチカラムインデックスに対応。
  • [ストレージモード] double値のマルチカラムインデックスに対応。
  • [ストレージモード] enum型とset型をより適切なgroongaのデータ型に対応付けるようにした。
  • [ラッパーモード] REPAIR TABLE対応。
  • [ストレージモード] viewでの count(*) に対応。 [#1255] [Takahiro Nagaiさんが報告]
  • [非互換] DATE、DATETIME、TIMESTAMP型の値にgroongaが提供する時間の値を使うようにした。

修正

  • [debian] replacesとbreaksのmysql-server-groongaのバージョンを修正。 [@ytaka5さんが報告]
  • [doc] 実行結果が間違っていた問題を修正。 [Hidekazu Tanakaさんが報告]
  • [ラッパーモード] メモリリークを修正。 [montywiさんが報告]

感謝

  • @ytaka5さん
  • Hidekazu Tanakaさん
  • @issmさん
  • montywiさん
  • @Kiskeさん

1.11リリース - 2011/12/29

改良

  • MySQL 5.5.19に対応。
  • MySQL 5.6.4に対応。
  • MySQL 5.6.3対応をやめた。
  • Fedora 16に対応。
  • Fedora 15対応をやめた。
  • 警告strict-aliasingをでないようにした。 [groonga-dev,00659] [かずひこさんが報告]
  • utf8, binary, ascii, latin1, cp932, sjis, eucjpms, ujis, koi8r charsetに対応。 [#1160] [nobodyさんが報告]
  • [wrapper mode] 削除をロールバックした後に削除できなくなる問題を修正。 [#1224] [宍倉功一さんが報告]

修正

  • [storage mode] 主キーがないテーブルで全文検索すると結果が空になる問題を修正。 [#1193] [かずひこさんが報告]
  • コンパイラの-Wno-というフラグの検出に失敗していた問題を修正。 [Arnaud Fontaineさんがパッチを作成]
  • [wrapper mode] 全件カウント時にインデックスが使われない問題を修正。 [#1196][groonga-dev,0653] [金岡勲さんが報告]

感謝

  • かずひこさん
  • Arnaud Fontaineさん
  • 金岡勲さん
  • nobodyさん
  • 宍倉功一さん

1.0.1リリース - 2011/11/29

このリリースからプロジェクト名と製品名を「groognaストレージエンジン」から「mroonga」に変更しました。

MariaDB対応とバグ修正が主な変更点のリリース。

改良

  • 「groonga storage engine」から「mroonga」に改名。 #1170
  • groonga_libgroonga_version変数およびgroonga_version変数の追加。 #1158
  • information_schema.plugins.plugin_versionがmroongaのバージョンを返すようにした。 #1157
  • groonga_log_file変数の追加。 #1178 [nobodyさんが提案]
  • FLUSH STATUSがgroonga_*ステータス変数をリセットするようにした。 #1166 [かずひこさんが報告]
  • TRUNCATE TABLEに対応。 #1151 [Takahiro Nagaiさんが提案]
  • ALTER TABLEに対応。 #1168
  • MariaDB 5.2.9に対応。 #1152 [Kazuhikoさんが報告]
  • MariaDB 5.3.2-betaに対応。 #1152 [かずひこさんが報告]
  • [rpm] ドキュメントのパッケージを分離。
  • 文字列のシステム変数のメモリ確保方法を改良。
  • PLUGIN_LICENSE_GPLを使うようにした。 [Kazuhikoさんが提案]
  • MeCab関連の設定を削除。
  • FOUND_ROWS()とSQL_CALC_FOUND_ROWSに対応。 #1163 [Horikoshi Yukiさんが報告]
  • '-'を含むテーブル名に対応。 #1165 [nobodyさんが報告]
  • MySQL 5.1上でテーブルを作りなおさないインデックス変更に対応。
  • [deb] i386対応。
  • [rpm] i386対応。

修正

  • [ストレージモード] TEXT型に対するREPLACE INTOが動作しないバグの修正。 #1153 [Kazuhikoさんが報告]
  • [ラッパーモード] LOCK TABLE内のINSERTがInnoDBで動かないバグの修正。 #1154 [Kazuhikoさんが報告]
  • ORDERとLIMITの両方を使うと結果が正しくないバグの修正。 #1161 [Horikoshi Yukiさんが報告]
  • FORCE INDEXで存在しないキーを指定するクラッシュするバグを修正。 #1181 [Takahiro Nagaiさんが報告]

感謝

  • かずひこさん
  • Horikoshi Yukiさん
  • nobodyさん
  • Takahiro Nagaiさん

1.0.1リリース - 2011/10/29

位置情報検索の対応を強化とストレージモードでの動的なインデックス変更の対応強化が目玉のリリース。

改良

  • [ストレージモード][ラッパーモード] flush tables によるデータベースの再オープンに対応。
  • [ラッパーモード] 位置情報インデックスに対応。(ただし、カラムに保存できる型はPointのみ対応。インデックスを利用した位置検索はMBRContainsのみ対応。)
  • [ベンチマーク] groongaのデータベースには実際に書き込むかどうかを指定する groonga_dry_write 変数の追加。ベンチマーク時などボトルネック処理の確認用。
  • CentOS 6用のインストールドキュメントにMySQLのバージョン番号を追加。 [@yoshi_kenさんが提案]
  • [位置情報検索] 不必要な処理をなるべくしないようにして高速化。
  • mysql_configがfast mutexesを有効にしていると報告しても、それを無視する --disable-fast-mutexes configureオプションを追加。
  • [ストレージモード] create index に対応。
  • [ストレージモード] drop index に対応。
  • [ストレージモード] 全文検索用のマルチカラムインデックスに対応。
  • D プラグマに対応。
  • MySQL 5.5.17に対応。
  • MySQL 5.6.3-m6に対応。
  • groonga 1.2.7に対応。(1.2.6以下のサポートを削除。)
  • Ubuntu 11.10 Oneiric Ocelotに対応。

修正

  • booleanモードでクエリの先頭に + を指定すると何もヒットしなくなる問題を修正。 [西山はじめさんが報告]
  • [Fedora] パッケージの依存関係を修正。 [Takahiro Nagaiさんが報告]
  • [Fedora] プラグインをロードするとシンボルが見つからずエラーになる問題を修正。 [Takahiro Nagaiさんが報告]
  • [ストレージモード] マルチカラムインデックスに varchar を使うとインデックスが正常に作成されない問題を修正。 #1143 [Takahiro Nagaiさんが報告]

感謝

  • @yoshi_kenさん
  • 西山はじめさん
  • Takahiro Nagaiさん

1.0.0 リリース - 2011/09/29

初回リリースから約1年経って、初のメジャーリリース!

改良

  • [ラッパーモード] drop index対応。 #1040
  • [ストレージモード] GEOMETRY対応。(ただし、カラムに保存できる型はPointのみ対応。インデックスを利用した位置検索はMBRContainsのみ対応。) #1041
  • [ストレージモード] マルチカラムインデックスに対応。 #455
  • [ストレージモード][ラッパーモード] 全文検索用パーサー(トークナイザー)のカスタマイズに対応。 #592
  • configureにデフォルトの全文検索用パーサーを指定する --with-default-parser オプションを追加。
  • 実行時にデフォルトの全文検索用パーサーを指定する groonga_default_parser 変数を追加。
  • [ラッパーモード] ストレージモードで実装している orderlimit が指定された場合に必要のないレコードを返さないようにする高速化に対応。
  • [ストレージモード] 1つの select 中での複数の match against 指定に対応。
  • [非互換][ストレージモード] _score カラムの削除。代わりにMySQL標準の書き方である match against を使ってください。
  • [ラッパーモード] プライマリキーの更新に対応。
  • MySQL 5.5.16に対応。
  • CentOS 6に対応。
  • groonga 1.2.6に対応。(1.2.5以下のサポートを削除。)

修正

  • [Ubuntu] Lucid上でインストールエラーが発生する問題を修正。 (Isao Sugimotoさんが報告)
  • auto_incrementを使った場合にテキストデータが壊れる問題を修正。 (@zaubermaerchenさんが報告) #1072
  • [Ubuntu] Lucid上でテーブルを削除するとクラッシュする問題を修正。 #1063 (Isao Sugimotoさんが報告)
  • MySQLと同じビルドオプションを使っていなかった問題を修正。 GitHub#4 (groongaのGitHubのIssues) (Tomohiro MITSUMUNEさんが報告)

感謝

  • Isao Sugimotoさん
  • @zaubermaerchenさん
  • Tomohiro MITSUMUNEさん