用于分页遍历所有行的Cassandra CQL方法

时间:2012-08-06 17:16:07

标签: cassandra thrift cql

我想以编程方式检查大型cassandra表中的所有行,并希望使用CQL。我知道我可以用thrift做到这一点,用multiget一次获得10,000行(或者很多行)并将最后检索到的键交给下一个multiget调用。但我查看了有关CQL选择的所有文档,似乎没有办法做到这一点。我已经设置了更高和更高的选择限制,并设置更高和更高的超时以匹配它。

是否有一种未记录的方式将起点交给CQL选择,还是只需要使用thrift API分解和重写我的代码?

2 个答案:

答案 0 :(得分:6)

结果大于和小于非直观但有用的行为(至少在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

答案 1 :(得分: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

相关问题