Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
整数列圧縮整数列圧縮 22
発表者  : 服部 (インキュベー
ション L )
AgendaAgenda
1 前回のおさらい。
- 整数列圧縮の概論
- PForDelta ( PFD )
2 今回の話
- New PFD
- 高速な圧縮展開をする秘訣
前回のおさら前回のおさら
いい
整数列整数列
・ 非負 (>0) な数字列のイメー
ジ
0, 1, 3, 5, 6, 7, 8, 9, 10, 12, 15, 16, 20, 22, 25, 32, 33, 77
整数列圧縮の使い道整数列圧縮の使い道
・ 検索エンジン
- 転置インデックス ( Inverted Index )
・ 推薦エンジン
- データ構造そのもの
userID : ItemID1, ItemID
2 、・・・
word : docI...
Before After
ディスク I/O
キャシュ上の Index 数の増加
圧縮の利点圧縮の利点 [[ 検索検索 ]]
Before
推薦データ総量の増加
圧縮の利点圧縮の利点 [[ 推薦推薦 ]]
after
Gap listGap list
2 →  00000000 00000000 00000000 00000010
・ 小さい数字ほど先頭バイトが無駄になり易
い。 → 圧縮する余地がある。
・ 数値列 →  gap list へ変換
doc ...
整数列圧縮の種類整数列圧縮の種類
•  方法はいっぱいある。
-   Gamma coding
-   Delta coding
-   Variable byte coding (Var-byte)
-   Golomb coding
-  ...
圧縮技法の性能圧縮技法の性能
1 圧縮率
2 復元速度
・ 従来の手法では、 1 と 2 はトレードオフ
PForDeltaPForDelta
PForDelta(PFD) (Human 2005)
・ 伸張速度は最速クラス
・ 圧縮率も悪くない
Using b=2 bits to encode 128 numbers
1 2 3 4 5 6 7 ... 126 127 128
10 11 11 …01 01 0 01 42 1511 10 10
2 3 15 …1 1 23 13 42...
• Using 2 bits to encode 128 numbers
1 2 3 4 5 6 7 ... 124 125 126 127 128
2 3 3 …1 11 3 3 23 13 42 2
・  forced exception
...
header code exception
32 bit 128 * b bit r * exceptionNum bit
< frame structure >
data Num except Num First except pos b r...
・ 伸張コード ( 擬
似 ) decodeHeader( header )
→   b, exceptionNum, dataNum, firstExceptionPos
For( int i =0 ; i < dataNum ; i++ )...
・  exception をデータの総数の 1 0%
以内
  にするようなb
-   b の決め方
PF
D
Var-Byte
317
(46.3)
544
(27.0)
伸張速度
data size 27.2
M
26.8
M
( Original : 57.1 M )
対象 :  wikipedia   ( 55 万
データ )
実験実験...
今回の話今回の話
・  PFD の改良版 →  NewPFD
・ 他手法比較すると PFD は速いが、
  論文の結果に比べると遅い。
46.3 ( M int / sec )  →  800 ( M int / sec )
Rest of workRest o...
NewPForDeltaNewPForDelta
NewPFD (Yan 2009)
 ・ 伸張速度は PFD を超える。
 ・ 圧縮率も PFD を超える。
 ・  PForDelta + Simple16(or 9) の
合成
Simple9Simple9
1  圧縮後のデータ構造
(4byte)
2   header の数字で、 value 領域に何
bit で
何個データが入っているかわかる
。
header value
28 bit4 bit
0
1
2
3
4...
○  エンコード(圧縮)の仕方 ( New PFD
)
Code
section
Exceptio
n
section
42 = 101010
15 = 001111
23 = 010111
• Using 3 bits to encode 1...
○  特徴
1   ForcedException が無くなる
。
2   exception 領域に simple9
   1   → 高速化
   2   → 高圧縮化
