2011-07-02 2 views
12

もう少し詳しく:私たちはすでにZIPマップ、Ziplistsなどを最大限に活用しようとしています。これらの表現がすでに圧縮されているのかどうか、あるいはシリアル化されたハッシュとリストだけであるかどうかは疑問です。圧縮はメモリ使用量を大幅に削減しますか?文字列を赤字にする前に圧縮することは意味がありますか?

また、アプリケーションサーバー層での圧縮オーバーヘッドは、ネットワーク使用率の低下によって相殺されますか? StackOverflow's experienceは他の意見を示唆していますか?

簡潔に言えば、短い文字列と長い文字列の両方で意味がありますか?

答えて

2

通常、レディスとクライアントはIOバウンドであり、IOコストは通常​​、残りの要求/応答シーケンスに対して少なくとも2桁です。ペイロードを小さくすると、スループットが向上し、レイテンシが短くなります。

cost of compression << IO gains以上の厳しいルールはありません。あなたはそれをベンチして下限を設定する際に汗の跡を見つけるべきですが、ネットワークのMTUは下限のための悪い出発点ではありません。

+1

私は[this benchmark](http://dev.mensfeld.pl/2013/04/compressing-large-data-sets-in-redis-with-gzip-ruby-test-case/)が非常に有用であることを発見しました。 [これらの追加の考え](http://nosql.mypopescu.com/post/46926679137/compressing-large-data-sets-in-redis-with-gzip)も同様です。 – robert4

14

Redisは値を圧縮しません。圧縮する必要がある場合は、保存する文字列のサイズに大きく依存します。大きな文字列、数百のK、そしてそれ以上の場合、Webページを提供するのと同じように、クライアント側で余分なCPUサイクルを費やす価値はあるでしょうが、短い文字列の場合は時間の無駄でしょう。短い文字列は一般的にあまり圧縮しないので、ゲインは小さすぎます。

+0

だから、約10Kの何かのために、あなたは圧縮しないと言います - 私は正しいのですか?特定のケースでは、JSONの約2〜5Kのコンテンツがたくさんある場合、低レベルのgzippingはそれらのメモリフットプリントを少なくとも2倍に減らす必要があります。特にそれらが最終的にzipmap ?または私は間違っています – Hristo

+0

あなたの文字列のサイズを2倍に減らすことができれば、是非、圧縮する必要があります。私が言っていることは、あなたが小さな文字列で十分な圧縮を得ることはまったく確かではないということです。弦の内容によっては、2-5Kが低すぎる可能性があります。XMLは繰り返されるタグ名のために非常にうまく圧縮されますが、JPEG、GIF、PNGの画像データは圧縮済みなので全く圧縮されません。他の種類のデータには他のプロパティがあります。圧縮されていないデータを読み込み、メモリ使用量を調べる( 'redis-cli info | grep used_memory')、次に圧縮データを調べる。 – Theo

6

良好な圧縮を取得するための実用的な方法も非常に小さな文字列に対して、あります(50バイト!) -

自分の価値観がお互いに幾分類似している場合 - たとえば、彼らはそれに関連するいくつかのJSON表現をしていますオブジェクトのクラス - いくつかのテキスト例に基づいてコンプレッサー/デコンプレッサー辞書を事前計算することができます。

複雑な音ですが、実際には簡単です。さらに、正しいラッパーコードを使って処理するのが簡単です。ここで

はPython実装です:

https://github.com/internetarchive/openlibrary/blob/master/openlibrary/utils/compress.py

、ここで文字列の特定のクラスを圧縮するためのラッパーです:(短いJSONレコード)

https://github.com/internetarchive/openlibrary/blob/master/openlibrary/utils/olcompress.py

ワンキャッチ:これを行うには効率的に、あなたの圧縮ライブラリは内部状態を 'クローン化'する必要があります。 (Pythonライブラリでは)圧縮時にサンプルテキストを前置することで同様のことを実装できますが、これは追加の計算コストを支払うことを意味します。

この素晴らしいトリックのためにsolrizeに感謝します。

関連する問題