【问题标题】:Spring Data Cassandra not allowing to fetch page 2 without pageStateSpring Data Cassandra 不允许在没有 pageState 的情况下获取第 2 页
【发布时间】:2018-09-25 09:11:57
【问题描述】:

我正在开发基于 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 并获取下一个?

如果为什么这个框架不允许获取其他页面?

有架构或技术原因吗? (文档没有提供这些信息。至少我们需要使用页面状态来获取下一个。)

【问题讨论】:

    标签: cassandra spring-data-cassandra


    【解决方案1】:

    Cassandra 仅通过获取下一页来支持分页。限制/偏移不适用。

    Cassandra 存储库支持分页和排序,以便对实体进行分页和排序访问。 Cassandra 分页需要分页状态才能仅向前导航页面。 Slice 跟踪当前的分页状态,并允许创建 Pageable 来请求下一页。

    也就是说,你的问题的答案

    这是否意味着 Spring 数据 Cassandra 设计为仅从第一页获取,如果我们想要下一页,我们是否必须缓存 pageState 并获取下一页?

    是的。

    Spring Data 中的分页假设通过限制/偏移进行分页,因为大多数支持的数据存储都遵循这种模式。 Cassandra 中的分页更遵循Iterator 风格。

    【讨论】:

    • 非常感谢您的快速回复和解决问题。
    • 嗨,您能否分享一下您为缓存 Cassandra 分页状态而实施的缓存方法步骤
    • 我无法将此 Spring Data 功能与此 docs.datastax.com/en/developer/java-driver/4.5/manual/core/… 协调一致。使用 Spring Data 是否只是一个限制,我们总是必须获取第 0 页,然后从那里移动,而使用 Java 驱动程序,我可以提供(非零)pageState? org.springframework.data.cassandra.core.query.CassandraPageRequest 是否计划将来支持非零页面?谢谢
    猜你喜欢
    • 2023-03-12
    • 2017-07-23
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多