Java Cassandra分页在并发插入上的行为
我使用Cassanda 2.2使用java客户端和PagingState对大型结果集进行分页,如下所述: 这很有效,但我找不到任何有关Cassandra在搜索结果时插入新记录(或更新现有记录)时的行为的信息。这些新的或更改的记录是否包含在结果中,或者结果集是不可变的 用例是一个无状态web服务,客户机可以在其中查询大型结果集 编辑: 一般来说,ResultSet分页也有同样的问题(Cassandra在这里进行自动延迟获取)Java Cassandra分页在并发插入上的行为,java,cassandra,pagination,acid,nosql,Java,Cassandra,Pagination,Acid,Nosql,我使用Cassanda 2.2使用java客户端和PagingState对大型结果集进行分页,如下所述: 这很有效,但我找不到任何有关Cassandra在搜索结果时插入新记录(或更新现有记录)时的行为的信息。这些新的或更改的记录是否包含在结果中,或者结果集是不可变的 用例是一个无状态web服务,客户机可以在其中查询大型结果集 编辑: 一般来说,ResultSet分页也有同样的问题(Cassandra在这里进行自动延迟获取) EDIT2:据我所知,Cassandra不支持ACID,只支持AID事务
EDIT2:据我所知,Cassandra不支持ACID,只支持AID事务,因此我希望在处理resultset时这里会有一种隔离,因为实现这种隔离的成本太高。整个结果集不会保存在内存中,并且在将当前结果集发送到客户端时,下一页中要返回的行是未知的 这样做的一个有趣的结果是,它打破了批量更新保证,在文档中陈述如下: @BATCH@中属于给定分区键的所有更新都是单独执行的 关于这件事有一个公开的说法
还有一些性能方面的影响,因为在获取页面
n
时需要再次完成大量工作才能获取页面n+1
(例如打开和读取索引文件和数据文件)。“锡拉”(Scylla)是卡桑德拉(Cassandra)的替代品,我也参与了这项工作。@salyh那么,您尝试了哪些分页方法?如果在两个连续的页面请求之间发生插入,页面将返回不正确的数据,是否有解决方法,还是应该是乐观分页?