2

大きなcassandraテーブルのすべての行をプログラムで調べたいので、CQLを使用したいと考えていました。multigetを使用して一度に10,000(またはそれ以上)の行を取得し、最後に取得したキーを次のmultiget呼び出しに渡すことで、これを節約して行うことができることを私は知っています。しかし、私はCQL selectに関するすべてのドキュメントを調べましたが、これを行う方法はないようです。選択制限をどんどん高く設定し、それに合わせてタイムアウトをどんどん高く設定することにしました。

開始点をCQLselectに渡すための文書化されていない方法はありますか、それともthrift APIを使用してコードを分解して書き直す必要がありますか?

4

2 に答える 2

7

非常に直感的ではありませんが、有用な動作があります(少なくともCQL2では、まだCQL3をチェックしていません)。実際には、キー値ではなくトークンを比較します。次に例を示します。

> create table users (KEY varchar PRIMARY KEY, data varchar);
> insert into users (KEY, 'data') values ('1', 'one');
> insert into users (KEY, 'data') values ('2', 'two');
> insert into users (KEY, 'data') values ('3', 'three');
> insert into users (KEY, 'data') values ('4', 'four');
> select * from users;
   3 | three
   2 |   two
   1 |   one
   4 |  four
> select * from users LIMIT 1;
   3 | three
> select * from users WHERE KEY > '3' LIMIT 1;
   2 |  two
> select * from users WHERE KEY > '2' LIMIT 1;
   1 |  one
> select * from users WHERE KEY > '1' LIMIT 1;
   4 | four
于 2012-08-09T18:02:05.747 に答える
0

これをチェックしてください:http ://wiki.apache.org/cassandra/FAQ#iter_world

手動でプログラムする必要があります。たとえば、後続の各クエリは、前のクエリの最後の結果である開始点を提供する必要があります。この開始ポートを使用すると、限られた量の結果を返すスライスクエリを作成できます。

たとえば、次の列名を持つ行があります。

A1、A2、A3、B1、B2、B3、B4、B5、B6、C4、C5、D1、D2、D4、E2、E23、E4、E5、E6、E7

ここで、それを繰り返します。各応答には3つの結果があります。

スライス1)開始: ""、終了: ""、制限:3-> A1、A2、A3
スライス2)開始: "A3"、終了: ""、制限:3-> B1、B2、B3
スライス3)開始: "B3"、終了: ""、制限:3-> B4、B5、B6
スライス4)開始: "B6"、終了: ""、制限:3-> C4、C5、D1

于 2012-08-07T10:42:32.537 に答える