snappyについて

21
1

Upload: moai-kids

Post on 01-Dec-2014

3.606 views

Category:

Technology


8 download

DESCRIPTION

社内技術セミナー発表未遂資料です

TRANSCRIPT

Page 1: snappyについて

snappyについて

1

Page 2: snappyについて

snappy

•Googleが2011/04 にオープンソース化したデータ圧縮ライブラリ。(new BSD License)

•そこそこの圧縮率だが高速に圧縮~伸長が行える。•昔はZippyと言われていたらしい

2

Page 3: snappyについて

なぜsnappyのようなものが必要か?

•データの圧縮ってそんなに必要なの?→必要です(キリッ日々無尽蔵に増えていくデータの効率的な管理は大事。有限なリソースの有効活用は死活問題。(diskスペース、i-node...)

3

Page 4: snappyについて

なぜsnappyのようなものが必要か?

•圧縮率は高ければ高い方がよくない?→ケースバイケースだが、圧縮率が高いアルゴリズムは概ね処理コストも高い(処理時間が長い)。処理速度が速い方が使いやすいケースもある。

4

Page 5: snappyについて

他アルゴリズムとの比較

•以下の有名なアルゴリズムと比較•gzip(deflate)• みんな大好きな有名なアレ• lzo• snappy以外で高速な圧縮~伸張が特徴なアルゴリズム

•snappy•snappy付属のデータで検証

5

Page 6: snappyについて

gzip vs lzo vs snappy

6

Page 7: snappyについて

gzip vs lzo vs snappy

gzipの圧縮率が高い。lzoとsnappyはだいたい同じ

7

Page 8: snappyについて

gzip vs lzo vs snappy

8

Page 9: snappyについて

lzo(圧縮速い)

gzip vs lzo vs snappy

9

Page 10: snappyについて

snappy(伸長速い)

gzip vs lzo vs snappy

10

Page 11: snappyについて

gzip(・・・)

gzip vs lzo vs snappy

11

Page 12: snappyについて

•gzipは圧縮率高いけれど遅い• lzoとsnappyはほぼ同じ傾向(圧縮率そこそこだけど高速)

•そのなかでも・・・• 圧縮率はLZOが高め(ほぼ同じ)• 圧縮速度でもLZOが速い• ただし伸長速度はsnappyが速い→snappyは特に伸長速度の速さを考えられて作られたアルゴリズムっぽい

gzip vs lzo vs snappy

12

Page 13: snappyについて

•BigTableに保存する時のデータ圧縮に使われているらしい。• 書き込み(圧縮)よりも読み込み(伸長)の頻度が圧倒的に高い。• データを効率的に保存し、かつ必要なときにすぐ復元したい、という需要に答えるために作られたのでは。

snappyのユースケース

13

Page 14: snappyについて

圧縮の仕組み

14

Page 15: snappyについて

•ランレングス(Run Length Encoding)

• 「AAAAABBBBCCC」→「A5B4C3」•ハフマン符号(Huffman Coding)

• 出現数の多いデータに短い符号、少ないデータに大きい符号を割り当てる

•辞書式圧縮(Dictionary Coding)

• 過去に出現したデータパターンを辞書として、次に同じものが出現したらポインタに置き換える

よく知られる圧縮の仕組み

15

Page 16: snappyについて

•gzip(deflate)• LZSS(辞書式圧縮)+動的ハフマン符号•snappy• 辞書式圧縮+α

実際に採用されているもの

16

Page 17: snappyについて

• ハッシュテーブルを使って辞書を管理• 4byteのsliding windowを用いてデータをシーク。データがハッシュテーブルに無いか探す• ハッシュが一致する場合は、そこからどのくらいの長さデータが一致しているのかを計算

• 一致するデータがなかなか出現しない場合はデータをすっ飛ばす。(32回未出現ごとに移動幅を1ずつ増やす)

snappyアルゴリズムの特徴

17

Page 18: snappyについて

snappyアルゴリズムの特徴

http://www.slideshare.net/KeigoMachinaga/snappy-servay-8665889 より引用18

Page 19: snappyについて

• sliding window幅、ハッシュテーブルともコンパクト。高速な一次領域(CPUキャッシュなど)を有効活用できるから速い?• 基本的にハフマン符号化は使わずに辞書式圧縮だけだから速い?• なかなか圧縮できない時は割りきってデータをすっ飛ばすので速い?• その他諸々のテクニックのお陰で速い?

snappyアルゴリズムの特徴

19

Page 20: snappyについて

対応言語

•C/C++•Java(JNI経由呼び出し)•Perl/Python/Ruby•Erlang/Haskell•Node.js

20

Page 21: snappyについて

まとめにかえて

•snappyはそこそこ圧縮率があって圧縮伸張速度が速い、非常に実践的で使いやすいアルゴリズムです。•興味のある方は試してみてください。

21