Mroongaブログ

2019-07-30

Mroonga 9.05リリース!

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

変更点

今回の変更点は以下の通りです。

  • MySQL 5.6.45と5.7.27とMySQL 8.0.17への対応
  • ユニークインデックスを更新する際の不具合を修正

ユニークインデックスを更新する際の不具合を修正しているので、すでにユニークインデックスを作っている人はテーブルを作り直す必要があります。 既存のユニークインデックスにゴミが残っているかもしれないからです。詳細は後述します。

また、Mroongaの変更点ではないのですが、Groonga 9.0.5で大きな全文検索用のインデックスを更新したときにクラッシュする可能性のある不具合が修正されているので、クラッシュする問題を踏んでいる場合には、アップグレードすることで解決するかもしれません。

MySQL 5.6.45と5.7.27とMySQL 8.0.17への対応

今回のリリースでは、MySQLの各バージョンのアップデートに追従するパッケージをリリースしました。 MySQL 8.0向けのパッケージでサポートしていなかった TIMESTAMP 型にも対応しています。

MySQL 8.0向けパッケージには制限がいくつかあります。もし不具合や疑わしい挙動をみつけたら報告してくれると助かります。

なお、MySQL8.0に関する既知の問題は以下の通りです。

  • ラッパーモードは未対応
  • ストレージモードでも JSON データ型は未対応

[ストレージモード] ユニークインデックスを更新する際の不具合を修正

今回のリリースでは、ユニークインデックスを更新する際の不具合を修正しました。

以下の条件を満たすと INSERT 時にキーの重複エラーが発生していました。

  • ユニークインデックスをマルチカラムに対して作成する
  • ユニークキーのカラムの一部が更新される

例えば、次のようなサンプルでエラーが再現します。

MySQL [test]> CREATE TABLE fts_targets (
    ->   id int(11) NOT NULL AUTO_INCREMENT,
    ->   source_id int(11) NOT NULL,
    ->   source_type_id int(11) NOT NULL,
    ->   PRIMARY KEY (id),
    ->   -- Multiple column unique index
    ->   UNIQUE KEY (source_id, source_type_id)
    -> ) DEFAULT CHARSET=utf8mb4 ENGINE=Mroonga;
Query OK, 0 rows affected (0.027 sec)

MySQL [test]> INSERT INTO fts_targets (source_id, source_type_id) VALUES (10, 100);
Query OK, 1 row affected (0.006 sec)

