groonga 開発予報

32
銀銀銀銀銀銀銀銀 銀銀銀 groonga 銀銀銀銀 銀銀銀銀 銀銀銀銀銀銀銀銀 銀銀 銀 銀銀銀銀銀銀 2011 1 銀銀銀銀銀銀銀銀 groonga 銀銀銀銀銀 2 #groonga

Upload: porter

Post on 24-Feb-2016

87 views

Category:

Documents


0 download

DESCRIPTION

groonga 開発予報. 有限会社 未来検索ブラジル 矢田 晋. 祝 本日リリースされた groonga 1.2.8 には grn_dat が含まれています. そこで今日は 皆さんにちょっと. ダブル配列の話を 聞いてもらいます. とりあえず grn_dat とは何か. grn_dat とは. 文字列を ID と関連付けるモジュール grn_pat , grn_hash の仲間. dat [1] == “ Trebor ” dat [2] == “ Werdna ”. dat [“ L’kbreth ”] == 3 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: groonga 開発予報

銀河の歴史がまた   ページ

groonga 開発予報有限会社 未来検索ブラジル矢田 晋

いいにくの日2011 1 全文検索エンジン groonga を囲む夕べ 2

#groonga

Page 2: groonga 開発予報

銀河の歴史がまた   ページ

祝本日リリースされた

groonga 1.2.8 にはgrn_dat が含まれています

いいにくの日2011 2 全文検索エンジン groonga を囲む夕べ 2

#groonga

Page 3: groonga 開発予報

銀河の歴史がまた   ページ

そこで今日は皆さんにちょっと

いいにくの日2011 3 全文検索エンジン groonga を囲む夕べ 2

#groonga

Page 4: groonga 開発予報

銀河の歴史がまた   ページ

ダブル配列の話を聞いてもらいます

いいにくの日2011 4 全文検索エンジン groonga を囲む夕べ 2

#groonga

Page 5: groonga 開発予報

銀河の歴史がまた   ページ

とりあえずgrn_dat とは何か

いいにくの日2011 5 全文検索エンジン groonga を囲む夕べ 2

#groonga

Page 6: groonga 開発予報

銀河の歴史がまた   ページ

grn_dat とは• 文字列を ID と関連付けるモジュール– grn_pat, grn_hash の仲間

いいにくの日2011 6 全文検索エンジン groonga を囲む夕べ 2

#groonga

ID 文字列1 Trebor2 Werdna3 L’kbreth4 Gatekeeper… …

dat[1] == “Trebor”

dat[2] == “Werdna”

dat[“L’kbreth”] == 3

dat[“Gatekeeper”] == 4

Page 7: groonga 開発予報

銀河の歴史がまた   ページ

grn_dat と仲間たち• grn_pat – パトリシアトライ– 前方一致検索をサポートする

• grn_hash – ハッシュ表– 前方一致検索をサポートしない代わりに高速

• grn_dat – ダブル配列– 前方一致検索をサポートする上に高速

いいにくの日2011 7 全文検索エンジン groonga を囲む夕べ 2

#groonga

Page 8: groonga 開発予報

銀河の歴史がまた   ページ

いずれも参照ロックフリー

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 8

Page 9: groonga 開発予報

銀河の歴史がまた   ページ

grn_dat の特徴• 前方一致検索と参照時間を重視– 文字列更新については後述

いいにくの日2011 9 全文検索エンジン groonga を囲む夕べ 2

#groonga

grn_pat grn_hash grn_dat

前方一致検索 ○ × ○

参照 ○ ◎ ◎

更新 ○ ◎ △

サイズ ◎ ○ △

文字列更新 × × ○

イマココ

Page 10: groonga 開発予報

銀河の歴史がまた   ページ

前方一致検索とは• Common Prefix Search– クエリの前半に一致する文字列を見つける

“ 北海道” ⇒ “北” , “ 北海” , “ 北海道”– 用途 : クエリから索引語への分割

• Predictive Search– クエリで始まる文字列を見つける

“ 南斗” ⇒ “南斗孤鷲拳(シン)” , “ 南斗水鳥拳(レイ)” , etc.– 用途 : クエリの補完・拡張

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 10

Page 11: groonga 開発予報

銀河の歴史がまた   ページ

文字列更新とは• ID を残して文字列のみを更新すること– 用途 : テーブル情報の管理

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 11

ID 文字列1 Trebor2 Werdna3 L’kbreth4 Gatekeeper… …

ID 文字列1 Trebor2 Werdna3 L’kbreth4 Sorn… …

Update(“Gatekeeper”, “Sorn”)

Page 12: groonga 開発予報

銀河の歴史がまた   ページ

grn_dat の役割• grn_pat の代替として– 前方一致検索が必要なとき– 更新より参照の方が多いとき– メモリ使用量より参照時間を重視するとき

• テーブル情報の管理に使うと– テーブルやカラムの名前変更が可能になる– MySQL で ALTER TABLE RENAME が可能になる

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 12

