rabbit-slide-kou-sanmokukai-2016-11-17 2016.11.17.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,335 @@
1
+ = Mroonga開発者が\n来たぞ!
2
+
3
+ : author
4
+ 須藤功平
5
+ : institution
6
+ クリアコード
7
+ : content-source
8
+ 三木会
9
+ : date
10
+ 2016-11-17
11
+ : allotted-time
12
+ 2h
13
+ : theme
14
+ .
15
+
16
+ = Mroonga
17
+
18
+ * 読み方:むるんが
19
+
20
+ * ストレージエンジン
21
+
22
+ * (('wait'))MySQL 5.7対応\n
23
+ (('note:もちろん5.5, 5.6も対応'))
24
+
25
+ * (('wait'))MariaDB 10.2対応\n
26
+ (('note:もちろん5.5, 10.0, 10.1も対応'))
27
+ * 10.0以降はバンドルもされている
28
+
29
+ = 特徴
30
+
31
+ * (('wait'))
32
+ 高速日本語全文検索(('note:(全言語OK)'))\n
33
+ (('note:MySQL 5.6以前は日本語未対応'))\n
34
+ (('note:5.7以降は日本語対応しているが遅い'))
35
+ * (('wait'))
36
+ カラムストアによる高速処理
37
+ * (('wait'))
38
+ 全文検索初心者でも使える
39
+ * (('wait'))
40
+ 全文検索上級者は活用できる
41
+
42
+ = 高速日本語全文検索
43
+
44
+ (1) ベンチマーク
45
+ (2) 速さの秘密
46
+
47
+ = ベンチマーク環境
48
+
49
+ * 対象:Wikipedia日本語版
50
+ * レコード数:約185万件
51
+ * データサイズ:約7GB
52
+ * メモリー4GB・SSD250GB(('note:(ConoHa)'))
53
+
54
+ = 補足
55
+
56
+ * MySQL 5.7を使用
57
+ * 他人のベンチマークは参考程度
58
+ * 検討時は実環境でベンチマークを!
59
+
60
+ (('note:詳細:'))\n
61
+ (('note:https://github.com/groonga/wikipedia-search/issues/4'))
62
+
63
+ = 検索1
64
+
65
+ (('tag:center'))
66
+ キーワード:テレビアニメ\n
67
+ (('note:(ヒット数:約2万3千件)'))
68
+
69
+ # RT
70
+ delimiter = [|]
71
+
72
+ InnoDB ngram | 3m2s
73
+ InnoDB MeCab | 6m20s
74
+ Mroonga:((*1*)) | 0.11s
75
+
76
+ = 検索2
77
+
78
+ (('tag:center'))
79
+ キーワード:データベース\n
80
+ (('note:(ヒット数:約1万7千件)'))
81
+
82
+ # RT
83
+ delimiter = [|]
84
+
85
+ InnoDB ngram | 36s
86
+ InnoDB MeCab:((*1*)) | 0.03s
87
+ Mroonga:((*2*)) | 0.09s
88
+
89
+ = 検索3
90
+
91
+ (('tag:center'))
92
+ キーワード:PostgreSQL OR MySQL\n
93
+ (('note:(ヒット数:約400件)'))
94
+
95
+ # RT
96
+ delimiter = [|]
97
+
98
+ InnoDB ngram | N/A(Error)
99
+ InnoDB MeCab:((*1*)) | 0.005s
100
+ Mroonga:((*2*)) | 0.028s
101
+
102
+ = 検索4
103
+
104
+ (('tag:center'))
105
+ キーワード:日本\n
106
+ (('note:(ヒット数:約63万件)'))
107
+
108
+ # RT
109
+ delimiter = [|]
110
+
111
+ InnoDB ngram | 1.3s
112
+ InnoDB MeCab | 1.3s
113
+ Mroonga:((*1*)) | 0.21s
114
+
115
+ = 検索まとめ
116
+
117
+ * (('wait'))Mroonga:安定して速い
118
+ * (('wait'))InnoDB FTS MeCab
119
+ * ハマれば速い
120
+ * (('wait'))InnoDB FTS ngram
121
+ * 安定して遅い
122
+
123
+ = 速さの秘密
124
+
125
+ * 最適化された転置索引実装\n
126
+ * (('wait'))2段階のデータ圧縮
127
+ * (('wait'))高速なポスティングリスト探索
128
+ * (('wait'))検索だけでなく更新も速い
129
+
130
+ (('wait'))
131
+ (('note:11年以上開発が続いている全文検索エンジンGroongaを使用'))
132
+
133
+ = もっと速さの秘密
134
+
135
+ * カラムストアを活かした最適化
136
+ * ポイント1:余計なI/Oを減らす
137
+ * ポイント2:I/Oを局所化
138
+
139
+ = カラムストア
140
+
141
+ # image
142
+ # src = images/column-store.svg
143
+ # relative_width = 100
144
+
145
+ = 必要なカラムのみアクセス
146
+
147
+ # coderay sql
148
+ -- aのみにアクセス
149
+ SELECT a
150
+ FROM table
151
+ -- cのみにアクセス
152
+ WHERE c = XXX;
153
+ -- bにはアクセスしない
154
+
155
+ = 減ったI/O
156
+
157
+ # image
158
+ # src = images/not-access-to-needless-columns.svg
159
+ # relative_width = 100
160
+
161
+ = 行カウント
162
+
163
+ # coderay sql
164
+ -- カラムの値は必要ない
165
+ SELECT COUNT(*)
166
+ FROM table
167
+ -- cの全文検索インデックスにだけアクセス
168
+ WHERE MATCH(c)
169
+ AGAINST('+keyword' IN BOOLEAN MODE);
170
+ -- a, b, cはアクセスしない
171
+
172
+ = 減ったI/O
173
+
174
+ # image
175
+ # src = images/count-star.svg
176
+ # relative_weight = 100
177
+
178
+ = (({ORDER BY LIMIT}))
179
+
180
+ # coderay sql
181
+ SELECT *
182
+ FROM table
183
+ WHERE MATCH(c)
184
+ AGAINST('+keyword' IN BOOLEAN MODE)
185
+ -- MySQLではなくMroongaがORDER BY LIMITを処理
186
+ -- →Mroongaは10レコードだけMySQLに返す
187
+ -- マッチしたレコードすべては返さない
188
+ ORDER BY a LIMIT 10;
189
+
190
+ = (({ORDER BY LIMIT}))の最適化
191
+
192
+ * (('wait'))Mroongaが検索
193
+ * カラム毎の処理でI/Oを局所化\n
194
+ (('note:(索引非使用時)'))
195
+ * (('wait'))Mroongaがソート
196
+ * カラム毎の処理でI/Oを局所化
197
+ * (('wait'))Mroongaが(({OFFSET}))/(({LIMIT}))を処理
198
+
199
+ = カラム毎の処理は速い
200
+
201
+ # image
202
+ # src = images/per-column-processing.svg
203
+ # relative_width = 100
204
+
205
+ = 最適化のまとめ
206
+
207
+ * 転置索引実装が速い
208
+ * 検索も更新も速い
209
+ * カラムストアで速い
210
+ * ポイント:I/O削減・I/O局所化
211
+
212
+ = 全文検索初心者でも使える
213
+
214
+ * (('wait'))インストールが簡単
215
+ * (('wait'))MySQLの標準機能のみで使える
216
+
217
+ = インストールが簡単
218
+
219
+ * (('wait'))APT/Yumリポジトリー
220
+ * (('wait'))MariaDBバンドル
221
+ * (('wait'))MariaDB込みのWindowsバイナリ
222
+
223
+ = 標準機能のみで使える
224
+
225
+ # coderay sql
226
+ -- 作成
227
+ CREATE TABLE table (
228
+ -- ...,
229
+ FULLTEXT INDEX (column)
230
+ ) ENGINE=Mroonga;
231
+
232
+ = 標準機能のみで使える
233
+
234
+ # coderay sql
235
+ -- 変換
236
+ ALTER TABLE table
237
+ ADD FULLTEXT INDEX (column)
238
+ ENGINE=Mroonga;
239
+
240
+ = 標準機能のみで使える
241
+
242
+ # coderay sql
243
+ SELECT * FROM table
244
+ WHERE
245
+ MATCH(column)
246
+ AGAINST('+keyword'
247
+ IN BOOLEAN MODE);
248
+
249
+ = 全文検索上級者向け機能
250
+
251
+ * (('wait'))
252
+ カスタマイズ
253
+ * デフォルト値はいい感じ\n
254
+ →初心者はカスタマイズなしでよい
255
+ * (('wait'))
256
+ Groongaの機能をもっと使える\n
257
+ (('note:(高速・高機能)'))
258
+
259
+ = 文字正規化ルール変更
260
+
261
+ # coderay sql
262
+ CREATE TABLE table (
263
+ -- ...,
264
+ FULLTEXT INDEX (column)
265
+ --
266
+ -- コメントでパラメーターを指定
267
+ COMMENT='normalizer "NormalizerAuto"'
268
+ ) ENGINE=Mroonga;
269
+
270
+ = 文字正規化ルール変更
271
+
272
+ # coderay sql
273
+ CREATE TABLE table (
274
+ -- ...,
275
+ FULLTEXT INDEX (column)
276
+ -- MariaDBの場合:
277
+ -- カスタムパラメーターを使える
278
+ NORMALIZER='NormalizerAuto'
279
+ ) ENGINE=Mroonga;
280
+
281
+ = Groongaの検索機能を使う
282
+
283
+ # coderay sql
284
+ SELECT * FROM table
285
+ WHERE
286
+ -- 「*SS」プラグマ使用時は「c1」は無視される
287
+ MATCH(c1)
288
+ -- 「*SS」はGroongaの全検索機能を使うためのプラグマ
289
+ -- 1つのクエリーで複数のインデックスを使用可能
290
+ AGAINST('*SS c1 @ "keyword" && c2 < 100'
291
+ IN BOOLEAN MODE);
292
+
293
+ = 今後
294
+
295
+ * (('wait'))
296
+ 最新機能サポート
297
+ * JSONを全文検索\n
298
+ (('note:(JSON型のデータの読み書きは対応済み)'))\n
299
+ * 仮想カラム・生成カラム
300
+ * パーティショニング+全文検索対応
301
+ * (('wait'))
302
+ 最新版をMariaDBにバンドル
303
+
304
+ = 最新版をバンドル
305
+
306
+ * (('wait'))
307
+ Mroongaは毎月リリース
308
+ * (('wait'))
309
+ MariaDB 10.2.1はMroonga ((*5.04*))をバンドル
310
+ * Mroongaの最新版は6.10
311
+ * Mroongaは((*6.03*))からMariaDB 10.2をサポート
312
+ * 現在テスト中→テスト対応後マージ
313
+
314
+ = まとめ1
315
+
316
+ * (('wait'))
317
+ 高速日本語全文検索(('note:(全言語OK)'))
318
+ * (('wait'))
319
+ カラムストアによる高速処理
320
+ * (('wait'))
321
+ 全文検索初心者でも使える
322
+ * (('wait'))
323
+ 全文検索上級者は活用できる
324
+
325
+ = まとめ2
326
+
327
+ * (('wait'))
328
+ 今後もMroongaは便利になる
329
+ * (('wait'))
330
+ MariaDBで最新Mroongaを使える
331
+
332
+ (('wait'))
333
+ MySQLで全文検索ならMroonga!
334
+
335
+
@@ -0,0 +1,5 @@
1
+ @title_slide_title_font_size = @x_large_font_size * 0.9
2
+
3
+ @groonga_product = "mroonga"
4
+
5
+ include_theme("groonga")
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-kou-sanmokukai-2016-11-17
3
+ version: !ruby/object:Gem::Version
4
+ version: 2016.11.17.0
5
+ platform: ruby
6
+ authors:
7
+ - Kouhei Sutou
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-11-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: rabbit-theme-groonga
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: 2016年11月17日(木)開催の三木会でのMroonga紹介資料。
42
+ email:
43
+ - kou@clear-code.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".rabbit"
49
+ - README.rd
50
+ - Rakefile
51
+ - config.yaml
52
+ - images/column-store.svg
53
+ - images/count-star.svg
54
+ - images/not-access-to-needless-columns.svg
55
+ - images/per-column-processing.svg
56
+ - mroonga.rab
57
+ - pdf/sanmokukai-2016-11-17-mroonga.pdf
58
+ - theme.rb
59
+ homepage: http://slide.rabbit-shocker.org/authors/kou/sanmokukai-2016-11-17/
60
+ licenses:
61
+ - CC BY-SA 4.0
62
+ metadata: {}
63
+ post_install_message:
64
+ rdoc_options: []
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubyforge_project:
79
+ rubygems_version: 2.5.1
80
+ signing_key:
81
+ specification_version: 4
82
+ summary: Mroonga開発者が来たぞ!
83
+ test_files: []