我在Java中使用Cassandra已经有一段时间了,发现我们可以限制结果集的大小,并且通过从应用程序端存储分页状态,我们可以在同一语句中重用该页面状态来从中获取数据以前回复的最后一条记录。例如,
ResultSet resultSet = session.execute("your query");
PagingState pagingState = resultSet.getExecutionInfo().getPagingState();
我们可以使用这个pagingState变量来获取下一批记录(基于设置的提取大小),如下所示。
Statement st = new SimpleStatement("your query");
st.setPagingState(pagingState);
ResultSet rs = session.execute(st);
这意味着Cassandra使用分页状态存储指向其索引数据的链接。我想了解是否存在任何超时期限,直到页面状态保持在cassandra数据库中,或者它保持链接(分页状态)保持活动直到会话关闭。我已经通过了Cassandra的官方文档,仍然找不到任何文档。
答案 0 :(得分:4)
幸运的是,没有与分页状态相关的超时,只有一个小警告。由于版本之间的事情可能会发生变化,因此内部分页状态不会包含查询文本的MD5,页面大小,使用的协议版本以及对表示最后一行读取的聚类键的引用(以及查询跨越分区时的分区键。
但是,无法保证分页状态可以跨协议版本工作,如java driver manual for paging中所述:
由于内部实现细节,PagingState实例不能跨本机协议版本移植。在以下情况中,这可能会成为一个问题:
- 您正在使用驱动程序2.0.x和Cassandra 2.0.x,因此使用本机协议v2;
- 用户为包含序列化分页状态的Web服务的链接添加书签;
- 您升级服务器堆栈以使用驱动程序2.1.x和Cassandra 2.1.x,因此您现在使用的是协议v3;
- 用户尝试重新加载他们的书签,但是使用协议v2序列化了分页状态,因此尝试重用它将失败。