SlideShare a Scribd company logo
1 of 87
Download to read offline
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
PGroongaの実装ぴーじーるんがのじっそう
須藤功平 株式会社クリアコード
PostgreSQLカンファレンス2015
2015-11-27
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
(建前の)目的
PostgreSQLの
amindexを説明
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
方法
PGroongaの実装
を紹介PGroongaはamindexとして実装されているため
ただし、ヒントだけなので詳細はPGroongaのソースを参照
https://github.com/pgroonga/pgroonga
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
本当の目的
PGroongaの自慢
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
PGroongaとは
amindexの一種
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
amindex
索引の実装を
PostgreSQLに
追加する仕組み
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
amindexの使い方
CREATE INDEX name ON table
USING pgroonga (column);
組み込みの索引と同じ
(USINGを指定するだけ)
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
PGroongaの提供機能
索引を使った
超高速な
全文検索機能
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
PostgreSQLと全文検索
課題あり
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
PostgreSQLと全文検索1
CREATE INDEX name ON table
USING gin (to_tsvector('english', column));
SELECT * FROM table
WHERE to_tsvector('english', column) @@ '...';
組み込みの全文検索機能
日本語非対応
http://www.postgresql.org/docs/current/static/
textsearch.html
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
PostgreSQLと全文検索2
CREATE INDEX name ON table
USING gin (column gin_trgm_ops);
SELECT * FROM table
WHERE column LIKE '%...%';
contrib/pg_trgm
日本語非対応
http://www.postgresql.org/docs/current/static/pgtrgm.html
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
PostgreSQLと全文検索
日本語非対応
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
PGroongaとPostgreSQL
日本語対応!
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
PGroongaを使う
CREATE INDEX name ON table
USING pgroonga (column);
SELECT * FROM table
WHERE column @@ '全文検索';
日本語対応!
しかも
速い!
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
ヒット数と検索時間
ヒット数 検索時間
368 0.030s
17,172 0.121s
22,885 0.179s
625,792 0.646s(*)
(*) work_memを10MBに増やしている
データ:Wikipedia日本語版
約184万レコード・平均サイズ約3.8KB
詳細:http://www.clear-code.com/blog/2015/5/25.html
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
検索時間:比較
ヒット数 PGroonga pg_bigm
368 0.030s 0.107s
17,172 0.121s 1.224s
22,885 0.179s 2.472s
625,792
(*)
0.646s 0.556s
(*) 他は検索語が3文字以上でこれだけ2文字
PGroongaは安定して速い!
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
なぜ速いのか
バックエンドが
外部の本格的な
全文検索
ライブラリー
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
amindexでのポイント
_PG_init()
ライブラリーを初期化
on_proc_exit()
後始末
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
全文検索ライブラリー
Groonga
(ぐるんが)
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
Groonga
本格的な
全文検索
エンジンサーバーとしてもライブラリーとしても使える
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
本格的な例1
長い文書でも検索性能が落ちない
この特徴が有用なサービス例:
Wiki
イメージ:Wikipedia
ドキュメント検索
イメージ:ファイルサーバー検索
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
長い文書でも速い理由
完全
転置索引
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
転置索引
完全:位置情報あり
Groonga
無印:位置情報なし
GIN
Groonga(必要なければ入れないことができる)
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
転置索引の違い
全文検索
全文を検索
10
20
文書 完全転置索引
全文
検索
を
ID 内容 キーワード ポスティングリスト
10:1,20:1
10:2,20:3
20:2
全文|検索
1 2
全文|を|検索
1 2 3
分解
(文書ID+位置)
全文
検索
を
キーワード ポスティングリスト
10:1,20:1
10:2,20:3
20:2
全文
検索
を
キーワード ポスティングリスト
10:1,20:1
10:2,20:3
20:2
(文書IDのみ)転置索引
全文
検索
を
キーワード ポスティングリスト
10,20
10,20
20
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
索引での検索の違い
完全転置索引
全文
検索
を
キーワード ポスティングリスト
10:1,20:1
10:2,20:3
20:2
(文書ID+位置)
全文
検索
を
キーワード ポスティングリスト
(文書IDのみ)転置索引
10,20
10,20
20
全文検索
クエリー
全文|検索
1 2
分解
AND
全文検索
全文を検索
10
20
文書
ID 内容
10,20
結果候補
10
結果
隣接
チェック
AND
隣接
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
検索速度の違い
完全転置索引:安定して速い
索引だけで検索完了
転置索引:速さが安定しない
索引での検索+全件スキャン
候補文書が多い・長い→遅くなる
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
amindexでのポイント
全件スキャンを無効にする
scan->xs_recheck = false
tbm_add_tuples(..., false)
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
本格的な例2
常時更新・常時検索に強い
この特徴が有用なサービス例:
SNS
イメージ:Twitter
ナレッジ共有サービス
イメージ:Qiita・teratail
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
常時更新・検索に強い?
更新中も
参照性能が
落ちない
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
性能傾向検索スループット
更新スループット
Groonga
検索スループット
更新スループット
GIN
更新が増えても
検索性能は落ちない
更新が増えると
検索性能が落ちる
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
落ちない理由
更新時に
参照ロックなし
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
参照ロック
獲得したら
他の処理は
参照不可になる
ロック
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
GINと更新と参照
接続1
接続2
INSERT
開始
SELECT
開始
ブロック
INSERT
完了
SELECT
完了
GINの場合
性能劣化!
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
Groongaと更新と参照
接続1
接続2
追加・更新
開始
検索
開始
追加・更新
完了
検索
完了
Groongaの場合
性能劣化なし!
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
PGroongaと更新と参照
接続1
接続2
INSERT
開始
SELECT
開始
INSERT
完了
SELECT
完了
PGroongaの場合
性能劣化なし!
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
参照ロックフリーの実現
データ
データ
新データ
データ
新データ
1. 初期状態
2. 新データ作成
3. ポインターの
指す先を変更
アトミックな操作
ロック不要
ユーザー1 値
ユーザー1 値
ユーザー1 値
ユーザー2
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
amindexでのポイント
Lock*()(*)を呼ばない
(*) PostgreSQL提供のロックAPI
呼ぶとGroongaの参照ロックフリー
の有意性を殺してしまう
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
本格的な例3
継続的な更新に強い
この特徴が有用なサービス例:
SNS
イメージ:Twitter・Facebook
チャット
イメージ:Slack
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
継続的な更新に強い?
間欠的な性能劣化がない
更新も検索も
GINは両方ある
FASTUPDATEを無効にしていない場合
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
間欠的性能劣化:Groonga
Groongaは間欠的性能劣化なし
常に最新ポスティングリストを
維持しているから
更新負荷が高くならない対策入り
https://github.com/groonga/groonga/wiki/Memo
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
Groongaの索引更新
全文検索
全文を検索
10
20
文書 完全転置索引
全文
検索
を
ID 内容 キーワード ポスティングリスト
10:1,20:1
10:2,20:3
20:2
全文|検索
1 2
全文|を|検索
1 2 3
分解
(文書ID+位置)
全文
検索
を
キーワード ポスティングリスト
10:1,20:1
10:2,20:3
20:2
更新を続けても
最新状態を維持
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
間欠的性能劣化:GIN
GINは間欠的性能劣化あり
最新ポスティングリスト維持を
サボって高速化しているから
サボったつけを払うときに性能劣化
例:検索時・更新が溜まりすぎた時
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
GINの索引更新
全文検索
全文を検索
10
20
文書
ID 内容
全文|検索
1 2
全文|を|検索
1 2 3
分解
ポスティングリスト
(文書IDのみ)転置索引
全文
検索
を
キーワード
10
10
20
ペンディングリスト
全文 20 検索 20
最新状態維持を
がんばらない
とりあえず
放り込む
溢れた!
...
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
GINの索引検索
全文
検索
キーワード ポスティングリスト
(文書IDのみ)転置索引
10
10
全文検索
クエリー
全文|検索
1 2
分解
全文検索
全文を検索
10
20
文書
ID 内容
10,20
結果候補
を 20
ペンディングリスト
全文 20 検索 20
マージ
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
本格的な例4
索引の作り直しが速い
この特徴が有用なケース:
ダンプのリストア
サービス復旧
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
索引作成
元データの
ロード時間
索引
作成時間
16分31秒 25分37秒
データ:Wikipedia日本語版
約184万レコード・平均サイズ約3.8KB
詳細:http://www.clear-code.com/blog/2015/5/25.html
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
索引作成:比較
PGroonga pg_bigm
25分37秒 5時間56分15秒
pg_bigmより約14倍速い!
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
速い理由
静的
索引構築を
サポート
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
索引構築方法
動的索引構築
構築中も完了した分は検索可能
即時反映可・一括登録不向き
静的索引構築
構築完了まで使えないが速い
(処理時間は入力に比例。指数関数的ではない。)
即時反映不可・一括登録向き
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
SQLの違い
-- 動的索引構築
CREATE INDEX ...;
INSERT ...;
-- 静的索引構築
INSERT ...;
CREATE INDEX ...;
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
amindexでのポイント
aminsert()
動的索引構築を実装
ambuild()
静的索引構築を実装
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
速い理由のまとめ
索引だけで検索可能
更新中も検索可能
間欠的な性能劣化なし
静的索引構築をサポート
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
速さ以外の利点1
便利な独自機能
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
独自機能1
見慣れた
クエリー言語
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
例
body @@ 'PostgreSQL OR MySQL -Oracle'
Web検索エンジン互換
→ユーザーの入力をそのまま使える
デフォルトAND
OR・-(除外)あり
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
独自機能2
配列+全文検索
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
例
CREATE TABLE logs (hosts text[]);
INSERT INTO logs
VALUES (Array['web', 'db']);
CREATE INDEX index ON logs
USING pgroonga (hosts);
SELECT * FROM logs
WHERE hosts @@ '各ホスト名を全文検索';
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
独自機能3
JSON+全文検索
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
例
INSERT INTO logs (record)
VALUES ('{"host": "ダウンホスト"}'),
('{"message": "シャットダウン"}');
SELECT * FROM logs
WHERE record @@ 'string @@ "ダウン"'
-- record
-- ----------------------------
-- {"host": "ダウンホスト"}
-- {"message": "シャットダウン"}
JSON内の全テキストから全文検索
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
独自機能4
ノーマライザー
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
ノーマライザー
文字を正規化するモジュール
表記の違いを吸収できる
アルファベット:全部小文字
ひらがな・カタカナ:全部全角
㍉→ミリ
UnicodeのNFKCベース
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
独自機能5
トークナイザー
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
トークナイザー
キーワード切り出しモジュール
クエリーに指定できる
キーワードを調整
例:すもも|も|もも|も
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
デフォルト:可変長Ngram
英語:字種区切り
例:Hello|World|!!!
Bigramだとノイズが多い
日本語:Bigram
例:ポスグレ→ポス|スグ|グレ|レ
漏れがない
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
形態素解析器ベース
MeCab:OSS
新語対応には辞書メンテが必要
参考:mecab-ipadic-neologd
JMAT:商用製品
ジャストシステム社製
ATOKでも使っている辞書を提供
新語にも強い
参考:「JMAT Groonga Tokenizer Talks」で検索
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
amindexでのポイント
amoptions()
CREATE INDEXでのオプションを定義
CREATE INDEX index ON memos
USING pgroonga (content)
WITH (normalizer = 'NormalizerMySQLUnicodeCI',
tokenizer = 'TokenMecab');
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
速さ以外の利点2
見慣れた機能B-tree・GINの代わりに使える
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
タグ検索
CREATE TABLE memos (
tags varchar(1023)[]
);
CREATE INDEX index ON memos
USING pgroonga (tags);
SELECT * FROM memos
WHERE tags %% 'タグ';
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
範囲検索
CREATE TABLE users (age int);
CREATE INDEX index ON users
USING pgroonga (age);
SELECT * FROM users
WHERE age < 20;
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
Index Only Scan
索引がデータも返す
テーブルにアクセスしないので高速
PGroonga・B-tree:サポート
PostgreSQL 9.5からはGiSTもサポート
GIN:未サポート
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
amindexでのポイント
amcanreturn()
trueを返す
amgettuple()
scan->xs_want_itupなら
scan->xs_itupにデータを設定
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
LIKE
CREATE INDEX index ON memos
USING pgroonga (content);
SELECT * FROM memos
WHERE content LIKE '%...%';
索引を使って高速検索
アプリケーションの変更不要
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
マルチカラムインデックス
CREATE INDEX index ON memos
USING pgroonga (title, content);
SELECT * FROM memos
WHERE title @@ '...' AND
content @@ '...';
titleでもcontentでもマッチ!
と書けないのでそんなにうれしくない
設計
ミス
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
text @@ text
組み込みの定義と競合
ts_vector @@ ts_queryにキャストされる
回避方法:
ALTER DATABASE name
SET search_path = '$user',public,pgroonga,pg_catalog;
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
jsonb @@ text
全文検索にすればよかった
jsonb @@ 'string @ "キーワード"'
-- ↓
jsonb @@ 'キーワード'
今の細かい検索条件を指定できる機能は別演算子にする
今後
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
もっとGroongaを活かす
PGroonga pg_bigm Groonga
0.646s 0.556s 0.085s
ヒット数635,792、検索語は2文字
生Groongaは1桁速い!
詳細:https://github.com/groonga/wikipedia-search/issues/3
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
同義語展開サポート
body @@ pgroonga.expand_query('ネジ')
-- ↓
body @@ 'ネジ OR ねじ OR ボルト'
Groongaでは使える
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
ステミングサポート
found/finds
↓
findGroongaでは使える
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
text @@ pgroonga.query
body @@ 'ポスグレ'::pgroonga.query
組み込みのtext @@ textとの競合回避
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
重みサポート
-- タイトルのほうが本文より10倍重要
body @@ ('title * 10 || body', 'ポスグレ')
Groongaでは使える
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
複合主キーサポート
CREATE TABLE t (
c1 INT,
c2 INT,
PRIMARY KEY (c1, c2)
);
CREATE INDEX index ON t
USING pgroonga (c1, c2);
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
まとめ時間が余ったらチュートリアルを自慢する
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
まとめ
PGroongaは速い
PGroongaは便利
PGroongaには設計ミスがある
PGroongaはもっと便利になる
PGroongaを使おう!
PGroongaの実装 - ぴーじーるんがのじっそう Powered by Rabbit 2.1.9
おしらせ
Groonga Meatup 2015
https://groonga.doorkeeper.jp/events/31482
PGroongaの話題もアリ
多少空きアリ(定員を多少増やせる)
11月29日(日)13:30開始
来年2月9日は「MySQLとPostgreSQLと日本語全文検索」
https://groonga.doorkeeper.jp/events/35295

