我正在使用Cassandra 1.2.12,我想使用Java代码从cassandra加载数据,但我不得不在查询中使用限制。
使用DataStax API从Cassandra获取数据。
让我们假设keyspace as 'k'
和columnfamily as 'c'
,在某些条件下从c读取数据,这会导致1000万条记录,因为我得到time-out exception
我将它限制为10000,{{1我想加载完整的1000万条记录,我该如何解决这个问题。?
答案 0 :(得分:1)
您所询问的内容称为分页,您必须使用WHERE key > [some_value]
编写查询,以便为要返回的每个切片设置起始边界。要获得正确的值,您需要查看上一个切片返回的最后一行。
如果您不处理数字,可以使用函数token()
进行范围检查,例如:
SELECT * FROM c WHERE token(name) > token('bob')
如果您通过分区键进行分页,则可能还需要 token()
,这通常会禁止切片查询。例如(改编自Datastax documentation):
CREATE TABLE c (
k int PRIMARY KEY,
v1 int,
v2 int
);
SELECT * FROM c WHERE token(k) > token(42);
答案 1 :(得分:0)
从Cassandra加载所有数据不是一个好选择。使用Kundera(支持datastax java驱动程序),我知道可以将maxResults设置为Integer.MAX_VALUE,这将在检索数据时排除LIMIT关键字。
正如丹尼尔所说,你可能正在寻找的是“分页”,使用token()函数并以编程方式处理每页的记录数。恕我直言,高级别的apis应该注意在需要分页的情况下隐式应用令牌。
HTH, -Vivek