SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Copyright © 2013 NTT DATA Corporation
2013年6月8日
株式会社NTTデータ 基盤システム事業本部
澤田 雅彦
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ(前編)
第26回しくみ勉強会
2Copyright © 2013NTT DATA Corporation
INDEX
1. 全文検索とは?
2. pg_bigmとは?
3. pg_bigmの全文検索のしくみ
4. pg_bigmの性能測定(前編)
5. まとめ
Copyright © 2013 NTT DATA Corporation 3
全文検索とは?
4Copyright © 2013 NTT DATA Corporation
全文検索ってなに?
全文検索ってなに?
 複数のテキストからキーワードを含むテキストを見つけ出す事
(英語辞書から特定の単語を探す、Web検索、など)
東京都・・・・
・・・・・・・・
・・・・・・・・・図書館・・・・
・・・・・・・・
・・・・・・・・・・・・
・・オープンソース・・・
・・・・・・・・
・・・・・
・・・・・・・・本。
・学校・・・・・・・・・
東京都で・・・・
・・・・・・・・
・・・・・・
・・・データベース・・・
・・・・・・・・
・・・・・・・・・・・・
・・・・・
・・・・・・・・
東京都・・・・
・・・・・・・・
・・・・・・・・・図書館・・・・
・・・・・・・・
・・・・・・・・・・・・
・・オープンソース・・・
・・・・・・・・
・・・・・
・・・・・・・・本。
・学校・・・・・・・・・
全文検索
キーワード
「オープンソース」
5Copyright © 2013 NTT DATA Corporation
DBの全文検索ってなに?
SQL発行
DB
:
:
 テキスト型の列を持つテーブルから、キーワードを含むレコードを検索すること
 全文検索では検索対象のデータが多い
 全文検索用のインデックスを作成することで高速にできる
 インデックスのキーの作り方として。。。
N-gram方式、形態素解析方式がある
キーワード:「オープンソース」
6Copyright © 2013 NTT DATA Corporation
形態素解析とN-gram
形態素解析 N-gram
分割方法 単語単位で分割 文字単位で分割
例)’今日は全文検索の日’ではどうなる?
キーワード 「今日」,「全文検索」,「日」
(2-gramの場合)
「今日」,「日は」,「は全」,「全文」,「文検」、
「検索」、「索の」…
<一般的な特徴>
インデックスサイズ 小さい 大きい
表記の揺れ 類義語を定義しやすい
例)「今日」⇔「本日」を対応させる
表記の揺れに弱い
検索結果 単語の分割方法に依存する
例)「全文」と「検索」は分ける?分けない?
LIKEに近い結果を得ることができる
どういう時に有効? 整った文章(論文等)を扱う時 記号や造語を検索する時
7Copyright © 2013 NTT DATA Corporation
PostgreSQLでN-gramの全文検索をするには
(今まで)
PostgreSQLに付属しているpg_trgmを使用していた。
しかしpg_trgmには以下の弱みがある。。
→pg_bigmでは上記の2つの問題を解決しています!
 1、2文字検索でインデックスを有効に使えない(SeqScanより遅くなる)
→ 例えば「車」、「日本」などの検索キーワードは日本語検索時には十分考えられる
 日本語対応をさせるためには、ソースコードの変更が必要
→ trgm.hの一部を変更しないといけない
Copyright © 2013 NTT DATA Corporation 8
2. pg_bigmとは?
9Copyright © 2013 NTT DATA Corporation
pg_bigmとは
 pg_bigmとは
→2-gramの全文検索モジュール
対応バージョン PostgreSQL9.1以降
ライセンス PostgreSQL License
開発主体 NTTデータ
公開日 2013年4月
入手元 http://pgbigm.sourceforge.jp/
10Copyright © 2013 NTT DATA Corporation
pg_bigmとその他の仲間たち
pg_bigm pg_trgm textsearch_groonga
作成方法 2-gram 3-gram N-gram
対応バージョン 9.1以降 9.1以降 9.1まで
開発主体 NTTデータ
PostgreSQL
コミュニティ
板垣氏
(個人)
日本語対応 ○ △ ○
依存モジュール なし なし
あり
(groonga)
レプリケーション・
リカバリ対応
○ ○ ×
11Copyright © 2013 NTT DATA Corporation
pg_bigmの特徴
 2-gramの全文検索モジュール
 PostgreSQL内部にインデックスを持つ(GINインデックス)
 PostgreSQLのレプリケーション、リカバリ対応
 1,2文字検索対応
 日本語検索対応
 データベースエンコーディングはUTF8、ロケールはCにのみ対応
Copyright © 2013 NTT DATA Corporation 12
pg_bigmの使い方
13Copyright © 2013 NTT DATA Corporation
インストール
 インストールはいつも通り
$ tar zxf pg_bigm-20130405.tar.gz
$ cd pg_bigm-20130405
$ make USE_PGXS=1 PG_CONFIG=$PGHOME/bin/pg_config
$ su
# make USE_PGXS=1 PG_CONFIG=$PGHOME/bin/pg_config install
14Copyright © 2013 NTT DATA Corporation
pg_bigmの登録
 pg_bigmの登録
$ initdb –D $PGDATA --locale=C --encoding=UTF8
$ vi $PGDATA/postgresql.conf
shared_preload_libraries = 'pg_bigm'
custom_variable_classes = ‘pg_bigm‘ (custom_variable_classesは9.2以降では
廃止)
$ pg_ctl start -D PGDATA
$ psql -d <データベース名>
=# CREATE EXTENSION pg_bigm;
=# ¥dx
List of installed extensions
Name | Version | Schema | Description
--------+------+------+--------------------------------
pg_bigm | 1.0 | public | text index searching based on bigrams
15Copyright © 2013 NTT DATA Corporation
インデックス作成まで
 テーブル定義作成
=# CREATE TABLE pg_tools (tool text, description text);
 データ投入
=# INSERT INTO pg_tools VALUES ('pg_hint_plan', 'HINT句を使えるようにするツール');
=# INSERT INTO pg_tools VALUES ('pg_dbms_stats', '統計情報を固定化するツール');
=# INSERT INTO pg_tools VALUES ('pg_bigm', '2-gramの全文検索を使えるようにするツール');
=# INSERT INTO pg_tools VALUES ('pg_trgm', '3-gramの全文検索を使えるようにするツール');
 インデックス作成