実験実験
・  NewPFD と PFD   + simple9, var-byte
・  wikipedia   ( 55 万データ ) を 10 回
解凍
・ 前回の実装内容を見直し。
結果結果
PF
D
Var-Byte S9
719
(204.1)
1203
(122.0)
To Gap list 906
(162.0)
data size 29.2
M
32.7M28.7
M
( Original : 57.1 M )
...
ここまでのまここまでのま
とめとめ
・  NewPFD が一番速い。圧縮率も PFD より
良い。
・  46.3 (M int/sec) →   213 (M int/sec) まで上
がった。
・ まだ 800 M int /sec までは...
再実験再実験
・ 擬似乱数で作成した 13 種類のデータ
セット。
・ 序所に gaplist の値が小さくなっていく
ように
  作成。
・  NewPFD と PFD
圧縮率 (%)
伸張速度 (M int/sec)
再実験再実験
Over 500 ( M int/sec )
まとまと
めめ・ 整数列圧縮はサーチエンジンや推薦エ
ンジンのデータ構造に使うことができる。
・ 最近は NewPFD がお勧め。
・ 速度を出すには gap list の値が小さい
ことが
  重要
・  Java 実装でも 500 M in...
Upcoming SlideShare
Loading in …5
×

整数列圧縮

5,008 views

Published on

  • Be the first to comment

