SlideShare a Scribd company logo
1 of 35
Download to read offline
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
Mroonga開発者が
来たぞ!
須藤功平 クリアコード
三木会
2016-11-17
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以降はバンドルもされている
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
特徴
高速日本語全文検索(全言語OK)
MySQL 5.6以前は日本語未対応
5.7以降は日本語対応しているが遅い
カラムストアによる高速処理
全文検索初心者でも使える
全文検索上級者は活用できる
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
高速日本語全文検索
ベンチマーク1.
速さの秘密2.
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
ベンチマーク環境
対象:Wikipedia日本語版
レコード数:約185万件
データサイズ:約7GB
メモリー4GB・SSD250GB(ConoHa)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
補足
MySQL 5.7を使用
他人のベンチマークは参考程度
検討時は実環境でベンチマークを!
詳細:
https://github.com/groonga/wikipedia-search/issues/4
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
検索1
キーワード:テレビアニメ
(ヒット数:約2万3千件)
InnoDB ngram 3m2s
InnoDB MeCab 6m20s
Mroonga:1 0.11s
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
検索2
キーワード:データベース
(ヒット数:約1万7千件)
InnoDB ngram 36s
InnoDB MeCab:1 0.03s
Mroonga:2 0.09s
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
検索3
キーワード:PostgreSQL OR MySQL
(ヒット数:約400件)
InnoDB ngram N/A(Error)
InnoDB MeCab:1 0.005s
Mroonga:2 0.028s
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
検索4
キーワード:日本
(ヒット数:約63万件)
InnoDB ngram 1.3s
InnoDB MeCab 1.3s
Mroonga:1 0.21s
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
検索まとめ
Mroonga:安定して速い
InnoDB FTS MeCab
ハマれば速い
InnoDB FTS ngram
安定して遅い
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
速さの秘密
最適化された転置索引実装
2段階のデータ圧縮
高速なポスティングリスト探索
検索だけでなく更新も速い
11年以上開発が続いている全文検索エンジンGroongaを使用
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
もっと速さの秘密
カラムストアを活かした最適化
ポイント1:余計なI/Oを減らす
ポイント2:I/Oを局所化
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
カラムストア
カラム
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
カラム
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
Mroonga
カラムごと
InnoDB他
カラム 行
値の管理単位 行ごと
高速なアクセス単位
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
必要なカラムのみアクセス
-- aのみにアクセス
SELECT a
FROM table
-- cのみにアクセス
WHERE c = XXX;
-- bにはアクセスしない
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
減ったI/O
カラム
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
カラム
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
Mroonga
カラムごと
InnoDB他
カラム 行
値の管理単位 行ごと
高速なアクセス単位
アクセスしない
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
行カウント
-- カラムの値は必要ない
SELECT COUNT(*)
FROM table
-- cの全文検索インデックスにだけアクセス
WHERE MATCH(c)
AGAINST('+keyword' IN BOOLEAN MODE);
-- a, b, cはアクセスしない
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
減ったI/O
カラム
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
カラム
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
Mroonga
カラムごと
InnoDB他
カラム 行
値の管理単位 行ごと
高速なアクセス単位
アクセスしない
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
ORDER BY LIMIT
SELECT *
FROM table
WHERE MATCH(c)
AGAINST('+keyword' IN BOOLEAN MODE)
-- MySQLではなくMroongaがORDER BY LIMITを処理
-- →Mroongaは10レコードだけMySQLに返す
-- マッチしたレコードすべては返さない
ORDER BY a LIMIT 10;
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
ORDER BY LIMITの最適化
Mroongaが検索
カラム毎の処理でI/Oを局所化
(索引非使用時)
Mroongaがソート
カラム毎の処理でI/Oを局所化
MroongaがOFFSET/LIMITを処理
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
カラム毎の処理は速い
カラム
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
カラム
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
Mroonga
カラムごと
InnoDB他
カラム 行
値の管理単位 行ごと
高速なアクセス単位
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
最適化のまとめ
転置索引実装が速い
検索も更新も速い
カラムストアで速い
ポイント:I/O削減・I/O局所化
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
全文検索初心者でも使える
インストールが簡単
MySQLの標準機能のみで使える
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
インストールが簡単
APT/Yumリポジトリー
MariaDBバンドル
MariaDB込みのWindowsバイナリ
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
標準機能のみで使える
-- 作成
CREATE TABLE table (
-- ...,
FULLTEXT INDEX (column)
) ENGINE=Mroonga;
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
標準機能のみで使える
-- 変換
ALTER TABLE table
ADD FULLTEXT INDEX (column)
ENGINE=Mroonga;
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
標準機能のみで使える
SELECT * FROM table
WHERE
MATCH(column)
AGAINST('+keyword'
IN BOOLEAN MODE);
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
全文検索上級者向け機能
カスタマイズ
デフォルト値はいい感じ
→初心者はカスタマイズなしでよい
Groongaの機能をもっと使える
(高速・高機能)
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
文字正規化ルール変更
CREATE TABLE table (
-- ...,
FULLTEXT INDEX (column)
--
-- コメントでパラメーターを指定
COMMENT='normalizer "NormalizerAuto"'
) ENGINE=Mroonga;
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
文字正規化ルール変更
CREATE TABLE table (
-- ...,
FULLTEXT INDEX (column)
-- MariaDBの場合:
-- カスタムパラメーターを使える
NORMALIZER='NormalizerAuto'
) ENGINE=Mroonga;
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);
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
今後
最新機能サポート
JSONを全文検索
(JSON型のデータの読み書きは対応済み)
仮想カラム・生成カラム
パーティショニング+全文検索対応
最新版をMariaDBにバンドル
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
最新版をバンドル
Mroongaは毎月リリース
MariaDB 10.2.1はMroonga 5.04
をバンドル
Mroongaの最新版は6.10
Mroongaは6.03からMariaDB 10.2を
サポート
現在テスト中→テスト対応後マージ
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
まとめ1
高速日本語全文検索(全言語OK)
カラムストアによる高速処理
全文検索初心者でも使える
全文検索上級者は活用できる
Mroonga開発者が 来たぞ! Powered by Rabbit 2.2.0
まとめ2
今後もMroongaは便利になる
MariaDBで最新Mroongaを使える
MySQLで全文検索ならMroonga!