=# CREATE INDEX pg_tools_idx ON hoge USING gin (description gin_bigm_ops);
 マルチカラムインデックス作成
=# CREATE INDEX pg_tools_multi_idx ON pg_tools USING gin( tool gin_bigm_ops,
description gin_bigm_ops);
GINインデックス(転置インデックス)の詳細は
後程説明します
16Copyright © 2013 NTT DATA Corporation
 実行例
=# SELECT * FROM pg_tools WHERE description LIKE ‘%全文%’;
tool | description
------+------------------------------
pg_bigm | 2-gramの全文検索を使えるようにするツール
pg_trgm | 3-gramの全文検索を使えるようにするツール
(2 rows)
簡単な実行例
=# EXPLAIN ANALYZE SELECT * FROM pg_tools WHERE description LIKE '%全文%';
QUERY PLAN
------------------------------------------------------------------
Bitmap Heap Scan on pg_tools (cost=8.00..12.01 rows=1 width=64) (actual time=0.033..0.034 rows=2
loops=1)
Recheck Cond: (description ~~ '%全文%'::text)
-> Bitmap Index Scan on pg_tool_idx (cost=0.00..8.00 rows=1 width=0) (actual time=0.025..0.025
rows=2 loops=1)
Index Cond: (description ~~ '%全文%'::text)
Total runtime: 0.094 ms
(5 rows)
Copyright © 2013 NTT DATA Corporation 17
pg_bigmの全文検索のしくみ
18Copyright © 2013 NTT DATA Corporation
GINインデックスとは
 GINインデックス(Generalized Inverted Index)とは?
(Wikipediaより)
全文検索を行う対象からなる文章分から位置情報を格納するための索引構造。
転置索引、逆引き索引などとも呼ばれる
(PostgreSQLマニュアルより)
GINインデックスは(キー、投稿されたリスト)の組み合わせの集合を格納します。
ここで"投稿されたリスト"はキーに合う行IDの集合です。
→「キー」と、「そのキーが出現するTID」の組み合わせを格納するインデックス
19Copyright © 2013 NTT DATA Corporation
GINインデックスとは
検索キーワード:「accelerometers compensation」
「accelerometers」
5, 10, 25 ,28, 30, 36, 58, 59, 61,
73, 74
「compensation」
30, 68
「accelerometers compensation 」
→30ページにある
20Copyright © 2013 NTT DATA Corporation
 pg_trgmとpg_bigmのインデックス登録時の
挙動の説明をしていきます
 pg_trgmではキーをINT値で持つ
 pg_bigmではキーを文字列で持つ
インデックス登録時の挙動
キー TID
△△P 100
△PO 100
POS 100
CRC1 100
CRC2 100
CRC3 100
①3文字分割
「△△P」、「△PO」、
「POS」、「OSぐ」、
「Sぐれ」、「ぐれ△」
②ハッシュ変換+
ソート
「△△P」、「△PO」、
「POS」、「CRC1」、
「CRC2」、「CRC3」
①2文字分割
「△P」、「PO」、
「OS」、「Sぐ」、
「ぐれ」、「れ△」
②ソート
「△P」、「PO」、
「OS」、「Sぐ」、
「ぐれ」、「れ△」
pg_bigm キー TID
△P 100
PO 100
OS 100
Sぐ 100
ぐれ 100
れ△ 100
TID データ
100 POSぐれ
pg_trgm
キーワード
‘POSぐれ’
INSERT
3Byte以上のtrgmは
3Byteにハッシュ変
換されます
INT値で格納される
テキスト型で格納される
21Copyright © 2013 NTT DATA Corporation
インデックス検索時の挙動
①2文字分割
「OS」
「Sぐ」
「ぐれ」
 キーワード‘%OSぐれ%’からTID100のデータが検索されるまでの
