2016-04-14 1 views
1

キャスアンドラのデータベースでは、私は10百万行のテーブルを持っています。通常のselectクエリを使用すると、データを取得するためにcassandraとの接続を1つしかできません。行番号で選択クエリを実行することは可能ですか?部分からキャシュンドラからデータを取得

E.g. Select * from abc where row = x to row = y ? 

私は10種類のスレッドを持つことができます。そのため、それぞれが100万行をフェッチする責任があります。可能であれば、クラスタにあるノードの数と同じ数のスレッドを作成する必要がありますか?

java datastaxドライバを使用して私のcassandraクラスタに接続しています。

答えて

2

行番号で選択クエリを実行できますか?

いいえ、ただし、パーティションキーのハッシュされたトークン値に基づいて範囲クエリを実行することは可能です。

6つのノードクラスタがあるとします。 Murmur3プライマリトークンは、6ノードのクラスタのための範囲を次のようになります。私はテーブルを持っている場合は

node start range    end range 
1)  9223372036854775808 to -9223372036854775808 
2) -9223372036854775807 to -5534023222112865485 
3) -5534023222112865484 to -1844674407370955162 
4) -1844674407370955161 to 1844674407370955161 
5)  1844674407370955162 to 5534023222112865484 
6)  5534023222112865485 to 9223372036854775807 

私のクエリ、pkeyのパーティション・キーとabcと呼ばれ、ノード2にそのテーブルのすべての行を照会したかったです次のようになります。

SELECT * FROM abc 
    WHERE token(pkey) > 9223372036854775808 
    AND token(pkey) <= -5534023222112865485; 

行全体の価値があまりにも多くある(と私はそれが可能になることを推測している)場合は、行数が管理可能になるまで、あなたのトークンの範囲を二分する上で動作することができます。 1000万行を選択することは、カッサンドラが特に優れているとは考えられていないことを覚えておいてください。

スレッド数については、試行錯誤が必要です。しかし、ノードごとに1つのスレッドは合理的な出発点のように聞こえる。

関連する問題