More Related Content

What's hot

Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法Kouhei Sutou
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムKouhei Sutou
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムKouhei Sutou
 
RubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りRubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りKouhei Sutou
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Kouhei Sutou
 
Mroonga開発者が来たぞ!
Mroonga開発者が来たぞ!Mroonga開発者が来たぞ!
Mroonga開発者が来たぞ!Kouhei Sutou
 
Groonga Meetup 2014/04/29
Groonga Meetup 2014/04/29Groonga Meetup 2014/04/29
Groonga Meetup 2014/04/29kenhys
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroongaKouhei Sutou
 
Apache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでApache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでKouhei Sutou
 
Rubyを使った分散全文検索ミドルウェア
Rubyを使った分散全文検索ミドルウェアRubyを使った分散全文検索ミドルウェア
Rubyを使った分散全文検索ミドルウェアKouhei Sutou
 
Grafana Dashboards as Code
Grafana Dashboards as CodeGrafana Dashboards as Code
Grafana Dashboards as CodeTakuhiro Yoshida
 
Fluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyFluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyDaisuke Ando
 
Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察貴仁 大和屋
 
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことpg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことMasahiko Sawada
 
Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)Daisuke Kikuchi
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜Taro Matsuzawa
 
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化kazuhcurry
 
Groonga改良型Ngramトークナイザー
Groonga改良型NgramトークナイザーGroonga改良型Ngramトークナイザー
Groonga改良型NgramトークナイザーNaoya Murakami
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeToshi Harada
 