挙動を解説します
②インデックススキャン
TID データ
100 POSぐれ
200 POSぐる
300 ぽSぐれ
キー TID
△P 100, 200
△ぽ 300
OS 100, 200
PO 100, 200
Sぐ 100, 200, 300
る△ 200
れ△ 100, 300
ぐれ 100, 300
: :
③TID候補決定
→TID 100
④Recheck
検索
キーワード
‘%OSぐれ%’
pg_bigmの場合
22Copyright © 2013 NTT DATA Corporation
Recheck処理の必要性
キー TID
東京 1
京都 1
京と 1
: :
検索ワード:
‘%東京都%’
「東京」 : TID1
「京都」 : TID1
TABLE
INDEX
間違った結果を取ってき
てしまう
INDEXを検索
TID決定
Recheck処理で再検査!
例えばこんな時。。
1 東京と京都
: :
23Copyright © 2013 NTT DATA Corporation
Recheck処理の必要性
実際に見てみる。
postgres=# EXPLAIN ANALYZE SELECT * FROM hoge WHERE col1 LIKE ‘%東京都%';
QUERY PLAN
---------------------------------------------------------
Bitmap Heap Scan on hoge (cost=16.00..20.01 rows=1 width=32) (actualtime=0.019..0.019 rows=0loops=1)
Recheck Cond: (col1 ~~ ‘%東京都%'::text)
Rows Removed by Index Recheck: 1
-> Bitmap Index Scan on hoge_idx (cost=0.00..16.00 rows=1 width=0) (actualtime=0.011..0.011 rows=1
loops=1)
Index Cond: (col1 ~~ ‘%東京都%'::text)
Total runtime: 0.046 ms
(5 rows)
Bitmap Index Scanでは1行検出しているが、
Rechek処理により間違った結果を排除している
ことがわかる。
24Copyright © 2013 NTT DATA Corporation
部分一致とは?
①2文字分割
「本」
②インデックススキャン
キー TID
: :
末尾 100, 200
本日 200, 300
本屋 500
本当 400
札束 200
: :
③TID候補決定 ④Recheck
キーワード
‘%本%’
 2文字分割後、1文字のキーワードが生成された場合、部分一致を行う関数が実行される
(例)検索キーワードが’%東%’の場合など
 部分一致では1文字の検索キーワードと各キーの先頭を比較して、一致、不一致を判断する
 pg_bigmでは部分一致関数を実装しているため、2文字”以下”の検索ができる
Copyright © 2013 NTT DATA Corporation 25
pg_bigmの性能
26Copyright © 2013 NTT DATA Corporation
性能測定の概要①
 pg_bigmとpg_trgmを比較
 pg_bigm
→2013年4月に新しく公開されたモジュール。
 pg_trgm
→おなじみのPostgreSQL付属のモジュール。日本語対応を有効にして参加。
 以下の項目の順番に検証を実施
1. インデックスサイズ
→ 1、2を前編で実施
2. インデックス作成時間
3. 検索時間
→ 3、4を後編で実施
4. インデックス更新時間
27Copyright © 2013 NTT DATA Corporation
性能測定の概要②
 テストデータ
日本語と英語が混在したテキスト
日本語 : 青空文庫より
英語 : Project Gutenbergより (単語の途中で区切られないようにしてある)
 テーブル定義
CREATE TABLE hoge (col1 text);
 テーブル行数
約85万行 (日本語60万行、英語25万行)
 一行あたりのデータサイズ
約600Byte(日本語:200文字/行、英語:600文字/行)
 テーブルサイズ
約612MB
28Copyright © 2013 NTT DATA Corporation
マシンスペック・ソフトウェア関連情報
項目 詳細
OS Red Hat Enterprise Linux 6.3(64bit)
DBMS PostgreSQL 9.2.4
項目 詳細
メーカー DELL
モデル PowerEdge C8220X
CPU Xeon(R) E5-2660 2.20GHz ×2
メモリ 24GB
ディスク HDD1本(RAID構成なし)
回転数:7200rpm、容量:1TB
29Copyright © 2013 NTT DATA Corporation
インデックスサイズと作成時間の比較 概要
 データCOPY→インデックス作成の流れで、インデックスのサイズと作成にかかる時間
を計測
 全てGINインデックスを使用
 それぞれ10回計測を行い、その平均値を結果とする
対象 インデックス作成クエリ
pg_bigm CREATE INDEX hoge_idx ON hoge USING gin (col1 gin_bigm_ops);
pg_trgm CREATE INDEX hoge_idx ON hoge USING gin (col1 gin_trgm_ops);
30Copyright © 2013 NTT DATA Corporation
インデックスサイズの比較
 今回の測定条件ではpg_bigmの方がインデックスサイズが小さいという結果になった
 2文字分割の方が分割後のデータが重複する確率が高い
→重複したデータは削除される
(参考) 一つのインデックスキーの大きさの比較
 pg_bigm : 英語は「3byte」 ←(データ2byte+TEXT型のヘッダ1Byte)
日本語は「(2文字のバイト数の合計)+(TEXT型のヘッダ1Byte)」
 pg_trgm : 4byte(INT値で格納するため。日本語はハッシュ変換される)
(例) 「this」→インデックスキーが5つできる(pg_bigm、pg_trgm共通)
pg_bigm : 3Byte×5個 = 15Byte、 pg_trgm : 4Byte×5個 = 20Byte
対象 テーブルサイズ インデックスサイズ
pg_bigm
612MB
1523MB
pg_trgm 2154MB
31Copyright © 2013 NTT DATA Corporation
インデックス作成時間の比較
対象 COPY CREATE INDEX Total
pg_bigm
15秒
589秒 604秒
pg_trgm 785秒 800秒
 今回の測定条件ではpg_bigmの方がインデックス作成時間が短いという結果になった
 pg_trgmの方が書き込むサイズが大きいため (インデックスサイズ結果参照)
 pg_trgmはハッシュ変換のオーバーヘッドがある
Copyright © 2013 NTT DATA Corporation 32
まとめ
33Copyright © 2013 NTT DATA Corporation
まとめ
 まとめ
 pg_bigmでは日本語に対応している
 1、2文字検索に対応している
 (今回の測定条件では)pg_bigmの方がpg_trgmと比べてインデックスサ
イズが小さく、作成時間も短かった
 日本語2文字以下の検索をする要件 → pg_bigm一択か?
 次回予定
 pg_bigmの性能測定(後半)
 様々な長さの検索キーワード(英語、日本語)での検索性能
 インデックスの更新性能
 pg_bigm独自機能やpg_bigmが提供しているパラメータの紹介
Copyright © 2011 NTT DATA Corporation
Copyright © 2013 NTT DATA Corporation
35Copyright © 2013 NTT DATA Corporation
(参考)ワイルドカードの有無による検索の挙動の違い
キー TID
△A 1, 2
△X 3
AB 1, 2, 3
BC 1, 2, 3
C△ 1, 3
CD 2
D△ 2
XA 1
TID データ
1 ABC
2 ABCD
3 XABC
検索キーワード キー 決定タプル
完全一致 ABC
△A
AB
C△
1
前方一致 %ABC
AB
BC
C△
1, 2
中間一致 %ABC%
AB
BC
1, 2, 3
後方一致 ABC%
△A
AB
BC
1
36Copyright © 2013 NTT DATA Corporation
(参考)英語だけのテーブル、日本語だけのテーブルでのインデックスサイズ
対象 テーブルサイズ サイズ 差
英語だけpg_bigm
138MB
401MB
133MB
英語だけpg_trgm 534MB
日本語だけpg_bigm
500MB
1119MB
497MB
日本語だけpg_trgm 1616MB
37Copyright © 2013 NTT DATA Corporation
(参考) 部分一致までの挙動詳細
①
‘%a%bcd%’
②、③
pmatch
true
false
false
bigm
a
bc
cd
対応
④
1.問い合わせキーとインデックスキーの一文字目のバイ
ト長を比較。一致→2へ。不一致→「1」を返す
2.文字を比較。一致→「0」を返す。不一致「1」を返す。
‘a’と’a)’ → 「0」を返す
‘a’と’a/’ → 「0」を返す
‘a’と’aa’ → 「0」を返す
‘a’と’ax → 「0」を返す
‘a’と’b△’ → 「1」を返す
ginインデックス
a) a/ aa ax b△ ・・・
gin_extract_query_bigm()
gin_bigm_compare_partial()

