从Cassandra加载数据



我使用的是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

相关内容

  • 没有找到相关文章