Cassandraの列ファミリーの実際的な制限は何ですか?


10

Cassandraでは、数千を超える列ファミリーを持つことはお勧めしません。議論のために2,000としましょう。2,000を超えるタイプのデータを保持する必要がある場合、1つのアプローチは、複数の無関係なタイプのデータを各列ファミリーに分割することです。

たとえば、1つのCFにOrders、Invoices、およびCustomersを含めることができます。ただし、行キーが異なる場合(たとえば、オブジェクトタイプの接頭辞、つまり、1つのCFのキーにOrder|1234との両方を含めることができますCustomer|1234)。2番目のCFには、たとえば、Addresses、LineItems、およびOrde​​rTypeを含めることができます。このアプローチの基本的な実現可能性を考えると、それに対する実際的な制限は何ですか?たとえば、10,000種類すべてのオブジェクトを1つのCFに配置することの何が問題になっていますか?Cassandra wikiからわかる限り、CFのサイズに厳密な制限はありません。

回答:


6

私はファンではありません。両方に列が定義されたOrdersOrCustomersという名前のリレーショナルテーブルを作成するのと同じくらい良いアイデアです。フードの下のスパースセルストレージのため、Cassandraのストレージエンジンのペナルティはわずかに低くなりますが、それでも悪い習慣です。

これは、後でデータをマップ/削減したいときに噛み付きます。各タスクはすべてのデータをスキャンし、実際に関心のあるもの(顧客など)と一致しない行を除外する必要があります。そして、CassandraがCFごとに追跡する統計を理解する幸運。(「このCFは、注文データが原因で私のアプリケーションの80%のソースが読み取られるのですか?それとも組み合わされた顧客セッションが原因ですか?または、私が投入した他の5つのデータタイプですか?」)

絶対に数万または数十万のCFが確実に必要な場合は、それでも、このようにデータモデルを破壊するのではなく、アリーナ割り当てなしでCassandraを実行したいです。


答えてくれてありがとう、ジョナサン。最後の文を理解するために、アリーナの割り当てについて読む必要があります。アリーナ割り当ての使用は構成オプションですか?
Andrew Swan

または、最近アリーナ割り当てがCassandraに組み込まれた場合、構成可能な期間内にアクセスされなかった列ファミリーのアリーナの割り当てを解除するのはどれほど難しいでしょうか?これについてJIRAチケットをログに記録する価値はありますか?
Andrew Swan

1
Cassandraは、メモリのプレッシャーを軽減するためのフラッシュについてすでに賢いです。問題は、すべてがアクティブである最悪のシナリオです。
jbellis 2013年

2番目のリングを使用する唯一の解決策はどれですか。
Andrew Swan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.