Weitere ähnliche Inhalte

Was ist angesagt?

PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)NTT DATA OSS Professional Services
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説Masahiko Sawada
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界Yoshinori Nakanishi
 
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)Hironobu Suzuki
 
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことpg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことMasahiko Sawada
 
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...NTT DATA Technology & Innovation
 
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)NTT DATA Technology & Innovation
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!NTT DATA Technology & Innovation
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編Miki Shimogai
 
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)NTT DATA Technology & Innovation
 
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...NTT DATA Technology & Innovation
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)NTT DATA Technology & Innovation
 

Was ist angesagt? (20)

PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
 
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことpg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいこと
 
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
 
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
 
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 
PostgreSQLバックアップの基本
PostgreSQLバックアップの基本PostgreSQLバックアップの基本
PostgreSQLバックアップの基本
 
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
 
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
 

Andere mochten auch

Amazon RDS for PostgreSQL ( JPUG 2014夏セミナー) #jpug
Amazon RDS for PostgreSQL ( JPUG 2014夏セミナー)  #jpugAmazon RDS for PostgreSQL ( JPUG 2014夏セミナー)  #jpug
Amazon RDS for PostgreSQL ( JPUG 2014夏セミナー) #jpugYasuhiro Matsuo
 
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介Ryuichiro Munechika
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwToshi Harada
 
みんな大好き“全文検索 on AWS”を試してみました!
みんな大好き“全文検索 on AWS”を試してみました!みんな大好き“全文検索 on AWS”を試してみました!
みんな大好き“全文検索 on AWS”を試してみました!宗 大栗
 
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成Hiroshi Yamaguchi
 

Andere mochten auch (9)

pg_trgmと全文検索
pg_trgmと全文検索pg_trgmと全文検索
pg_trgmと全文検索
 
Amazon RDS for PostgreSQL ( JPUG 2014夏セミナー) #jpug
Amazon RDS for PostgreSQL ( JPUG 2014夏セミナー)  #jpugAmazon RDS for PostgreSQL ( JPUG 2014夏セミナー)  #jpug
Amazon RDS for PostgreSQL ( JPUG 2014夏セミナー) #jpug
 
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdw
 
みんな大好き“全文検索 on AWS”を試してみました!
みんな大好き“全文検索 on AWS”を試してみました!みんな大好き“全文検索 on AWS”を試してみました!
みんな大好き“全文検索 on AWS”を試してみました!
 
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
 
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦
 
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラPostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラ
 
20170303 java9 hadoop
20170303 java9 hadoop20170303 java9 hadoop
20170303 java9 hadoop
 

Ähnlich wie pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ

使ってみませんか?pg hint_plan
使ってみませんか?pg hint_plan使ってみませんか?pg hint_plan
使ってみませんか?pg hint_planMasao Fujii
 
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜Yasuyuki Sugai
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)NTT DATA Technology & Innovation
 
運用アナリティクスを実現!最新Hinemos ver.6.1の全体像
運用アナリティクスを実現!最新Hinemos ver.6.1の全体像運用アナリティクスを実現!最新Hinemos ver.6.1の全体像
運用アナリティクスを実現!最新Hinemos ver.6.1の全体像Hinemos
 
Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介cyberagent
 
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜	【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜 虎の穴 開発室
 
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)NTT DATA Technology & Innovation
 
ディープラーニングでラーメン二郎(全店舗)を識別してみた
ディープラーニングでラーメン二郎(全店舗)を識別してみたディープラーニングでラーメン二郎(全店舗)を識別してみた
ディープラーニングでラーメン二郎(全店舗)を識別してみたknjcode
 
[AWS re:invent 2013 Report] AWS New EC2 Instance Types
[AWS re:invent 2013 Report] AWS New EC2 Instance Types[AWS re:invent 2013 Report] AWS New EC2 Instance Types
[AWS re:invent 2013 Report] AWS New EC2 Instance TypesAmazon Web Services Japan
 
Sumo Logic活用事例とその運用
Sumo Logic活用事例とその運用Sumo Logic活用事例とその運用
Sumo Logic活用事例とその運用gree_tech
 
Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)
Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)
Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)NTT DATA OSS Professional Services
 
TensorFlowをもう少し詳しく入門
TensorFlowをもう少し詳しく入門TensorFlowをもう少し詳しく入門
TensorFlowをもう少し詳しく入門tak9029
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
Taming Distributed/Parallel Query Execution Engine of Apache Spark
Taming Distributed/Parallel Query Execution Engine of Apache SparkTaming Distributed/Parallel Query Execution Engine of Apache Spark
Taming Distributed/Parallel Query Execution Engine of Apache SparkTakeshi Yamamuro
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめPostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめOhyama Masanori
 
ビックデータとシリコンバレースタートアップ事情
ビックデータとシリコンバレースタートアップ事情ビックデータとシリコンバレースタートアップ事情
ビックデータとシリコンバレースタートアップ事情Osaka University
 
20200806_PGStrom_PostGIS_GstoreFdw
20200806_PGStrom_PostGIS_GstoreFdw20200806_PGStrom_PostGIS_GstoreFdw
20200806_PGStrom_PostGIS_GstoreFdwKohei KaiGai
 

Ähnlich wie pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ (20)

GresCubeで快適PostgreSQLライフ
GresCubeで快適PostgreSQLライフGresCubeで快適PostgreSQLライフ
GresCubeで快適PostgreSQLライフ
 
使ってみませんか?pg hint_plan
使ってみませんか?pg hint_plan使ってみませんか?pg hint_plan
使ってみませんか?pg hint_plan
 
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
運用アナリティクスを実現!最新Hinemos ver.6.1の全体像
運用アナリティクスを実現!最新Hinemos ver.6.1の全体像運用アナリティクスを実現!最新Hinemos ver.6.1の全体像
運用アナリティクスを実現!最新Hinemos ver.6.1の全体像
 
Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介
 
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜	【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
 
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
 
ディープラーニングでラーメン二郎(全店舗)を識別してみた
ディープラーニングでラーメン二郎(全店舗)を識別してみたディープラーニングでラーメン二郎(全店舗)を識別してみた
ディープラーニングでラーメン二郎(全店舗)を識別してみた
 
