mroonga開発者が 来たぞ!
TRANSCRIPT
![Page 1: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/1.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
Mroonga開発者が来たぞ!
須藤功平 クリアコード
三木会2016-11-17
![Page 2: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/2.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
Mroonga
読み方:むるんが
ストレージエンジン
MySQL 5.7対応もちろん5.5, 5.6も対応
MariaDB 10.2対応もちろん5.5, 10.0, 10.1も対応
10.0以降はバンドルもされている
![Page 3: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/3.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
特徴
高速日本語全文検索(全言語OK)MySQL 5.6以前は日本語未対応5.7以降は日本語対応しているが遅い
カラムストアによる高速処理
全文検索初心者でも使える
全文検索上級者は活用できる
![Page 4: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/4.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
高速日本語全文検索
ベンチマーク1.
速さの秘密2.
![Page 5: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/5.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
ベンチマーク環境
対象:Wikipedia日本語版
レコード数:約185万件
データサイズ:約7GB
メモリー4GB・SSD250GB(ConoHa)
![Page 6: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/6.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
補足
MySQL 5.7を使用
他人のベンチマークは参考程度検討時は実環境でベンチマークを!
詳細:https://github.com/groonga/wikipedia-search/issues/4
![Page 7: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/7.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
検索1
キーワード:テレビアニメ(ヒット数:約2万3千件)
InnoDB ngram 3m2sInnoDB MeCab 6m20sMroonga:1 0.11s
![Page 8: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/8.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
検索2
キーワード:データベース(ヒット数:約1万7千件)
InnoDB ngram 36sInnoDB MeCab:1 0.03sMroonga:2 0.09s
![Page 9: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/9.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
検索3
キーワード:PostgreSQL OR MySQL(ヒット数:約400件)
InnoDB ngram N/A(Error)InnoDB MeCab:1 0.005sMroonga:2 0.028s
![Page 10: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/10.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
検索4
キーワード:日本(ヒット数:約63万件)
InnoDB ngram 1.3sInnoDB MeCab 1.3sMroonga:1 0.21s
![Page 11: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/11.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
検索まとめ
Mroonga:安定して速い
InnoDB FTS MeCabハマれば速い
InnoDB FTS ngram安定して遅い
![Page 12: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/12.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
速さの秘密
最適化された転置索引実装
2段階のデータ圧縮
高速なポスティングリスト探索
検索だけでなく更新も速い
11年以上開発が続いている全文検索エンジンGroongaを使用
![Page 13: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/13.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
もっと速さの秘密
カラムストアを活かした最適化ポイント1:余計なI/Oを減らす
ポイント2:I/Oを局所化
![Page 14: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/14.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
カラムストア
カラム
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
カラム
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
Mroonga
カラムごと
InnoDB他
カラム 行
値の管理単位 行ごと
高速なアクセス単位
![Page 15: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/15.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
必要なカラムのみアクセス
-- aのみにアクセスSELECT a FROM table-- cのみにアクセスWHERE c = XXX;-- bにはアクセスしない
![Page 16: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/16.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
減ったI/O
カラム
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
カラム
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
Mroonga
カラムごと
InnoDB他
カラム 行
値の管理単位 行ごと
高速なアクセス単位
アクセスしない
![Page 17: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/17.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
行カウント
-- カラムの値は必要ないSELECT COUNT(*) FROM table-- cの全文検索インデックスにだけアクセスWHERE MATCH(c) AGAINST('+keyword' IN BOOLEAN MODE);-- a, b, cはアクセスしない
![Page 18: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/18.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
減ったI/O
カラム
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
カラム
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
Mroonga
カラムごと
InnoDB他
カラム 行
値の管理単位 行ごと
高速なアクセス単位
アクセスしない
![Page 19: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/19.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
ORDER BY LIMIT
SELECT * FROM tableWHERE MATCH(c) AGAINST('+keyword' IN BOOLEAN MODE)-- MySQLではなくMroongaがORDER BY LIMITを処理-- →Mroongaは10レコードだけMySQLに返す-- マッチしたレコードすべては返さないORDER BY a LIMIT 10;
![Page 20: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/20.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
ORDER BY LIMITの最適化
Mroongaが検索カラム毎の処理でI/Oを局所化(索引非使用時)
Mroongaがソートカラム毎の処理でI/Oを局所化
MroongaがOFFSET/LIMITを処理
![Page 21: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/21.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
カラム毎の処理は速い
カラム
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
カラム
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
Mroonga
カラムごと
InnoDB他
カラム 行
値の管理単位 行ごと
高速なアクセス単位
![Page 22: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/22.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
最適化のまとめ
転置索引実装が速い検索も更新も速い
カラムストアで速いポイント:I/O削減・I/O局所化
![Page 23: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/23.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
全文検索初心者でも使える
インストールが簡単
MySQLの標準機能のみで使える
![Page 24: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/24.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
インストールが簡単
APT/Yumリポジトリー
MariaDBバンドル
MariaDB込みのWindowsバイナリ
![Page 25: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/25.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
標準機能のみで使える
-- 作成CREATE TABLE table ( -- ..., FULLTEXT INDEX (column)) ENGINE=Mroonga;
![Page 26: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/26.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
標準機能のみで使える
-- 変換ALTER TABLE table ADD FULLTEXT INDEX (column) ENGINE=Mroonga;
![Page 27: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/27.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
標準機能のみで使える
SELECT * FROM table WHERE MATCH(column) AGAINST('+keyword' IN BOOLEAN MODE);
![Page 28: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/28.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
全文検索上級者向け機能
カスタマイズデフォルト値はいい感じ→初心者はカスタマイズなしでよい
Groongaの機能をもっと使える(高速・高機能)
![Page 29: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/29.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
文字正規化ルール変更
CREATE TABLE table ( -- ..., FULLTEXT INDEX (column) -- -- コメントでパラメーターを指定 COMMENT='normalizer "NormalizerAuto"') ENGINE=Mroonga;
![Page 30: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/30.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
文字正規化ルール変更
CREATE TABLE table ( -- ..., FULLTEXT INDEX (column) -- MariaDBの場合: -- カスタムパラメーターを使える NORMALIZER='NormalizerAuto') ENGINE=Mroonga;
![Page 31: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/31.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
Groongaの検索機能を使う
SELECT * FROM table WHERE -- 「*SS」プラグマ使用時は「c1」は無視される MATCH(c1) -- 「*SS」はGroongaの全検索機能を使うためのプラグマ -- 1つのクエリーで複数のインデックスを使用可能 AGAINST('*SS c1 @ "keyword" && c2 < 100' IN BOOLEAN MODE);
![Page 32: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/32.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
今後
最新機能サポートJSONを全文検索(JSON型のデータの読み書きは対応済み)
仮想カラム・生成カラム
パーティショニング+全文検索対応
最新版をMariaDBにバンドル
![Page 33: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/33.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
最新版をバンドル
Mroongaは毎月リリース
MariaDB 10.2.1はMroonga 5.04をバンドルMroongaの最新版は6.10
Mroongaは6.03からMariaDB 10.2をサポート
現在テスト中→テスト対応後マージ
![Page 34: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/34.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
まとめ1
高速日本語全文検索(全言語OK)
カラムストアによる高速処理
全文検索初心者でも使える
全文検索上級者は活用できる
![Page 35: Mroonga開発者が 来たぞ!](https://reader034.vdocuments.net/reader034/viewer/2022052211/5895abe61a28ab3f048bd053/html5/thumbnails/35.jpg)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
まとめ2
今後もMroongaは便利になる
MariaDBで最新Mroongaを使える
MySQLで全文検索ならMroonga!