More Related Content

What's hot

MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムKouhei Sutou
 
3DESの件 〜俺、112bitになります〜
3DESの件 〜俺、112bitになります〜3DESの件 〜俺、112bitになります〜
3DESの件 〜俺、112bitになります〜enigma63
 
Innodb Deep Talk #2 でお話したスライド
Innodb Deep Talk #2 でお話したスライドInnodb Deep Talk #2 でお話したスライド
Innodb Deep Talk #2 でお話したスライドYasufumi Kinoshita
 
某S社のddd(メイリオ)
某S社のddd(メイリオ)某S社のddd(メイリオ)
某S社のddd(メイリオ)kumake
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Hiro H.
 
Percona Toolkit for Effective MySQL Administration
Percona Toolkit for Effective MySQL AdministrationPercona Toolkit for Effective MySQL Administration
Percona Toolkit for Effective MySQL AdministrationMydbops
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용I Goo Lee
 
MySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことMySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことyoku0825
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSTomas Vondra
 
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークke-m kamekoopa
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)NTT DATA Technology & Innovation
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교Woo Yeong Choi
 
Grafana Dashboards as Code
Grafana Dashboards as CodeGrafana Dashboards as Code
Grafana Dashboards as CodeTakuhiro Yoshida
 
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版Kouhei Sutou
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...NTT DATA Technology & Innovation
 
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウKentaro Yoshida
 
MySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software TestMySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software TestI Goo Lee
 

What's hot (20)

MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
3DESの件 〜俺、112bitになります〜
3DESの件 〜俺、112bitになります〜3DESの件 〜俺、112bitになります〜
3DESの件 〜俺、112bitになります〜
 
Innodb Deep Talk #2 でお話したスライド
Innodb Deep Talk #2 でお話したスライドInnodb Deep Talk #2 でお話したスライド
Innodb Deep Talk #2 でお話したスライド
 
某S社のddd(メイリオ)
某S社のddd(メイリオ)某S社のddd(メイリオ)
某S社のddd(メイリオ)
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
 
pg_trgmと全文検索
pg_trgmと全文検索pg_trgmと全文検索
pg_trgmと全文検索
 
Percona Toolkit for Effective MySQL Administration
Percona Toolkit for Effective MySQL AdministrationPercona Toolkit for Effective MySQL Administration
Percona Toolkit for Effective MySQL Administration
 
pg_trgmと全文検索
pg_trgmと全文検索pg_trgmと全文検索
pg_trgmと全文検索
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용
 
MySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことMySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいこと
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFS
 
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォーク
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
 
Grafana Dashboards as Code
Grafana Dashboards as CodeGrafana Dashboards as Code
Grafana Dashboards as Code
 
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
 
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
 
MySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software TestMySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software Test
 

Similar to Mroonga開発者が来たぞ!

いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!Kouhei Sutou
 
MroongaとPGroonga
MroongaとPGroongaMroongaとPGroonga
MroongaとPGroongaKouhei Sutou
 
Mroonga Meetup 2014/06/29
Mroonga Meetup 2014/06/29Mroonga Meetup 2014/06/29
Mroonga Meetup 2014/06/29kenhys
 
Groonga Meetup 2014/04/29
Groonga Meetup 2014/04/29Groonga Meetup 2014/04/29
Groonga Meetup 2014/04/29kenhys
 
DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?Hiroaki Kubota
 
Fluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyFluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyDaisuke Ando
 
ソーシャルゲームログ解析基盤のMongoDB活用事例
ソーシャルゲームログ解析基盤のMongoDB活用事例ソーシャルゲームログ解析基盤のMongoDB活用事例
ソーシャルゲームログ解析基盤のMongoDB活用事例知教 本間
 
Droonga移行後の世界
Droonga移行後の世界Droonga移行後の世界
Droonga移行後の世界Kouhei Sutou
 
MariaDBにバンドルされていないMroonga
MariaDBにバンドルされていないMroongaMariaDBにバンドルされていないMroonga
MariaDBにバンドルされていないMroongaKouhei Sutou
 
GroongaでRedmineを高速全文検索
GroongaでRedmineを高速全文検索GroongaでRedmineを高速全文検索
GroongaでRedmineを高速全文検索Kouhei Sutou
 
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?Kouhei Sutou
 
Droongaのはじめかた
DroongaのはじめかたDroongaのはじめかた
DroongaのはじめかたKouhei Sutou
 
MongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムMongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムHitoshi Asai
 

Similar to Mroonga開発者が来たぞ! (20)

Groonga族2015
Groonga族2015Groonga族2015
Groonga族2015
 
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!
 
MroongaとPGroonga
MroongaとPGroongaMroongaとPGroonga
MroongaとPGroonga
 
Mroonga Meetup 2014/06/29
Mroonga Meetup 2014/06/29Mroonga Meetup 2014/06/29
Mroonga Meetup 2014/06/29
 
Groonga Meetup 2014/04/29
Groonga Meetup 2014/04/29Groonga Meetup 2014/04/29
Groonga Meetup 2014/04/29
 
DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?
 
PGroongaの実装
PGroongaの実装PGroongaの実装
PGroongaの実装
 
文字化け
文字化け文字化け
文字化け
 
MHA, Murakumo & Me
MHA, Murakumo & MeMHA, Murakumo & Me
MHA, Murakumo & Me
 
Fluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyFluentd+MongoDB+Groovy
Fluentd+MongoDB+Groovy
 
ソーシャルゲームログ解析基盤のMongoDB活用事例
ソーシャルゲームログ解析基盤のMongoDB活用事例ソーシャルゲームログ解析基盤のMongoDB活用事例
ソーシャルゲームログ解析基盤のMongoDB活用事例
 
Droonga移行後の世界
Droonga移行後の世界Droonga移行後の世界
Droonga移行後の世界
 
MariaDBにバンドルされていないMroonga
MariaDBにバンドルされていないMroongaMariaDBにバンドルされていないMroonga
MariaDBにバンドルされていないMroonga
 
GroongaでRedmineを高速全文検索
GroongaでRedmineを高速全文検索GroongaでRedmineを高速全文検索
GroongaでRedmineを高速全文検索
 
Start-padrino
Start-padrinoStart-padrino
Start-padrino
 
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
 
Groonga族2016
Groonga族2016Groonga族2016
Groonga族2016
 
組込み向けRuby処理系mrubyの可能性
組込み向けRuby処理系mrubyの可能性組込み向けRuby処理系mrubyの可能性
組込み向けRuby処理系mrubyの可能性
 
Droongaのはじめかた
DroongaのはじめかたDroongaのはじめかた
Droongaのはじめかた
 
MongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムMongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステム
 

More from Kouhei Sutou

RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowRubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowKouhei Sutou
 
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Kouhei Sutou
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowKouhei Sutou
 
Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアKouhei Sutou
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかKouhei Sutou
 
Apache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataApache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataKouhei Sutou
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像Kouhei Sutou
 
Apache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataApache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataKouhei Sutou
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Kouhei Sutou
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームKouhei Sutou
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroongaKouhei Sutou
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Kouhei Sutou
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!Kouhei Sutou
 
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムPostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムKouhei Sutou
 
Improve extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionImprove extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionKouhei Sutou
 

More from Kouhei Sutou (20)

RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowRubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
 
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
 
Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェア
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのか
 
Apache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataApache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory data
 
Apache Arrow 2019
Apache Arrow 2019Apache Arrow 2019
Apache Arrow 2019
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像
 
Apache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataApache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory data
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6
 
Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroonga
 
My way with Ruby
My way with RubyMy way with Ruby
My way with Ruby
 
Red Data Tools
Red Data ToolsRed Data Tools
Red Data Tools
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!
 
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムPostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
 
Improve extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionImprove extension API: C++ as better language for extension
Improve extension API: C++ as better language for extension
 

Recently uploaded

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 

Recently uploaded (9)

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 

Mroonga開発者が来たぞ!

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