これはGroonga Advent Calendar 2016の3日目の記事です。
はじめに
Groonga 6.1.1のリリースから、カラムの値を圧縮するのに、Zstandard(以下Zstd)が使えるようになりました。
例えば、メモ内容を Memos
テーブルの content
カラムにZstdで圧縮して格納したい場合には次のようにしてカラムを作成します。
column_create Memos content COLUMN_SCALAR|COMPRESS_ZSTD Text
カラムの値の圧縮には、これまでもZlib(COMPRESS_ZLIB)やLZ4(COMPRESS_LZ4)がサポートされていました。ではZstdはどんなときに使うとよいのでしょうか。
どれを選んだらいいか?
Zstdのサイトのベンチマークだけから判断すると、Zstdは圧縮率もZlibに比べてやや良いようです、なので、ディスク容量を節約したいならZstdを選択するのが良さそうです。(Zstd > Zlib > LZ4)
一方、圧縮速度、展開速度に関して言うと、LZ4が他を引き離して圧倒的に良いと言えます。(LZ4 > Zstd > Zlib)
ディスク容量を節約することよりも、更新や検索性能を稼ぎたいならLZ4を選択するのが良さそうです。
使える環境は?
どくにこだわりがないならZstdを採用するのがおすすめです。
が、Zstdは後発のライブラリーでもあるので、パッケージが用意されていないディストリビューションもあります。
- Debian 現在の安定版(jessie)向けにパッケージは提供されていません。stretch以降には入ります。jessieの人はディスク容量を節約したいならZlib、そうでないならLZ4を使おう。
- Ubuntu 16.04(xenial)以降なら使えます。
- CentOS 6以降なら使えます。(epelを利用)
- Fedora 23以降なら使えます。
ただし環境によって採用されているバージョンがばらばらな点に注意が必要かもしれません。(バージョンによっては、圧縮・展開性能が逆転するということがあるかもしれない。)
まとめ
- Groonga 6.1.1でZstandardによるカラムの値の圧縮がサポートされたよ
- 特にこだわりがないならZstdを使うと良いよ
- ディスクを節約したいならZstd、更新や検索性能を重視するならLZ4を使うと良いよ
- ↑は目安なので、そのまま鵜呑みにせず本番環境へ導入する前に自分の環境でベンチマークをとって評価してね