我正在开发基于Apache Cassandra的Spring应用程序。我正在使用Spring Data Cassandra作为持久层。当我尝试按documentation中所述获取非零页面时,我收到IllegalArgumentException,说明无法为第一页(0)以外的索引页创建Cassandra页面请求。它被抛出,
public static CassandraPageRequest of(int page, int size) {
Assert.isTrue(page == 0, "Cannot create a Cassandra page request for an indexed page other than the first page (0).");
return of(page, size, Sort.unsorted());
}
图书馆的方法。
我做了违反Cassandra设计/使用原则的事情吗?
这是否意味着Spring数据Cassandra只能从第一页获取,如果我们想要下一页,我们是否必须缓存pageState并获取下一页?
如果为什么这个框架不允许获取其他页面?
是否存在架构或技术原因? (文档不提供这些信息。至少我们需要使用页面状态来获取下一个。)
答案 0 :(得分:2)
Cassandra仅通过获取下一页来支持分页。限制/抵消不适用。
Cassandra存储库支持对实体的分页和排序访问进行分页和排序。 Cassandra分页要求分页状态仅向前导航页面。一个Slice跟踪当前的分页状态,并允许创建一个Pageable来请求下一页。
那就是你问题的答案
这是否意味着Spring数据Cassandra只能从第一页获取,如果我们想要下一页,我们是否必须缓存pageState并获取下一页?
是的。
Spring Data中的分页假定通过限制/偏移进行分页,因为大多数支持的数据存储都遵循此模式。卡桑德拉的分页更多遵循Iterator
风格。