More Related Content
More from Preferred Networks (20)
2009年4月8日セミナー 3.SSD向け全文検索エンジン
- 5. HDD vs SSD
HDD SSD
容量 ~2TB ~256GB
価格 ¥6/GB ¥200/GB
読み込み(逐次) 50~100MB/sec 100~200MB/sec
書き込み(逐次) 50~100MB/sec 100~200MB/sec
100μs~
レイテンシ* 10ms ~
* リクエストを出してからデータが得られるまでの時間
5
- 8. Suffix Array (SA, 接尾辞配列)
文字列に対して、全てのSuffix(接尾辞)
をソートしたもの
0 abracadabra$ 11 $
1 bracadabra$ 10 a$
2 racadabra$ 7 abra$
3 acadabra$ 0 abracadabra$
4 cadabra$ 3 acadabra$
abracadabra$
5 adabra$ 5 adabra$
6 dabra$ 8 bra$
7 abra$ 1 bracadabra$
8 bra$ 4 cadabra$
9 ra$ 6 dabra$
10 a$ 9 ra$
11 $ 2 racadabra$
8
- 12. 他の全文検索手法との比較(1)
転置ファイル
単語に対して、その出現位置を記録
高速な実装が可能
正しく単語に分割されなかった部分の検索が漏れる
…の場合、検索に転置ファイルを用いるこ…
125 128
単語 位置
“転置” を検索
100, 125, 200, …
検索
・対応する位置を読みだす
128, 300, 789, …
転置
… …
12
- 17. 検索パフォーマンス
ヒット文書数に比例
平均的クエリ(数万文書程度)なら100qps~
10
検索時間(s)
1
20M docs
50GB index
0.1
8GB ram
Pentium Dual Core
2.0Ghz
0.01 G.Skill 256GB SSD
1 100 10000 1000000
ヒット文書数
17
- 20. パイプラインアルゴリズム
次の三つの操作で構成
04262…
014321…
abracadabra… 01402030140…
13153…
前から順に
アクセス
001223…
並べ替え 00011122…
011244…
01402030140… 00000112344…
前から順に
生成
ソート 分割・マージ
スキャン・フィルタ
20
- 24. メモリ上でのソート
手法いろいろ
quick sort (std::sort())
parallel quick sort (std::sort()を並列化)
radix sort
いろいろ試したが、結局quick sortが速い
140
120 Quick sort (std::sort)
100
80 Parallel quick sort
60
40 Radix sort
20
0
Core2Quad 2.6Ghz 500MB data
速度(MB/s) 24