2017-05-18 7 views
1

私はCassandraを学び、パーティション/クラスタキーに関する質問があります。簡単な質問のためのCassandraパーティションキー

私が最後の6/12ヶ月、業界の枝のように、パフォーマンスを共有するためにデータを格納するテーブルを持って、名前など

テーブルは次のようになります。

cassandra table

-kursは、現在の株価を表します。
-perf12パフォーマンスは過去12ヶ月、perf 6は最後の6です。
-brancheは業界の支店です。

今、私は可能な限り効率的な(パフォーマンス)として、次のクエリを実行します:

-read /ライト現在の株価
は同じ枝にあるすべての企業の平均株価を-calculateビジネスの

どのパーティションキーを使用するようアドバイスしますか?

ありがとうたくさんの人

答えて

1

これは、どの情報をリクエストする必要があるかによって異なります。あなたがブランチと会社の名前を知っているなら、プライマリキーを置くことができます:パーティションキーとしてのブランチとクラスタリングキーとしての名前。

あなたが持つ最初のクエリ持つことができる方法
primary key ((branch), name) 

select kurs from table where branch =? and name =?; 

、あなたが唯一のパーティションキーを指定し、平均値を返すためにaggreagate関数を作成することができます第二1:

select avg(kurs) from table where branch = ? 

またはお客様のクライアントコードで計算してください。

は、回答メイトのためCreating User-Defined Aggregate Function (UDA)Cassandra Aggregates - min, max, avg, group

+0

感謝を見てみましょう。プライマリキーとしてIDを取得するだけでパフォーマンス上の利点がありますか?私は必要な機能のためのcqlのクエリを知っていた、それはちょうどパーティションのキーは、パフォーマンスの利点を持っているのです – uhmdunnolol

+0

パーティションキーは重要な役割を果たすでしょう:それはあなたのデータが格納されるノードを定義します。また、上記のクエリは機能しません。データを再設計する必要があります。しかし、私はブランチが良いアプローチだと思います。なぜなら、同じブランチ・オム・ノードから同じノードを持つ企業になるため、両方のクエリが良いパフォーマンスを持つからです。しかし、ブランチ内の企業の量が不均衡な場合(ブランチの企業が多すぎ、他の企業が少なすぎる場合)、多くのデータを持つノードやそれ以外の方法のノードにつながる可能性があります。 –