What's hot (20)

Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システム
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
RubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りRubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入り
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
 
Mroonga開発者が来たぞ!
Mroonga開発者が来たぞ!Mroonga開発者が来たぞ!
Mroonga開発者が来たぞ!
 
Groonga Meetup 2014/04/29
Groonga Meetup 2014/04/29Groonga Meetup 2014/04/29
Groonga Meetup 2014/04/29
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroonga
 
Apache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでApache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject Introspectionで
 
Rubyを使った分散全文検索ミドルウェア
Rubyを使った分散全文検索ミドルウェアRubyを使った分散全文検索ミドルウェア
Rubyを使った分散全文検索ミドルウェア
 
Grafana Dashboards as Code
Grafana Dashboards as CodeGrafana Dashboards as Code
Grafana Dashboards as Code
 
Ingress on GKE/GCE
Ingress on GKE/GCEIngress on GKE/GCE
Ingress on GKE/GCE
 
Fluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyFluentd+MongoDB+Groovy
Fluentd+MongoDB+Groovy
 
Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察
 
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことpg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいこと
 
Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜
 
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
 
Groonga改良型Ngramトークナイザー
Groonga改良型NgramトークナイザーGroonga改良型Ngramトークナイザー
Groonga改良型Ngramトークナイザー
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatype
 