MySQL [test]> UPDATE fts_targets SET source_id = 11 WHERE id = 1;
Query OK, 1 row affected (0.001 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MySQL [test]> INSERT INTO fts_targets (source_id, source_type_id) VALUES (10, 100);
ERROR 1062 (23000): Duplicate entry '10-100' for key 'source_id'

上記のようなケースで、古いインデックスのエントリが削除されず、キーの重複が発生してしまっていました。

冒頭でも述べましたが、すでにユニークインデックスを作っている人はテーブルを作り直す必要があります。 テーブルを作り直すには、ダンプ・リストアするか、以下の手順を実行してください。

ALTER TABLE (ユニークインデックスを作ったテーブル) DISABLE KEYS;
ALTER TABLE (ユニークインデックスを作ったテーブル) FORCE;
ALTER TABLE (ユニークインデックスを作ったテーブル) ENABLE KEYS;

おわりに

9.04からの詳細な変更点は9.05リリース - 2019-07-30を確認してください。

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

2019-06-29

Mroonga 9.04リリース!

今日は肉の日ですね。

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

変更点

今回の変更点は以下の通りです。

  • MySQL 8.0に対応したパッケージの提供をはじめました
  • ((MATCH OR MATCH) AND (MATCH)) というパターンのクエリーでクラッシュする不具合を修正しました

MySQL 8.0に対応したパッケージの提供をはじめました

今回のリリースでは 試してもらいやすいようにMySQL 8.0に対応したパッケージの提供をCentOS向けにはじめました。

実験的なので、もし不具合や疑わしい挙動をみつけたら報告してくれると助かります。

なお、MySQL8.0に関する既知の問題は以下の通りです。

  • ラッパーモードは未対応
  • ストレージモードでも JSON データ型は未対応

((MATCH OR MATCH) AND (MATCH)) というパターンのクエリーでクラッシュする不具合を修正しました

SELECT文のWHERE句で((MATCH AGAINST (...) OR MATCH AGAINST(...)) AND (MATCH AGAINST(...))) というパターンのクエリーを実行するとMroongaがクラッシュする不具合を修正しました。

Mroongaにはコンディションプッシュダウン(検索条件をMySQLレベルではなくGroongaレベルで処理する最適化)という機能があるのですが、その扱いに問題があったためクラッシュしていました。

おわりに

9.03からの詳細な変更点は9.04リリース - 2019-06-29を確認してください。

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

2019-05-29

Mroonga 9.03リリース!

今日は肉の日ですね。

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

変更点

今回の変更点は以下の通りです。

  • INDEX_LARGE フラグをサポートしました
  • 最新の MySQL/MariaDB/Percona Serverをサポートしました
  • MariaDB 10.1/10.2 向けのwindowsパッケージを再度サポートしました

INDEX_LARGE フラグをサポートしました

今回のリリースでは INDEX_LARGE フラグをサポートしました。

このフラグは、大きなデータをサポートするインデックスを作成するのに使います。 大きなデータといっても、データに依存します。ただ一定の指標があって、それは1000万レコードあり、マルチカラムインデックスを使っているか、インデックスのテーブルにトークナイザーが指定されているかどうかです。

INDEX_FLAG は次のように COMMENT で指定します。

CREATE TABLE memos (
  content VARCHAR(64) NOT NULL,
  KEY (content) COMMENT 'flags "INDEX_LARGE"'
) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4;

注意事項として、INDEX_FLAG を使うことで、通常のインデックスの2倍程度メモリ使用量が増えます。

最新の MySQL/MariaDB/Percona Serverをサポートしました

今回のリリースでは、以下の最新の MySQL/MariaDB/Percona Server をサポートしました。

  • MySQL 5.6.44, 5.7.26
  • MariaDB 10.1.40.
  • MariaDB 10.2.24.
  • MariaDB 10.3.14, 10.3.15.
  • Percona Server 5.6.44.

MariaDB 10.1/10.2 向けのwindowsパッケージを再度サポートしました

前回のリリースで明示的にアナウンスしていませんでしたが、MariaDB 10.3にMroongaをバンドルしたWindowsのパッケージ(zip)だけでなく、10.1や10.2のパッケージの提供をはじめました。

もし、古いバージョンのMariaDB (10.1や10.2) をバンドルしているMroongaのパッケージを使っているなら、同系統のバージョンでのアップグレードがしやすくなりますね。

これを機会に新しいMroongaを試してみてください。

おわりに

9.03からの詳細な変更点は9.03リリース - 2019-05-29を確認してください。

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

2019-03-29

Mroonga 9.01リリース!

今日は肉の日ですね。

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

変更点

今回の変更点は以下の通りです。

  • トークナイザーやノーマライザー、インデックスに関するテーブルやコメントのパラメータのサポートを強化しました。
  • 最新のMariaDBやPercona Serverをサポートしました。
  • MariaDBをバンドルしたパッケージをAppVeyorでビルドできるようにしました。(まだTODOあり)

トークナイザーやノーマライザー、インデックスに関するテーブルやコメントのパラメータのサポートを強化

今回のリリースでは、トークナイザーやノーマライザー、インデックスに関するサポートを強化しました。

ストレージモードでは、トークナイザーのオプションを COMMENT に指定できます。

CREATE TABLE foo (...) COMMENT='tokenizer "TokenNgram('n', 4)"'

従来の default_tokenizer は非推奨になりました。上記のように tokenizer を使ってください。

インデックスのパラメータとして LEXICON を指定します。

FULLTEXT INDEX foo (bar) LEXICON='terms'

あるいは次のように指定します。

FULLTEXT INDEX foo (bar) COMMENT 'lexicon "terms"'

MariaDBでは、 TOKENIZER, NORMALIERTOKEN_FILTERS をテーブルのパラメータに指定できます。

CREATE TABLE foo (...) TOKENIZER='TokenNgram("n", 4)'
CREATE TABLE foo (...) NORMALIZER='NormalizerNFKC100("unify_kana", true)'
CREATE TABLE foo (...) TOKEN_FILTERS='TokenFilterNFKC100("unify_katakana_v_sounds", true)'

最新のMariaDBやPercona Serverをサポートしました

今回のリリースでは、以下の最新の MariaDB/Percona Server をサポートしました。

  • Percona Server 5.7.25-28.
  • MariaDB 10.3.13.
  • MariaDB 10.2.23.

MariaDBをバンドルしたパッケージをAppVeyorでビルドできるようにしました

これまで、AppVeyor は単にWindowsでのビルドテストだけにしか使っていませんでした。 そのため、リリース用のパッケージは手動でビルドしていました。

AppVeyorでもパッケージをビルドできるようにしたので、artifactsのリンクからパッケージをダウンロードできるようになりました。

GitHubのリリースページからパッケージがダウンロードできる点には変更ありません。

おわりに

9.00からの詳細な変更点は9.01リリース - 2019-03-29を確認してください。

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

2019-02-09

Mroonga 9.00リリース!

今日は肉の日ですね。

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

メジャーバージョンアップです! メジャーバージョンアップですが、互換性は壊れていないので、データベースを再構築することなく9.00へアップグレードできます。

変更点

今回の変更点は以下の通りです。

  • MariaDB 10.3.12をサポートしました。
  • MariaDB 10.2.21をサポートしました。
  • Percona Server 5.7.24-27をサポートしました。
  • Percona Server 5.6.43 rel84.3をサポートしました。
  • MySQL 5.7.25をサポートしました。
  • MySQL 5.6.43をサポートしました。

Groonga 9.0.0 にて、 TokenPatternTokenTable トークナイザーと NormalizerNFKC100remove_blank をサポートしました。 Groonga 9.0.0 にアップグレードすることで、Mroonga 9.00からこれらを使えます。

おわりに

8.09からの詳細な変更点は9.00リリース - 2019-02-09を確認してください。

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