Cassandra 中的 PagingState 是否有超时期限?

AV9*_*V94 2 java pagination cassandra

我在 Java 中使用 Cassandra 有一段时间了,发现我们可以限制结果集的大小,并通过从应用程序端存储分页状态,我们可以在同一语句中重用该页面状态以从前一个记录中获取数据回复。例如,

ResultSet resultSet = session.execute("your query");
PagingState pagingState = resultSet.getExecutionInfo().getPagingState();
Run Code Online (Sandbox Code Playgroud)

我们可以使用这个 pagingState 变量来获取下一批记录(基于设置的获取大小),如下所示。

Statement st = new SimpleStatement("your query");
st.setPagingState(pagingState);
ResultSet rs = session.execute(st);
Run Code Online (Sandbox Code Playgroud)

这意味着 Cassandra 使用分页状态存储指向其索引数据的链接。我想了解在页面状态保留在 cassandra 数据库中之前是否存在任何超时期限,或者在会话关闭之前保持链接(分页状态)处于活动状态。我已经浏览了 Cassandra 的官方文档,仍然找不到任何文档。

And*_*ert 5

幸运的是,没有与分页状态相关的超时,有一个小警告。由于版本之间的情况可能会发生变化,因此无需详细说明,内部分页状态包含查询文本的 MD5、页面大小、使用的协议版本以及对表示最后一行读取的集群键的引用(如果查询跨越分区,还有分区键)。

但是,不能保证分页状态可以跨协议版本工作,如分页java 驱动程序手册中所述:

由于内部实现细节,PagingState 实例不能跨本地协议版本移植。在以下情况下,这可能会成为问题:

  • 您正在使用驱动程序 2.0.x 和 Cassandra 2.0.x,因此使用本机协议 v2;
  • 用户为包含序列化分页状态的 Web 服务的链接添加书签;
  • 您升级服务器堆栈以使用驱动程序 2.1.x 和 Cassandra 2.1.x,因此您现在使用的是协议 v3;
  • 用户尝试重新加载他们的书签,但分页状态是使用协议 v2 序列化的,因此尝试重用它会失败。