Page 13: groonga 開発予報

銀河の歴史がまた   ページ

技術的な情報がほしい方へ• grn_dat 開発のポイント– ダブル配列の参照ロックフリー化– 更新の効率化– 前方一致検索の効率化

• 参考資料– 参照ロックフリーなダブル配列• http://groonga.org/ja/blog/2011/11/08/grn_dat.html

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 13

Page 14: groonga 開発予報

銀河の歴史がまた   ページ

そろそろ説明は終わりにして

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 14

Page 15: groonga 開発予報

銀河の歴史がまた   ページ

見せてもらおうか新しいモジュールの性能とやら

を いいにくの日

2011 全文検索エンジン groonga を囲む夕べ 2

#groonga 15

Page 16: groonga 開発予報

銀河の歴史がまた   ページ

ベンチマーク(準備)• データ– jawiki-20111111-all-titles-in-ns0– 先頭の 100 万件を使用

• 構築・参照方法– ランダム順に登録– ランダム順に登録文字列を参照

• 計測方法– 試行回数 11 で中央値を採用

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 16

Page 17: groonga 開発予報

銀河の歴史がまた   ページ

ベンチマーク(参照時間)

1,000 10,000 100,000 1,000,000 0

0.20.40.60.8

11.21.41.61.8

2

grn_patgrn_hashgrn_dat

Number of keys

Sear

ch ti

me

[μs/

key]

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 17

grn_dat速い

Page 18: groonga 開発予報

銀河の歴史がまた   ページ

ベンチマーク(構築時間)

1,000 10,000 100,000 1,000,000 0

0.5

1

1.5

2

2.5

grn_patgrn_hashgrn_dat

Number of keys

Inse

rtion

tim

e [μ

s/ke

y]

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 18

grn_dat遅い

Page 19: groonga 開発予報

銀河の歴史がまた   ページ

ベンチマーク(サイズ)

1,000 10,000 100,000 1,000,000 0

20

40

60

80

100

120

grn_patgrn_hashgrn_dat

Number of keys

Size

[MB]

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 19

grn_dat大きい

Page 20: groonga 開発予報

銀河の歴史がまた   ページ

まとめると前方一致検索ができて

参照時間に優れる いいにくの日

2011 全文検索エンジン groonga を囲む夕べ 2

#groonga 20

Page 21: groonga 開発予報

銀河の歴史がまた   ページ

そういえば

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 21

Page 22: groonga 開発予報

銀河の歴史がまた   ページ

「 groonga 開発予報」というタイトルでした

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 22

Page 23: groonga 開発予報

銀河の歴史がまた   ページ

検討中の内容を紹介します

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 23

Page 24: groonga 開発予報

銀河の歴史がまた   ページ

ひとつ頻出する索引語をキャッシュ

「人の世の生き血を啜り」http://groonga.org/ja/blog/2011/07/13/lexicon-cache.html

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 24

Page 25: groonga 開発予報

銀河の歴史がまた   ページ

ベンチマーク(参照時間)

1,000 10,000 100,000 1,000,000 0

0.20.40.60.8

11.21.41.61.8

2

grn_patgrn_hashgrn_dat

Number of keys

Sear

ch ti

me

[μs/

key]

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 25

偏りが大きければ…

Page 26: groonga 開発予報

銀河の歴史がまた   ページ

ふたつ不安定なハッシュ表を調整

「不埒な悪行三昧」

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 26

Page 27: groonga 開発予報

銀河の歴史がまた   ページ

ベンチマーク(構築時間)

1,000 10,000 100,000 1,000,000 0

0.5

1

1.5

2

2.5

grn_patgrn_hashgrn_dat

Number of keys

Inse

rtion

tim

e [μ

s/ke

y]

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 27

改良の余地あり…

Page 28: groonga 開発予報

銀河の歴史がまた   ページ

みっつ見る機会の少ないデータを圧縮

「醜い浮世の鬼を」 http://code.google.com/p/marisa-trie/

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 28

Page 29: groonga 開発予報

銀河の歴史がまた   ページ

ベンチマーク(サイズ)

1,000 10,000 100,000 1,000,000 0

20

40

60

80

100

120

grn_patgrn_hashgrn_datmarisa

Number of keys

Size

[MB]

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 29

更新できないし参照も遅いけど…

Page 30: groonga 開発予報

銀河の歴史がまた   ページ

他にもありますがこのくらいで勘弁してください

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 30

Page 31: groonga 開発予報

銀河の歴史がまた   ページ

grn_dat と愉快な仲間たちに絞って紹介しました

いいにくの日2011

全文検索エンジン groonga を囲む夕べ 2 #groonga 31

Page 32: groonga 開発予報

銀河の歴史がまた   ページ

次回「 groonga の野望」

お楽しみに いいにくの日

2011 全文検索エンジン groonga を囲む夕べ 2

#groonga 32