PostgreSQL9.3新機能紹介
PostgreSQL9.3新機能紹介PostgreSQL9.3新機能紹介
PostgreSQL9.3新機能紹介
 
[AWS re:invent 2013 Report] AWS New EC2 Instance Types
[AWS re:invent 2013 Report] AWS New EC2 Instance Types[AWS re:invent 2013 Report] AWS New EC2 Instance Types
[AWS re:invent 2013 Report] AWS New EC2 Instance Types
 
Sumo Logic活用事例とその運用
Sumo Logic活用事例とその運用Sumo Logic活用事例とその運用
Sumo Logic活用事例とその運用
 
Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)
Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)
Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)
 
TensorFlowをもう少し詳しく入門
TensorFlowをもう少し詳しく入門TensorFlowをもう少し詳しく入門
TensorFlowをもう少し詳しく入門
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
 
Taming Distributed/Parallel Query Execution Engine of Apache Spark
Taming Distributed/Parallel Query Execution Engine of Apache SparkTaming Distributed/Parallel Query Execution Engine of Apache Spark
Taming Distributed/Parallel Query Execution Engine of Apache Spark
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめPostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
 
ビックデータとシリコンバレースタートアップ事情
ビックデータとシリコンバレースタートアップ事情ビックデータとシリコンバレースタートアップ事情
ビックデータとシリコンバレースタートアップ事情
 
20200806_PGStrom_PostGIS_GstoreFdw
20200806_PGStrom_PostGIS_GstoreFdw20200806_PGStrom_PostGIS_GstoreFdw
20200806_PGStrom_PostGIS_GstoreFdw
 

Mehr von Masahiko Sawada

行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...Masahiko Sawada
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報Masahiko Sawada
 
Transparent Data Encryption in PostgreSQL
Transparent Data Encryption in PostgreSQLTransparent Data Encryption in PostgreSQL
Transparent Data Encryption in PostgreSQLMasahiko Sawada
 
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -Masahiko Sawada
 
Transparent Data Encryption in PostgreSQL and Integration with Key Management...
Transparent Data Encryption in PostgreSQL and Integration with Key Management...Transparent Data Encryption in PostgreSQL and Integration with Key Management...
Transparent Data Encryption in PostgreSQL and Integration with Key Management...Masahiko Sawada
 
Bloat and Fragmentation in PostgreSQL
Bloat and Fragmentation in PostgreSQLBloat and Fragmentation in PostgreSQL
Bloat and Fragmentation in PostgreSQLMasahiko Sawada
 
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Database Encryption and Key Management for PostgreSQL - Principles and Consid...Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Database Encryption and Key Management for PostgreSQL - Principles and Consid...Masahiko Sawada
 
今秋リリース予定のPostgreSQL11を徹底解説
今秋リリース予定のPostgreSQL11を徹底解説今秋リリース予定のPostgreSQL11を徹底解説
今秋リリース予定のPostgreSQL11を徹底解説Masahiko Sawada
 
Vacuum more efficient than ever
Vacuum more efficient than everVacuum more efficient than ever
Vacuum more efficient than everMasahiko Sawada
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウトMasahiko Sawada
 
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~Masahiko Sawada
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説Masahiko Sawada
 
FDW-based Sharding Update and Future
FDW-based Sharding Update and FutureFDW-based Sharding Update and Future
FDW-based Sharding Update and FutureMasahiko Sawada
 
What’s new in 9.6, by PostgreSQL contributor
What’s new in 9.6, by PostgreSQL contributorWhat’s new in 9.6, by PostgreSQL contributor
What’s new in 9.6, by PostgreSQL contributorMasahiko Sawada
 
PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介Masahiko Sawada
 
pg_bigmと類似度検索
pg_bigmと類似度検索pg_bigmと類似度検索
pg_bigmと類似度検索Masahiko Sawada
 

Mehr von Masahiko Sawada (20)

行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
 
Transparent Data Encryption in PostgreSQL
Transparent Data Encryption in PostgreSQLTransparent Data Encryption in PostgreSQL
Transparent Data Encryption in PostgreSQL
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
 
Transparent Data Encryption in PostgreSQL and Integration with Key Management...
Transparent Data Encryption in PostgreSQL and Integration with Key Management...Transparent Data Encryption in PostgreSQL and Integration with Key Management...
Transparent Data Encryption in PostgreSQL and Integration with Key Management...
 
Bloat and Fragmentation in PostgreSQL
Bloat and Fragmentation in PostgreSQLBloat and Fragmentation in PostgreSQL
Bloat and Fragmentation in PostgreSQL
 
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Database Encryption and Key Management for PostgreSQL - Principles and Consid...Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
 
今秋リリース予定のPostgreSQL11を徹底解説
今秋リリース予定のPostgreSQL11を徹底解説今秋リリース予定のPostgreSQL11を徹底解説
今秋リリース予定のPostgreSQL11を徹底解説
 
Vacuum more efficient than ever
Vacuum more efficient than everVacuum more efficient than ever
Vacuum more efficient than ever
 
Vacuumとzheap
VacuumとzheapVacuumとzheap
Vacuumとzheap
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
Parallel Vacuum
Parallel VacuumParallel Vacuum
Parallel Vacuum
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
FDW-based Sharding Update and Future
FDW-based Sharding Update and FutureFDW-based Sharding Update and Future
FDW-based Sharding Update and Future
 
What’s new in 9.6, by PostgreSQL contributor
What’s new in 9.6, by PostgreSQL contributorWhat’s new in 9.6, by PostgreSQL contributor
What’s new in 9.6, by PostgreSQL contributor
 
PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介
 
pg_bigmと類似度検索
pg_bigmと類似度検索pg_bigmと類似度検索
pg_bigmと類似度検索
 

Kürzlich hochgeladen

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
 
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
 
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
 
新人研修のまとめ 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
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Kürzlich hochgeladen (9)

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
 
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
 
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
 
