6

したがって、Cassandra には自動ロード バランシングがないことがわかります。これは、順序付けされたパーティショナーを使用するときに表示されます (行のグループの値の特定の共通範囲は、比較的少数のマシンに格納され、ほとんどのクエリを処理します)。 )。
Cassandra データ モデルを設計する際のベスト プラクティスは何ですか?

私はまだ Cassandra とその仕組みに慣れていません。この問題を回避して、範囲クエリを引き続き実行するにはどうすればよいでしょうか? キーにハッシュを追加することについて、上記の回答(リンクされたURL)のアイデアは実際には得られませんでした。

4

3 に答える 3

8

他の投稿で述べたように、Cassandra 0.5は半自動の負荷分散をサポートしています。この場合、ノードに負荷分散を指示するだけで、トークンリングの混雑した場所に自動的に移動します。

これはhttp://wiki.apache.org/cassandra/Operationsでカバーされています

于 2009-12-17T15:02:40.203 に答える
4

この問題は cassandra-user メーリング リストで取り上げるのが一番だと思います。そこに人がいます。

Cassandra にはまだ自動負荷分散機能がありませんが、それほど遠くない将来に機能する可能性があります。0.5 ブランチでは、これが可能になる可能性があります。

基本的に、すでに実行中のシステムでノードをブートストラップするときは、リング内で最適な負荷分散が行われる場所を見つけて、そこに配置する必要があります。ノードを 1 つずつ追加する場合 (つまり、1 つのノードがブートストラップを完了するのを待ってから別のノードを追加する場合)、鍵の配布が時間の経過とともにあまり変化しない限り、それはかなりうまく機能するはずです。

ただし、キーは時間の経過とともに変化する可能性があるため (特に時間ベースの場合)、回避策が必要になる場合があります。

何を範囲スキャンするかによって異なります。キーの一部のみを範囲スキャンする必要がある場合は、範囲スキャンしたくないビットをハッシュし、それをキーの最初の部分として使用できます

ここで「パーティション」という用語を使用して、範囲スキャンしたくないキーの部分を参照します

function makeWholeKey(partition, key) {
   return concat(make_hash(partition), partition, key);
}

特定のパーティション内のキーを範囲スキャンする場合は、makeWholeKey(p,start) と makeWholeKey(p,end) の間で範囲スキャンを行うことができます。

しかし、パーティションをスキャンしたい場合は、運が悪いです。

しかし、make_hash() 出力の範囲に均等に分散されたトークンをノードに持たせることができ、均等に分散されたデータを取得できます (十分なパーティションがあり、すべてが 1 つまたは 2 つのハッシュ値にまとまらないと仮定します)。

于 2009-11-20T12:18:51.683 に答える