2017-04-10 13 views
1

ランダムに生成された一意のIDを使用すると、 カーディナリティがかなり大きくなることは間違いありませんか?パーティションキーのカーディナリティとは何ですか?

5つのカテゴリ値のように、カーディナリティーが低いキーがあり、それを配布したい場合は、パーティションキーをコンポジットキーにすることをお勧めします。

しかし、これは、そのキーのすべてのレコードを取得するために、クエリで複合キーのすべての部分を指定する必要があります。

この場合でも、生成されたトークンは同じノードになる可能性があります。

データが配信されることを保証するコンポジットキーの追加列を決定する方法はありますか?

答えて

1

実際には、必要に応じてデータにアクセスできるように、「cassandra」でパーティションキーを「既知」にしたいと思っています。私はあなたがパーティション化キーに大きな基数を言うとき、あなたが何を意味するのか分かりません。クラスタには多くのパーティションがあります。これは通常o.kです。

クラスタの周りにデータを配布する場合。人工の列を使用することができます。そして、このアプローチはバケツと呼ばれることもあります。基本的に、100k +を維持したい場合、または100万+のバージョンを決して使用しない場合は、o.kです。このデータをパーティションに分割します。

一部の人々は単にトリックを使用し、データを挿入するときに人工バケット列をパーティションに追加します...ランダム(1-10)とし、データを読み込んだときに10個のクエリin演算子を使用し、データをフェッチしてクライアント側でマージします。このアプローチには、クラスタ内に「ホット・ロー」の出現を防止するという点で多くの利点があります。

すべてのキーの可能性は、1/NUM_NODESと同じノードで終了する可能性があります。だから私はこれがほとんどあなたがあまり心配するべきではないと言うでしょう。パーティションの数がクラスタのノード数より小さい場合を除きます。

基本的には、追加の列ランダム(既述)または入力データに基づいた何らかの関数の2つの選択肢があります。つまり、時系列データを使用する場合は、そのデータに基づいて月を計算することができますあなたが挿入しようとしているものをバケットに入れてください。あなたがデータを取得しているとき、あなたは知っています... o.k.私は2016年5月に何かを探しています。その後、適切なバケットを選択する方法を知っています。

関連する問題