我使用的是Cassandra 1.2.12,我想使用Java代码从Cassandra加载数据,但是我被迫在查询中使用limit。
使用DataStax API从Cassandra获取数据
让我们假设keyspace as 'k'
和columnfamily as 'c'
,在某些条件下从c读取数据,导致1000万条记录,因为我得到time-out exception
,我将其限制为10000,和i know that i cant limit like 10001 to 20000....
,我想加载完整的1000万条记录,我如何解决这个问题?
你要问的是所谓的分页,你必须用WHERE key > [some_value]
编写查询来设置你想要返回的每个切片的起始边界。要获得要使用的正确值,您需要查看前一个切片返回的最后一行。
如果你不处理数字,你可以使用token()
函数来做范围检查,例如:
SELECT * FROM c WHERE token(name) > token('bob')
如果按分区键分页,也可能需要 token()
,这通常不允许切片查询。例如(改编自Datastax文档):
CREATE TABLE c (
k int PRIMARY KEY,
v1 int,
v2 int
);
SELECT * FROM c WHERE token(k) > token(42);
从Cassandra加载所有数据不是一个好的选择。使用Kundera(支持datastax java驱动程序),我知道可以将maxResults设置为Integer。MAX_VALUE,它将在检索数据时排除LIMIT关键字。
正如Daniel所说,可能您正在寻找的是"分页",为此使用token()函数并以编程方式处理每页记录的数量。我的意思是,高级api应该考虑这样的事情,比如在需要分页的情况下隐式地应用令牌。
HTH,vivek