Similar to PGroongaの実装

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
 
ngx_http_groonga - 全文検索nginx
ngx_http_groonga - 全文検索nginxngx_http_groonga - 全文検索nginx
ngx_http_groonga - 全文検索nginxKouhei Sutou
 
GoBGP活用によるSD-WANプラクティス
GoBGP活用によるSD-WANプラクティスGoBGP活用によるSD-WANプラクティス
GoBGP活用によるSD-WANプラクティスToshiki Tsuboi
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話Masahiro Tomita
 
GroongaでRedmineを高速全文検索
GroongaでRedmineを高速全文検索GroongaでRedmineを高速全文検索
GroongaでRedmineを高速全文検索Kouhei Sutou
 
Droonga - 分散Groongaで快適レプリケーション生活
Droonga - 分散Groongaで快適レプリケーション生活Droonga - 分散Groongaで快適レプリケーション生活
Droonga - 分散Groongaで快適レプリケーション生活Hiroshi Yuki
 
第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み
第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み
第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込みKouhei Sutou
 
Rroongaの全文検索性能 Ruby kansai-20140531-ruby-kansai-20140531
Rroongaの全文検索性能 Ruby kansai-20140531-ruby-kansai-20140531Rroongaの全文検索性能 Ruby kansai-20140531-ruby-kansai-20140531
Rroongaの全文検索性能 Ruby kansai-20140531-ruby-kansai-20140531Naoya Murakami
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)NTT DATA Technology & Innovation
 
