snappyについて
-
Upload
moai-kids -
Category
Technology
-
view
3.606 -
download
8
description
Transcript of snappyについて
![Page 1: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/1.jpg)
snappyについて
1
![Page 2: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/2.jpg)
snappy
•Googleが2011/04 にオープンソース化したデータ圧縮ライブラリ。(new BSD License)
•そこそこの圧縮率だが高速に圧縮~伸長が行える。•昔はZippyと言われていたらしい
2
![Page 3: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/3.jpg)
なぜsnappyのようなものが必要か?
•データの圧縮ってそんなに必要なの?→必要です(キリッ日々無尽蔵に増えていくデータの効率的な管理は大事。有限なリソースの有効活用は死活問題。(diskスペース、i-node...)
3
![Page 4: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/4.jpg)
なぜsnappyのようなものが必要か?
•圧縮率は高ければ高い方がよくない?→ケースバイケースだが、圧縮率が高いアルゴリズムは概ね処理コストも高い(処理時間が長い)。処理速度が速い方が使いやすいケースもある。
4
![Page 5: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/5.jpg)
他アルゴリズムとの比較
•以下の有名なアルゴリズムと比較•gzip(deflate)• みんな大好きな有名なアレ• lzo• snappy以外で高速な圧縮~伸張が特徴なアルゴリズム
•snappy•snappy付属のデータで検証
5
![Page 6: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/6.jpg)
gzip vs lzo vs snappy
6
![Page 7: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/7.jpg)
gzip vs lzo vs snappy
gzipの圧縮率が高い。lzoとsnappyはだいたい同じ
7
![Page 8: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/8.jpg)
gzip vs lzo vs snappy
8
![Page 9: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/9.jpg)
lzo(圧縮速い)
gzip vs lzo vs snappy
9
![Page 10: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/10.jpg)
snappy(伸長速い)
gzip vs lzo vs snappy
10
![Page 11: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/11.jpg)
gzip(・・・)
gzip vs lzo vs snappy
11
![Page 12: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/12.jpg)
•gzipは圧縮率高いけれど遅い• lzoとsnappyはほぼ同じ傾向(圧縮率そこそこだけど高速)
•そのなかでも・・・• 圧縮率はLZOが高め(ほぼ同じ)• 圧縮速度でもLZOが速い• ただし伸長速度はsnappyが速い→snappyは特に伸長速度の速さを考えられて作られたアルゴリズムっぽい
gzip vs lzo vs snappy
12
![Page 13: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/13.jpg)
•BigTableに保存する時のデータ圧縮に使われているらしい。• 書き込み(圧縮)よりも読み込み(伸長)の頻度が圧倒的に高い。• データを効率的に保存し、かつ必要なときにすぐ復元したい、という需要に答えるために作られたのでは。
snappyのユースケース
13
![Page 14: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/14.jpg)
圧縮の仕組み
14
![Page 15: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/15.jpg)
•ランレングス(Run Length Encoding)
• 「AAAAABBBBCCC」→「A5B4C3」•ハフマン符号(Huffman Coding)
• 出現数の多いデータに短い符号、少ないデータに大きい符号を割り当てる
•辞書式圧縮(Dictionary Coding)
• 過去に出現したデータパターンを辞書として、次に同じものが出現したらポインタに置き換える
よく知られる圧縮の仕組み
15
![Page 16: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/16.jpg)
•gzip(deflate)• LZSS(辞書式圧縮)+動的ハフマン符号•snappy• 辞書式圧縮+α
実際に採用されているもの
16
![Page 17: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/17.jpg)
• ハッシュテーブルを使って辞書を管理• 4byteのsliding windowを用いてデータをシーク。データがハッシュテーブルに無いか探す• ハッシュが一致する場合は、そこからどのくらいの長さデータが一致しているのかを計算
• 一致するデータがなかなか出現しない場合はデータをすっ飛ばす。(32回未出現ごとに移動幅を1ずつ増やす)
snappyアルゴリズムの特徴
17
![Page 18: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/18.jpg)
snappyアルゴリズムの特徴
http://www.slideshare.net/KeigoMachinaga/snappy-servay-8665889 より引用18
![Page 19: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/19.jpg)
• sliding window幅、ハッシュテーブルともコンパクト。高速な一次領域(CPUキャッシュなど)を有効活用できるから速い?• 基本的にハフマン符号化は使わずに辞書式圧縮だけだから速い?• なかなか圧縮できない時は割りきってデータをすっ飛ばすので速い?• その他諸々のテクニックのお陰で速い?
snappyアルゴリズムの特徴
19
![Page 20: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/20.jpg)
対応言語
•C/C++•Java(JNI経由呼び出し)•Perl/Python/Ruby•Erlang/Haskell•Node.js
20
![Page 21: snappyについて](https://reader030.fdocument.pub/reader030/viewer/2022020306/547d013a5906b55c378b45ef/html5/thumbnails/21.jpg)
まとめにかえて
•snappyはそこそこ圧縮率があって圧縮伸張速度が速い、非常に実践的で使いやすいアルゴリズムです。•興味のある方は試してみてください。
21