整数列圧縮

  1. 1. 整数列圧縮整数列圧縮 22 発表者  : 服部 (インキュベー ション L )
  2. 2. AgendaAgenda 1 前回のおさらい。 - 整数列圧縮の概論 - PForDelta ( PFD ) 2 今回の話 - New PFD - 高速な圧縮展開をする秘訣
  3. 3. 前回のおさら前回のおさら いい
  4. 4. 整数列整数列 ・ 非負 (>0) な数字列のイメー ジ 0, 1, 3, 5, 6, 7, 8, 9, 10, 12, 15, 16, 20, 22, 25, 32, 33, 77
  5. 5. 整数列圧縮の使い道整数列圧縮の使い道 ・ 検索エンジン - 転置インデックス ( Inverted Index ) ・ 推薦エンジン - データ構造そのもの userID : ItemID1, ItemID 2 、・・・ word : docID1, docID2 、・・・ userID : user1, user2 、・・・ 圧縮対象
  6. 6. Before After ディスク I/O キャシュ上の Index 数の増加 圧縮の利点圧縮の利点 [[ 検索検索 ]]
  7. 7. Before 推薦データ総量の増加 圧縮の利点圧縮の利点 [[ 推薦推薦 ]] after
  8. 8. Gap listGap list 2 →  00000000 00000000 00000000 00000010 ・ 小さい数字ほど先頭バイトが無駄になり易 い。 → 圧縮する余地がある。 ・ 数値列 →  gap list へ変換 doc IDs word1 : 345, 777, 11437, … doc Gaps word1 : 345, 432, 10660, …
  9. 9. 整数列圧縮の種類整数列圧縮の種類 •  方法はいっぱいある。 -   Gamma coding -   Delta coding -   Variable byte coding (Var-byte) -   Golomb coding -   Rice coding -   RiceVT coding -   Simple9 (S9) -   Simple16 (S16) -   Interpolative (IPC) -   PForDelta (PFD) -   NEW PForDelta (new PFD)
  10. 10. 圧縮技法の性能圧縮技法の性能 1 圧縮率 2 復元速度 ・ 従来の手法では、 1 と 2 はトレードオフ
  11. 11. PForDeltaPForDelta PForDelta(PFD) (Human 2005) ・ 伸張速度は最速クラス ・ 圧縮率も悪くない
  12. 12. Using b=2 bits to encode 128 numbers 1 2 3 4 5 6 7 ... 126 127 128 10 11 11 …01 01 0 01 42 1511 10 10 2 3 15 …1 1 23 13 42 2 128 * b 23 variable ・ 圧縮の仕方    -   Gap List を 128 個づつに分割    -  フレーム (128 個 ) をビット幅 b で圧縮 Code section Exceptio n : exception
  13. 13. • Using 2 bits to encode 128 numbers 1 2 3 4 5 6 7 ... 124 125 126 127 128 2 3 3 …1 11 3 3 23 13 42 2 ・  forced exception 1 2 3 4 5 6 7 ... 124 125 126 127 128 10 11 11 …0 11 11 11 0 0111 3 10 2 3 3 …1 11 3 3 23 13 42 2 Forced exception 2 3 3 …1 11 3 3 0 13 ? 2
  14. 14. header code exception 32 bit 128 * b bit r * exceptionNum bit < frame structure > data Num except Num First except pos b r next 8 bit 8 bit 8 bit 5 bit 2 bit 1 bit < header structure > - code と exception の情報は header に保 存
  15. 15. ・ 伸張コード ( 擬 似 ) decodeHeader( header ) →   b, exceptionNum, dataNum, firstExceptionPos For( int i =0 ; i < dataNum ; i++ ) output[i] = DECODE( code[i] , b ); cur = firstExceptionPos For( int i =0 ; i < exceptionNum ; i++, cur = next ){ output[cur] = GET_Exception[i] next = cur + code[cur] + 1 } header code exception First loop : copy second loop : patch
  16. 16. ・  exception をデータの総数の 1 0% 以内   にするようなb -   b の決め方
  17. 17. PF D Var-Byte 317 (46.3) 544 (27.0) 伸張速度 data size 27.2 M 26.8 M ( Original : 57.1 M ) 対象 :  wikipedia   ( 55 万 データ ) 実験実験 ms byte
  18. 18. 今回の話今回の話
  19. 19. ・  PFD の改良版 →  NewPFD ・ 他手法比較すると PFD は速いが、   論文の結果に比べると遅い。 46.3 ( M int / sec )  →  800 ( M int / sec ) Rest of workRest of work 実験結果 論文
  20. 20. NewPForDeltaNewPForDelta NewPFD (Yan 2009)  ・ 伸張速度は PFD を超える。  ・ 圧縮率も PFD を超える。  ・  PForDelta + Simple16(or 9) の 合成
  21. 21. Simple9Simple9 1  圧縮後のデータ構造 (4byte) 2   header の数字で、 value 領域に何 bit で 何個データが入っているかわかる 。 header value 28 bit4 bit 0 1 2 3 4 5 6 7 8 28 14   9   7   5   1 2 3 4 5 7 9 14 28 Header data-num bit-width
  22. 22. ○  エンコード(圧縮)の仕方 ( New PFD ) Code section Exceptio n section 42 = 101010 15 = 001111 23 = 010111 • Using 3 bits to encode 128 numbers 1 2 3 4 5 6 7 ... 126 127 128 010 100 001 …111 001 111 001 101 001011 010 010 2 4 1 …15 1 23 13 42 2 128 * b 010 Offset : exception 3 119 Simple9 variabl e
  23. 23. ○  特徴 1   ForcedException が無くなる 。 2   exception 領域に simple9    1   → 高速化    2   → 高圧縮化
  24. 24. 実験実験 ・  NewPFD と PFD   + simple9, var-byte ・  wikipedia   ( 55 万データ ) を 10 回 解凍 ・ 前回の実装内容を見直し。
  25. 25. 結果結果 PF D Var-Byte S9 719 (204.1) 1203 (122.0) To Gap list 906 (162.0) data size 29.2 M 32.7M28.7 M ( Original : 57.1 M ) NewPFD 689 (213.0) 29.1 M ms (M int / sec) byte
  26. 26. ここまでのまここまでのま とめとめ ・  NewPFD が一番速い。圧縮率も PFD より 良い。 ・  46.3 (M int/sec) →   213 (M int/sec) まで上 がった。 ・ まだ 800 M int /sec までは遠い。
  27. 27. 再実験再実験 ・ 擬似乱数で作成した 13 種類のデータ セット。 ・ 序所に gaplist の値が小さくなっていく ように   作成。 ・  NewPFD と PFD
  28. 28. 圧縮率 (%) 伸張速度 (M int/sec) 再実験再実験 Over 500 ( M int/sec )
  29. 29. まとまと めめ・ 整数列圧縮はサーチエンジンや推薦エ ンジンのデータ構造に使うことができる。 ・ 最近は NewPFD がお勧め。 ・ 速度を出すには gap list の値が小さい ことが   重要 ・  Java 実装でも 500 M int /sec はいけ

×