Text
Page: 1
Amazon
RDS+EC2+PGroonga+
ロジカルレプリケーション
を使った低コスト
高速全文検索
堀本泰弘
クリアコード
PostgreSQL Conference Japan 2019
2019-11-15
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 2
自己紹介
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 3
自己紹介
他のOSSへもコントリビュート
昨日、PostgreSQLのドキュメント
の改善を提案
問題は「開発元」で修正が弊社の
ポリシー
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 4
今日のテーマ
なるべく楽に
高機能で高速な
全文検索
がしたい
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 5
実現のための要素
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 6
特に大事な要素
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 7
楽
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 8
楽
なぜ楽なのか?
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 9
設定が楽
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 10
構築が楽
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 11
スケールアップが楽
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 12
スケールアップが楽
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 13
障害対策が楽
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 14
障害対策が楽
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 15
障害対策が楽
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 16
今日のテーマ
なるべく楽に
高機能で高速な
全文検索
がしたい
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 17
全文検索
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 18
全文検索
なぜPGroonga
なのか?
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 19
対応言語
全言語対応
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 20
速い
高速
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 21
速い
ベンチマーク
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 22
速い
日本語Wikipedia
レコード数:約90万レコード
平均テキストサイズ:6.7KiB
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 23
速い
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 24
速い
ベンチマークの詳細な条件は
以下を参照
https://pgroonga.github.io/ja/reference/
pgroonga-versus-pg-bigm.html
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 25
SQLが使える
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 26
実例
具体的に
どう書くのか?
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 27
実行例:テーブル定義
CREATE TABLE entries (
title text,
content text
);
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 28
実行例:
インデックス定義
-- 全文検索用インデックス
CREATE INDEX entries_full_text_search
ON entries
-- 「 USING pgroonga 」 = 「 PGroonga を使う」
USING pgroonga (title, content);
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 29
実行例:データ挿入
-- 普通に挿入するだけでよい
INSERT INTO entries
VALUES ('PGroongaで高速全文検索!',
'高速に全文検索したいですね!');
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 30
実行例:全文検索
SELECT title FROM entries
WHERE
-- &@~で全文検索
-- 「検索」と「高速」を AND 検索
title &@~ '検索 高速' OR
content &@~ '検索 高速';
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 31
実行例:LIKE
SELECT title FROM entries
WHERE
-- LIKE でもインデックスが効く
--=アプリを書き換えずに高速化可能
-- ただし&@~より性能が落ちる
title LIKE '%検索%' OR
content LIKE '%検索%';
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 32
機能
全文検索に必要そうな機能は
一通り揃っている
同義語検索
類似文書検索
読みがな検索
入力補完 etc..
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 33
読みがな検索
「やきにく」
ってどう書きま
すか?
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 34
読みがな検索
やきにく
焼き肉
焼肉
やき肉
ヤキニク
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 35
読みがな検索
当然ですがどれ
も「やきにく」
と読みます
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 36
読みがな検索
読みが同じなので、以下は全部
同じものとして扱えます
やきにく
焼き肉
焼肉
やき肉
ヤキニク
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 37
読みがな検索
例えば
「やきにく」で
検索すると
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 38
読みがな検索
「やきにく」Hit!
「焼き肉」Hit!
「焼肉」Hit!
「やき肉」Hit!
「ヤキニク」Hit!
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 39
読みがな検索
異体字
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 40
読みがな検索
「広」と「廣」
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 41
読みがな検索
例えば人名の
検索
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 42
読みがな検索
検索キーワード「広瀬」で
「広瀬」Hit
「廣瀬」Hit
となってほしい
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 43
読みがな検索
通常の検索
検索キーワード「広瀬」で
「広瀬」のみHit
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 44
読みがな検索
読みがな検索なら
検索キーワード「広瀬」で
「広瀬」Hit
「廣瀬」Hit
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 45
読みがな検索
両方ヒット!
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 46
読みがな検索
「広瀬」も
「廣瀬」も
読みが同じ
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 47
他にも
それっぽい順でソート
キーワードハイライト
キーワードの周辺テキスト表示
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 48
他にも
電話番号検索
090-1234-5678 と 090 1234 5678、
(090)1234-5678 等
fuzzy検索
typo対策
テクノロジーとテノクロジー
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 49
他にも
継続的に
メンテナンス
されている
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 50
他にも
PostgreSQL12
に対応!(昨日)
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 51
高機能で高速
PGroongaなら
高機能で高速に
全文検索できる
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 52
Amazon RDS +
PGroonga
しかし。。。
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 53
Amazon RDS +
PGroonga
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 54
Amazon RDS +
PGroonga
他の2つの要素
の出番!
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 55
Amazon RDS +
PGroonga
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 56
構成
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 57
ロジカル
レプリケーションの特徴
複製元と複製先
の構造が同一で
なくてもよい
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 58
ロジカル
レプリケーションの特徴
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 59
ロジカル
レプリケーションの特徴
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 60
検索
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 61
更新
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 62
問題点
Subscriberが
1台しかない
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 63
問題点
リクエストが増加しつづけた場
合、この構成では耐えられない
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 64
負荷分散
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 65
復旧
検索できなく
なったら
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 66
復旧
使い捨てる
復旧は
がんばらない
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 67
復旧
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 68
復旧
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 69
復旧
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 70
サービス開始時間
もう一つの問題
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 71
サービス開始時間
データが増える
と復旧が遅延
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 72
サービス開始時間
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 73
停止時間の見積もり
許容できる停止
時間は?
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 74
停止時間の見積もり
停止時間を
見積もる
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 75
停止時間の見積もり
例えば...
サービス復旧時間:1日
新しくAmazon EC2を作成して、サービス開
始できるまでの時間
故障:1ヶ月に1回の頻度で故障
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 76
停止時間の見積もり
リクエスト:
各EC2には均等にリクエストが振り
分けられる
サービス継続:
Amazon EC2が3台あれば、サービ
スを提供可能なくらいの負荷
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 77
停止時間の見積もり
Amazon EC2を3台で運用する
場合
1台でも故障するとサービス継続不可
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 78
停止時間の見積もり
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 79
停止時間の見積もり
この場合の稼働率
平均故障間隔 =
365*24/12 = 730時間
平均復旧時間 = 24時間
稼働率 = 730/754 =
0.9681697612732095 ≒96.8%
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 80
停止時間の見積もり
つまり
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 81
停止時間の見積もり
この構成では、1ヶ月に1日程度
システムが停止する
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 82
停止時間の見積もり
では、4台運用の場合ではどう
なるのか?
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 83
停止時間の見積もり
1台あたりの稼働率:96.8%
1台あたりの故障率:
100% - 96.8% = 3.2%
2台同時に故障する確率:
0.032*0.032≒0.001=0.1%
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 84
停止時間の見積もり
したがって、1ヶ月に約45分程
度システムが停止する
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 85
まとめ
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 86
まとめ
なるべく楽に
高機能で高速な
全文検索が
できました!
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 87
最後に
PGroongaについての疑問等
は、GitHub、Gitterにて
ドキュメントも充実
https://pgroonga.github.io/ja/
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 88
最後に
より突っ込んだお話がしたい場合
は↓↓
問い合わせ先:
https://www.clear-code.com/contact/?
type=groonga
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0
Page: 89
最後に
ご静聴ありがと
うございました
Amazon RDS+EC2+PGroonga+ロジカルレプリケーション を使った低コスト 高速全文検索
Powered by Rabbit 3.0.0