新人研修のまとめ 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
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ

  • 1. Copyright © 2013 NTT DATA Corporation 2013年6月8日 株式会社NTTデータ 基盤システム事業本部 澤田 雅彦 pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ(前編) 第26回しくみ勉強会
  • 2. 2Copyright © 2013NTT DATA Corporation INDEX 1. 全文検索とは? 2. pg_bigmとは? 3. pg_bigmの全文検索のしくみ 4. pg_bigmの性能測定(前編) 5. まとめ
  • 3. Copyright © 2013 NTT DATA Corporation 3 全文検索とは?
  • 4. 4Copyright © 2013 NTT DATA Corporation 全文検索ってなに? 全文検索ってなに?  複数のテキストからキーワードを含むテキストを見つけ出す事 (英語辞書から特定の単語を探す、Web検索、など) 東京都・・・・ ・・・・・・・・ ・・・・・・・・・図書館・・・・ ・・・・・・・・ ・・・・・・・・・・・・ ・・オープンソース・・・ ・・・・・・・・ ・・・・・ ・・・・・・・・本。 ・学校・・・・・・・・・ 東京都で・・・・ ・・・・・・・・ ・・・・・・ ・・・データベース・・・ ・・・・・・・・ ・・・・・・・・・・・・ ・・・・・ ・・・・・・・・ 東京都・・・・ ・・・・・・・・ ・・・・・・・・・図書館・・・・ ・・・・・・・・ ・・・・・・・・・・・・ ・・オープンソース・・・ ・・・・・・・・ ・・・・・ ・・・・・・・・本。 ・学校・・・・・・・・・ 全文検索 キーワード 「オープンソース」
  • 5. 5Copyright © 2013 NTT DATA Corporation DBの全文検索ってなに? SQL発行 DB : :  テキスト型の列を持つテーブルから、キーワードを含むレコードを検索すること  全文検索では検索対象のデータが多い  全文検索用のインデックスを作成することで高速にできる  インデックスのキーの作り方として。。。 N-gram方式、形態素解析方式がある キーワード:「オープンソース」
  • 6. 6Copyright © 2013 NTT DATA Corporation 形態素解析とN-gram 形態素解析 N-gram 分割方法 単語単位で分割 文字単位で分割 例)’今日は全文検索の日’ではどうなる? キーワード 「今日」,「全文検索」,「日」 (2-gramの場合) 「今日」,「日は」,「は全」,「全文」,「文検」、 「検索」、「索の」… <一般的な特徴> インデックスサイズ 小さい 大きい 表記の揺れ 類義語を定義しやすい 例)「今日」⇔「本日」を対応させる 表記の揺れに弱い 検索結果 単語の分割方法に依存する 例)「全文」と「検索」は分ける?分けない? LIKEに近い結果を得ることができる どういう時に有効? 整った文章(論文等)を扱う時 記号や造語を検索する時
  • 7. 7Copyright © 2013 NTT DATA Corporation PostgreSQLでN-gramの全文検索をするには (今まで) PostgreSQLに付属しているpg_trgmを使用していた。 しかしpg_trgmには以下の弱みがある。。 →pg_bigmでは上記の2つの問題を解決しています!  1、2文字検索でインデックスを有効に使えない(SeqScanより遅くなる) → 例えば「車」、「日本」などの検索キーワードは日本語検索時には十分考えられる  日本語対応をさせるためには、ソースコードの変更が必要 → trgm.hの一部を変更しないといけない
  • 8. Copyright © 2013 NTT DATA Corporation 8 2. pg_bigmとは?
  • 9. 9Copyright © 2013 NTT DATA Corporation pg_bigmとは  pg_bigmとは →2-gramの全文検索モジュール 対応バージョン PostgreSQL9.1以降 ライセンス PostgreSQL License 開発主体 NTTデータ 公開日 2013年4月 入手元 http://pgbigm.sourceforge.jp/
  • 10. 10Copyright © 2013 NTT DATA Corporation pg_bigmとその他の仲間たち pg_bigm pg_trgm textsearch_groonga 作成方法 2-gram 3-gram N-gram 対応バージョン 9.1以降 9.1以降 9.1まで 開発主体 NTTデータ PostgreSQL コミュニティ 板垣氏 (個人) 日本語対応 ○ △ ○ 依存モジュール なし なし あり (groonga) レプリケーション・ リカバリ対応 ○ ○ ×
  • 11. 11Copyright © 2013 NTT DATA Corporation pg_bigmの特徴  2-gramの全文検索モジュール  PostgreSQL内部にインデックスを持つ(GINインデックス)  PostgreSQLのレプリケーション、リカバリ対応  1,2文字検索対応  日本語検索対応  データベースエンコーディングはUTF8、ロケールはCにのみ対応
  • 12. Copyright © 2013 NTT DATA Corporation 12 pg_bigmの使い方
  • 13. 13Copyright © 2013 NTT DATA Corporation インストール  インストールはいつも通り $ tar zxf pg_bigm-20130405.tar.gz $ cd pg_bigm-20130405 $ make USE_PGXS=1 PG_CONFIG=$PGHOME/bin/pg_config $ su # make USE_PGXS=1 PG_CONFIG=$PGHOME/bin/pg_config install
  • 14. 14Copyright © 2013 NTT DATA Corporation pg_bigmの登録  pg_bigmの登録 $ initdb –D $PGDATA --locale=C --encoding=UTF8 $ vi $PGDATA/postgresql.conf shared_preload_libraries = 'pg_bigm' custom_variable_classes = ‘pg_bigm‘ (custom_variable_classesは9.2以降では 廃止) $ pg_ctl start -D PGDATA $ psql -d <データベース名> =# CREATE EXTENSION pg_bigm; =# ¥dx List of installed extensions Name | Version | Schema | Description --------+------+------+-------------------------------- pg_bigm | 1.0 | public | text index searching based on bigrams
  • 15. 15Copyright © 2013 NTT DATA Corporation インデックス作成まで  テーブル定義作成 =# CREATE TABLE pg_tools (tool text, description text);  データ投入 =# INSERT INTO pg_tools VALUES ('pg_hint_plan', 'HINT句を使えるようにするツール'); =# INSERT INTO pg_tools VALUES ('pg_dbms_stats', '統計情報を固定化するツール'); =# INSERT INTO pg_tools VALUES ('pg_bigm', '2-gramの全文検索を使えるようにするツール'); =# INSERT INTO pg_tools VALUES ('pg_trgm', '3-gramの全文検索を使えるようにするツール');  インデックス作成 =# CREATE INDEX pg_tools_idx ON hoge USING gin (description gin_bigm_ops);  マルチカラムインデックス作成 =# CREATE INDEX pg_tools_multi_idx ON pg_tools USING gin( tool gin_bigm_ops, description gin_bigm_ops); GINインデックス(転置インデックス)の詳細は 後程説明します
  • 16. 16Copyright © 2013 NTT DATA Corporation  実行例 =# SELECT * FROM pg_tools WHERE description LIKE ‘%全文%’; tool | description ------+------------------------------ pg_bigm | 2-gramの全文検索を使えるようにするツール pg_trgm | 3-gramの全文検索を使えるようにするツール (2 rows) 簡単な実行例 =# EXPLAIN ANALYZE SELECT * FROM pg_tools WHERE description LIKE '%全文%'; QUERY PLAN ------------------------------------------------------------------ Bitmap Heap Scan on pg_tools (cost=8.00..12.01 rows=1 width=64) (actual time=0.033..0.034 rows=2 loops=1) Recheck Cond: (description ~~ '%全文%'::text) -> Bitmap Index Scan on pg_tool_idx (cost=0.00..8.00 rows=1 width=0) (actual time=0.025..0.025 rows=2 loops=1) Index Cond: (description ~~ '%全文%'::text) Total runtime: 0.094 ms (5 rows)
  • 17. Copyright © 2013 NTT DATA Corporation 17 pg_bigmの全文検索のしくみ
  • 18. 18Copyright © 2013 NTT DATA Corporation GINインデックスとは  GINインデックス(Generalized Inverted Index)とは? (Wikipediaより) 全文検索を行う対象からなる文章分から位置情報を格納するための索引構造。 転置索引、逆引き索引などとも呼ばれる (PostgreSQLマニュアルより) GINインデックスは(キー、投稿されたリスト)の組み合わせの集合を格納します。 ここで"投稿されたリスト"はキーに合う行IDの集合です。 →「キー」と、「そのキーが出現するTID」の組み合わせを格納するインデックス
  • 19. 19Copyright © 2013 NTT DATA Corporation GINインデックスとは 検索キーワード:「accelerometers compensation」 「accelerometers」 5, 10, 25 ,28, 30, 36, 58, 59, 61, 73, 74 「compensation」 30, 68 「accelerometers compensation 」 →30ページにある
  • 20. 20Copyright © 2013 NTT DATA Corporation  pg_trgmとpg_bigmのインデックス登録時の 挙動の説明をしていきます  pg_trgmではキーをINT値で持つ  pg_bigmではキーを文字列で持つ インデックス登録時の挙動 キー TID △△P 100 △PO 100 POS 100 CRC1 100 CRC2 100 CRC3 100 ①3文字分割 「△△P」、「△PO」、 「POS」、「OSぐ」、 「Sぐれ」、「ぐれ△」 ②ハッシュ変換+ ソート 「△△P」、「△PO」、 「POS」、「CRC1」、 「CRC2」、「CRC3」 ①2文字分割 「△P」、「PO」、 「OS」、「Sぐ」、 「ぐれ」、「れ△」 ②ソート 「△P」、「PO」、 「OS」、「Sぐ」、 「ぐれ」、「れ△」 pg_bigm キー TID △P 100 PO 100 OS 100 Sぐ 100 ぐれ 100 れ△ 100 TID データ 100 POSぐれ pg_trgm キーワード ‘POSぐれ’ INSERT 3Byte以上のtrgmは 3Byteにハッシュ変 換されます INT値で格納される テキスト型で格納される
  • 21. 21Copyright © 2013 NTT DATA Corporation インデックス検索時の挙動 ①2文字分割 「OS」 「Sぐ」 「ぐれ」  キーワード‘%OSぐれ%’からTID100のデータが検索されるまでの 挙動を解説します ②インデックススキャン TID データ 100 POSぐれ 200 POSぐる 300 ぽSぐれ キー TID △P 100, 200 △ぽ 300 OS 100, 200 PO 100, 200 Sぐ 100, 200, 300 る△ 200 れ△ 100, 300 ぐれ 100, 300 : : ③TID候補決定 →TID 100 ④Recheck 検索 キーワード ‘%OSぐれ%’ pg_bigmの場合
  • 22. 22Copyright © 2013 NTT DATA Corporation Recheck処理の必要性 キー TID 東京 1 京都 1 京と 1 : : 検索ワード: ‘%東京都%’ 「東京」 : TID1 「京都」 : TID1 TABLE INDEX 間違った結果を取ってき てしまう INDEXを検索 TID決定 Recheck処理で再検査! 例えばこんな時。。 1 東京と京都 : :
  • 23. 23Copyright © 2013 NTT DATA Corporation Recheck処理の必要性 実際に見てみる。 postgres=# EXPLAIN ANALYZE SELECT * FROM hoge WHERE col1 LIKE ‘%東京都%'; QUERY PLAN --------------------------------------------------------- Bitmap Heap Scan on hoge (cost=16.00..20.01 rows=1 width=32) (actualtime=0.019..0.019 rows=0loops=1) Recheck Cond: (col1 ~~ ‘%東京都%'::text) Rows Removed by Index Recheck: 1 -> Bitmap Index Scan on hoge_idx (cost=0.00..16.00 rows=1 width=0) (actualtime=0.011..0.011 rows=1 loops=1) Index Cond: (col1 ~~ ‘%東京都%'::text) Total runtime: 0.046 ms (5 rows) Bitmap Index Scanでは1行検出しているが、 Rechek処理により間違った結果を排除している ことがわかる。
  • 24. 24Copyright © 2013 NTT DATA Corporation 部分一致とは? ①2文字分割 「本」 ②インデックススキャン キー TID : : 末尾 100, 200 本日 200, 300 本屋 500 本当 400 札束 200 : : ③TID候補決定 ④Recheck キーワード ‘%本%’  2文字分割後、1文字のキーワードが生成された場合、部分一致を行う関数が実行される (例)検索キーワードが’%東%’の場合など  部分一致では1文字の検索キーワードと各キーの先頭を比較して、一致、不一致を判断する  pg_bigmでは部分一致関数を実装しているため、2文字”以下”の検索ができる
  • 25. Copyright © 2013 NTT DATA Corporation 25 pg_bigmの性能
  • 26. 26Copyright © 2013 NTT DATA Corporation 性能測定の概要①  pg_bigmとpg_trgmを比較  pg_bigm →2013年4月に新しく公開されたモジュール。  pg_trgm →おなじみのPostgreSQL付属のモジュール。日本語対応を有効にして参加。  以下の項目の順番に検証を実施 1. インデックスサイズ → 1、2を前編で実施 2. インデックス作成時間 3. 検索時間 → 3、4を後編で実施 4. インデックス更新時間
  • 27. 27Copyright © 2013 NTT DATA Corporation 性能測定の概要②  テストデータ 日本語と英語が混在したテキスト 日本語 : 青空文庫より 英語 : Project Gutenbergより (単語の途中で区切られないようにしてある)  テーブル定義 CREATE TABLE hoge (col1 text);  テーブル行数 約85万行 (日本語60万行、英語25万行)  一行あたりのデータサイズ 約600Byte(日本語:200文字/行、英語:600文字/行)  テーブルサイズ 約612MB
  • 28. 28Copyright © 2013 NTT DATA Corporation マシンスペック・ソフトウェア関連情報 項目 詳細 OS Red Hat Enterprise Linux 6.3(64bit) DBMS PostgreSQL 9.2.4 項目 詳細 メーカー DELL モデル PowerEdge C8220X CPU Xeon(R) E5-2660 2.20GHz ×2 メモリ 24GB ディスク HDD1本(RAID構成なし) 回転数:7200rpm、容量:1TB
  • 29. 29Copyright © 2013 NTT DATA Corporation インデックスサイズと作成時間の比較 概要  データCOPY→インデックス作成の流れで、インデックスのサイズと作成にかかる時間 を計測  全てGINインデックスを使用  それぞれ10回計測を行い、その平均値を結果とする 対象 インデックス作成クエリ pg_bigm CREATE INDEX hoge_idx ON hoge USING gin (col1 gin_bigm_ops); pg_trgm CREATE INDEX hoge_idx ON hoge USING gin (col1 gin_trgm_ops);
  • 30. 30Copyright © 2013 NTT DATA Corporation インデックスサイズの比較  今回の測定条件ではpg_bigmの方がインデックスサイズが小さいという結果になった  2文字分割の方が分割後のデータが重複する確率が高い →重複したデータは削除される (参考) 一つのインデックスキーの大きさの比較  pg_bigm : 英語は「3byte」 ←(データ2byte+TEXT型のヘッダ1Byte) 日本語は「(2文字のバイト数の合計)+(TEXT型のヘッダ1Byte)」  pg_trgm : 4byte(INT値で格納するため。日本語はハッシュ変換される) (例) 「this」→インデックスキーが5つできる(pg_bigm、pg_trgm共通) pg_bigm : 3Byte×5個 = 15Byte、 pg_trgm : 4Byte×5個 = 20Byte 対象 テーブルサイズ インデックスサイズ pg_bigm 612MB 1523MB pg_trgm 2154MB
  • 31. 31Copyright © 2013 NTT DATA Corporation インデックス作成時間の比較 対象 COPY CREATE INDEX Total pg_bigm 15秒 589秒 604秒 pg_trgm 785秒 800秒  今回の測定条件ではpg_bigmの方がインデックス作成時間が短いという結果になった  pg_trgmの方が書き込むサイズが大きいため (インデックスサイズ結果参照)  pg_trgmはハッシュ変換のオーバーヘッドがある
  • 32. Copyright © 2013 NTT DATA Corporation 32 まとめ
  • 33. 33Copyright © 2013 NTT DATA Corporation まとめ  まとめ  pg_bigmでは日本語に対応している  1、2文字検索に対応している  (今回の測定条件では)pg_bigmの方がpg_trgmと比べてインデックスサ イズが小さく、作成時間も短かった  日本語2文字以下の検索をする要件 → pg_bigm一択か?  次回予定  pg_bigmの性能測定(後半)  様々な長さの検索キーワード(英語、日本語)での検索性能  インデックスの更新性能  pg_bigm独自機能やpg_bigmが提供しているパラメータの紹介
  • 34. Copyright © 2011 NTT DATA Corporation Copyright © 2013 NTT DATA Corporation
  • 35. 35Copyright © 2013 NTT DATA Corporation (参考)ワイルドカードの有無による検索の挙動の違い キー TID △A 1, 2 △X 3 AB 1, 2, 3 BC 1, 2, 3 C△ 1, 3 CD 2 D△ 2 XA 1 TID データ 1 ABC 2 ABCD 3 XABC 検索キーワード キー 決定タプル 完全一致 ABC △A AB C△ 1 前方一致 %ABC AB BC C△ 1, 2 中間一致 %ABC% AB BC 1, 2, 3 後方一致 ABC% △A AB BC 1
  • 36. 36Copyright © 2013 NTT DATA Corporation (参考)英語だけのテーブル、日本語だけのテーブルでのインデックスサイズ 対象 テーブルサイズ サイズ 差 英語だけpg_bigm 138MB 401MB 133MB 英語だけpg_trgm 534MB 日本語だけpg_bigm 500MB 1119MB 497MB 日本語だけpg_trgm 1616MB
  • 37. 37Copyright © 2013 NTT DATA Corporation (参考) 部分一致までの挙動詳細 ① ‘%a%bcd%’ ②、③ pmatch true false false bigm a bc cd 対応 ④ 1.問い合わせキーとインデックスキーの一文字目のバイ ト長を比較。一致→2へ。不一致→「1」を返す 2.文字を比較。一致→「0」を返す。不一致「1」を返す。 ‘a’と’a)’ → 「0」を返す ‘a’と’a/’ → 「0」を返す ‘a’と’aa’ → 「0」を返す ‘a’と’ax → 「0」を返す ‘a’と’b△’ → 「1」を返す ginインデックス a) a/ aa ax b△ ・・・ gin_extract_query_bigm() gin_bigm_compare_partial()