Xeon dとlagopusと、pktgen dpdk
Xeon dとlagopusと、pktgen dpdkXeon dとlagopusと、pktgen dpdk
Xeon dとlagopusと、pktgen dpdkMasaru Oki
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ Daisuke Ikeda
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016Takayuki Shimizukawa
 

Similar to PGroongaの実装 (16)

MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
 
Droongaのはじめかた
DroongaのはじめかたDroongaのはじめかた
Droongaのはじめかた
 
ngx_http_groonga - 全文検索nginx
ngx_http_groonga - 全文検索nginxngx_http_groonga - 全文検索nginx
ngx_http_groonga - 全文検索nginx
 
GoBGP活用によるSD-WANプラクティス
GoBGP活用によるSD-WANプラクティスGoBGP活用によるSD-WANプラクティス
GoBGP活用によるSD-WANプラクティス
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話
 
GroongaでRedmineを高速全文検索
GroongaでRedmineを高速全文検索GroongaでRedmineを高速全文検索
GroongaでRedmineを高速全文検索
 
Droonga - 分散Groongaで快適レプリケーション生活
Droonga - 分散Groongaで快適レプリケーション生活Droonga - 分散Groongaで快適レプリケーション生活
Droonga - 分散Groongaで快適レプリケーション生活
 
HerokuでGroonga
HerokuでGroongaHerokuでGroonga
HerokuでGroonga
 
Groongaの特徴
Groongaの特徴Groongaの特徴
Groongaの特徴
 
第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み
第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み
第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み
 
Rroongaの全文検索性能 Ruby kansai-20140531-ruby-kansai-20140531
Rroongaの全文検索性能 Ruby kansai-20140531-ruby-kansai-20140531Rroongaの全文検索性能 Ruby kansai-20140531-ruby-kansai-20140531
Rroongaの全文検索性能 Ruby kansai-20140531-ruby-kansai-20140531
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
Xeon dとlagopusと、pktgen dpdk
Xeon dとlagopusと、pktgen dpdkXeon dとlagopusと、pktgen dpdk
Xeon dとlagopusと、pktgen dpdk
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~
 
Groonga族2016
Groonga族2016Groonga族2016
Groonga族2016
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
 

More from Kouhei 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
 
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
 
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
 
全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!Kouhei Sutou
 
株式会社クリアコード
株式会社クリアコード株式会社クリアコード
株式会社クリアコードKouhei Sutou
 
OSSの開発に参加しよう! - OSS Gate
OSSの開発に参加しよう! - OSS GateOSSの開発に参加しよう! - OSS Gate
OSSの開発に参加しよう! - OSS GateKouhei Sutou
 

More from Kouhei Sutou (20)

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
 
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
 
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!
 
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
 
PGroonga & Zulip
PGroonga & ZulipPGroonga & Zulip
PGroonga & Zulip
 
全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!
 
株式会社クリアコード
株式会社クリアコード株式会社クリアコード
株式会社クリアコード
 
OSSの開発に参加しよう! - OSS Gate
OSSの開発に参加しよう! - OSS GateOSSの開発に参加しよう! - OSS Gate
OSSの開発に参加しよう! - OSS Gate
 

PGroongaの実装