2017-05-05 4 views
1

現在のディスク使用量を減らそうとしています。そうすることで、私たちが保存する情報のほとんどは、大部分が複数のテーブルや行にまたがる同じ文字列からなるメタデータです。Cassandraはストリングを繰り返してストレージを最適化しますか?

文字列は整数よりも多くのスペースを占有する傾向があるため、ディスク使用量を減らすためにこれらの文字列を整数に置き換えることができると考えました。私たちはこれを行い、ディスク消費量にほとんど差がないことに気付きました。

メタデータ文字列のバラツキが大きい場合には、大きな違いがあることに気付きました。私。ストリングはさらに変化しました。

私はCassandra 2.1に繰り返し情報を格納する巧妙な手段を採用しているのではないかと疑問に思っています。私はこの問題について何も見つけることができませんでした。

ありがとうございました。

答えて

3

Cassandraは異なるテーブルに属するデータを混ぜ合わせないので、文字列が複数のテーブルにまたがって繰り返される場合、C *はどのような方法でもそれらを混在最適化できません。

唯一のことは、C *(無効にしない限り)がSSTableフラッシュ中に圧縮を使用することです。テーブルをどのように設計するかにより、圧縮率C *は大きく変わります。一例として、圧縮アルゴリズムは、文字列列をクラスタリングキーとして使用することにより大きな利益を得ます。小さすぎるmemtablesを持つと、各SSTableの圧縮率に影響する可能性があります。

+0

"圧縮アルゴリズムは、文字列列をクラスタリングキーとして使用することで大きな利益を得ます。" - そうですか? –

+0

@ChrisLohfink私はコンプレッサのエキスパートではありませんが、いくつかの圧縮アルゴリズムは、既に放出されたパターンを見て*一致するものを見つけることによって動作し、通常は距離が限られています(例:LZファミリはIIRCで64kオフセットします)。いくつかのMoveToFrontおよび/またはデルタコーディングを適用してデータの順序を悪用します。両方の手法の考え方は、コンプレッサーが最も使用されるシンボルをより少ないバイトでコーディングできるようにすることです。これらの長い文字列で並べられたSSTableを持つIMHOは、ランダムに(例えばUUIDで注文した場合のように)。これはすべて、圧縮されている実際のデータに依存します... – xmas79

関連する問題