2011-09-16 3 views
4

標準列ファミリの何千もの列を持つ行については、それらをスーパー列に分割するより優れた設計であることを示しています。これにより、読み取りは非常に効率的になりますロードするのではなく、与えられたスーパーカラム名の下でカラムをロードして返すだけで、何度もカラムを返す必要があります。誰でも確認してもらえますか?標準列ファミリ対スーパー列ファミリ

答えて

6

これは良いアドバイスではありません。この時点では、スーパーカラムが最適なソリューションであるユースケースは非常に少数です。新しいCompositeTypesは、歴史的に使用されているスーパーカラムのほとんどのためのより良いソリューションです。

これで、CompositeTypesが必要ないように思えます。非常に大きな列を読み取っている場合は、行全体を一度に戻すべきではないことは事実です。代わりに、連続したスライスで行の一部をフェッチする必要があります。

基本的には、一連のget_slice()を実行します。最初のものでは、列の数をたとえば1000に設定し、列の開始を ""に設定します。次に、その結​​果セット(Xと呼ぶ)から最後の列名をとり、列数が1000の別のget_slice()コールを作成します。このとき、列開始をXに設定します。戻す最初の列を破棄しますXになります)、クエリが1000行未満を返すまではget_slice()プロセス全体を繰り返します。これは、行の最後にヒットしたことを通知します。

列のサイズに応じて、一度に1000以上または1000未満をフェッチできます。

+0

1000個未満の列を返すクエリは、その旨を通知しないことがあります。私の経験から、返される列が少なくなる時がありました。それがゼロを返すまで読むべきです。とにかくもっと簡単なアルゴリズムでしょう。また、読める行数は列のサイズに依存するように指定して嬉しいです。私のカラムの中にはデータがたくさんあるので、たいてい100を使うことがあります。 –

0

多くの列がある場合、またはデータを索引付けする必要がある場合、1)スーパーCFサブ列は索引付けされず、2)サブ列スーパーカラムのサブカラムをすべてに逆シリアル化します。しかし、現在のコードベースでは制限がある可能性があります。http://wiki.apache.org/cassandra/CassandraLimitations

+0

複数の列とスーパー列を持つCQL CREATE TABLEの違いは何ですか?それは私と同等の気分だから... –

関連する問題