More Related Content
More from Sotaro Karasawa (16)
Internship at PFI
- 2. Agenda
• 目標
• 転置インデックス用ライブラリ libkorakuen
– 中間発表までのおさらい
– 新しいアプローチでの実装
– 実装にあたってのポイント
– 英語 Wikipedia のインデックス作成
– デモ
– libkorakuen のこれから
• インターンを終えて
Copyright © sotarok @ PFI.
- 5. 中間発表までのアプローチ
⽂書 読み込み
libkorakuen
Temporary
Index
On Memory
Encoder
Index
Index
Copyright © sotarok @ PFI.
- 6. 中間発表までのアプローチ
⽂書 読み込み
libkorakuen
Temporary
Index
On Memory
Encoder
Index
Keyword: Document (Pos, Pos, ...), Document (Pos , ...), ...
Keyword: Document (Pos, Pos, ...), Document (Pos , ...), ...
Index
Keyword: Document (Pos, Pos, ...), Document (Pos , ...), ...
... Copyright © sotarok @ PFI.
- 7. 中間発表までのアプローチ
⽂書 読み込み
libkorakuen
Temporary
Index
On Memory
Encoder
Index
Index
Copyright © sotarok @ PFI.
- 8. 中間発表までのアプローチ
⽂書
Temporary 書き出す libkorakuen
Index
On Memory
Encoder
Index
Index
Copyright © sotarok @ PFI.
- 9. 中間発表までのアプローチ
⽂書 読み込み
Temporary 書き出す libkorakuen
Index
On Memory
Encoder
Index
Index
Copyright © sotarok @ PFI.
- 10. 中間発表までのアプローチ
⽂書
libkorakuen
Temporary
Index
On Memory
Encoder
Index
Index
Copyright © sotarok @ PFI.
- 16. 問題点
• ⼀時インデックスに,Tokyo Cabinet を使っていた
Keyword Index Index2 Index3
Keyword2 Index
... ...
• メモリから⼀時インデックスに書き出すたびに
Tokyo Cabinet上での「Append」が発⽣
• 巨大なデータを扱うと途中から⼊らなくなる
Copyright © sotarok @ PFI.
- 18. 新しいアプローチ
• MapReduce 的な考え⽅!
• 途中でインデックスを作成せずにすべて読み込む
• それぞれのファイルをソートする
• 2つずつマージする
• インデックスを作成する
Copyright © sotarok @ PFI.
- 20. 何も考えずにとりあえず読み込む
On Memory
keyword id doc id pos
⽂書
1 1 0
2 1 4
3 1 10
libkorakuen 4 2 0
5 2 8
1 2 12
6 3 0
... ... ...
Copyright © sotarok @ PFI.
- 21. 何も考えずにとりあえず読み込む
On Memory
keyword id doc id pos
⽂書
1 1 0
2 1 4
3 1 10
libkorakuen 4 2 0
5 2 8
1 2 12
6 3 0
... ... ...
Copyright © sotarok @ PFI.
- 22. 何も考えずにとりあえず読み込む
On Memory
keyword id doc id pos
⽂書
1 1 0
2 1 4
3 1 10
libkorakuen 4 2 0
5 2 8
1 2 12
6 3 0
... ... ...
Copyright © sotarok @ PFI.
- 23. 何も考えずにとりあえず読み込む
On Memory
keyword id doc id pos
⽂書
1 1 0
2 1 4
3 1 10
libkorakuen 4 2 0
5 2 8
1 2 12
6 3 0
... ... ...
Copyright © sotarok @ PFI.
- 24. 何も考えずにとりあえず読み込む
On Memory
keyword id doc id pos
⽂書
1 1 0
2 1 4
3 1 10
libkorakuen 4 2 0
5 2 8
1 2 12
6 3 0
... ... ...
Copyright © sotarok @ PFI.
- 25. 何も考えずにとりあえず読み込む
On Memory
keyword id doc id pos
⽂書
1 1 0
2 1 4
3 1 10
libkorakuen 4 2 0
5 2 8
1 2 12
6 3 0
⼀時ファイル
... ... ...
Copyright © sotarok @ PFI.
- 26. 分割された⼀時ファイル
⽂書
keyword id doc id pos
1 1 0
libkorakuen 2 1 4
3 1 10
4 2 0
5 2 8
1 2 12
⼀時ファイル 6 3 0
... ... ...
Copyright © sotarok @ PFI.
- 28. ソートする
On Memory
keyword id doc id pos
⽂書
1 1 0
2 1 4
3 1 10
libkorakuen 4 2 0
5 2 8
1 2 12
⼀時ファイル
6 3 0
... ... ...
Copyright © sotarok @ PFI.
- 29. ソートする
On Memory
keyword id doc id pos
⽂書
1 1 0
1 2 12
2 1 4
libkorakuen 3 1 10
4 2 0
5 2 8
⼀時ファイル
6 3 0
... ... ...
ソート済み
⼀時ファイル Copyright © sotarok @ PFI.
- 31. マージする
ソート済み ソート済み ソート済み
⼀時ファイル ⼀時ファイル ... ⼀時ファイル
⽂書 1 2 n
libkorakuen
マージ済み
⼀時ファイル
1
- 32. マージする
ソート済み ソート済み ソート済み
⼀時ファイル ⼀時ファイル ... ⼀時ファイル
⽂書 3 4 n
libkorakuen
マージ済み マージ済み
⼀時ファイル ⼀時ファイル
1 2
- 33. マージする
ソート済み ソート済み
⼀時ファイル ⼀時ファイル
⽂書 n-1 n
libkorakuen
マージ済み マージ済み マージ済み
⼀時ファイル ⼀時ファイル ... ⼀時ファイル
1 2 2/n
- 36. インデックス作成
Keyword Document (Pos, Pos, ...),
Document (Pos , ...), ...
Document (Pos , ...), ...
⽂書
Document (Pos , ...), ...
Keyword Document (Pos, Pos, ...),
Document (Pos , ...), ...
libkorakuen Document (Pos , ...), ...
Document (Pos , ...), ...
Keyword Document (Pos, Pos, ...),
Document (Pos , ...), ...
ひとつの大きな
マージ済み Document (Pos , ...), ...
⼀時ファイル
Document (Pos , ...), ...
- 37. インデックス作成
Keyword Document (Pos, Pos, ...),
pos Document (Pos , ...), ...
0
Document (Pos , ...), ...
⽂書
Document (Pos , ...), ...
Keyword Document (Pos, Pos, ...),
pos Document (Pos , ...), ...
libkorakuen 122 Document (Pos , ...), ...
Document (Pos , ...), ...
Keyword Document (Pos, Pos, ...),
ひとつの大きな pos Document (Pos , ...), ...
マージ済み 456 Document (Pos , ...), ...
⼀時ファイル
Document (Pos , ...), ...
- 45. Variable Byte Code
3: 00000000 00000000 00000000 00000011
3: 10000011
Byte
?
Copyright © sotarok @ PFI.
- 46. 圧縮
• ドキュメントIDのリスト
• 昇順にソートされている
• 前の⽂書との差分に変換
• 差分とった整数をエンコード
Copyright © sotarok @ PFI.
- 47. 英語インデックスの作成
• 単語数: 約 1500 万(たぶん)
• ドキュメント: 約 300万
• 元⽂書: 8.9 GB
• 作成時間: 1:30:37.09
• 作成後インデックス:6.1 GB
– ドキュメントIDを振りなおしているおかげでほとん
どがものすごく⼩さい整数 → 圧縮率良
Copyright © sotarok @ PFI.
- 56. その他さまざまな思い
• 技術的なことに関して
– アルゴリズムやデータ構造を考えてプログラムを
組むこと
– ライブラリを利用するか自分で実装するか
– 実装の背景にある理論や研究
• 技術者として
– 自分の知らない分野のことを勉強するのは楽しい
– PHP とか怖くないという自信(何
• まとまらないので近⽇中にブログに書きます!
Copyright © sotarok @ PFI.