【问题标题】:Paging SELECT query results from Cassandra in Spring Boot application在 Spring Boot 应用程序中从 Cassandra 分页 SELECT 查询结果
【发布时间】:2017-05-14 18:33:33
【问题描述】:

在我的研究过程中,我遇到了 Spring-Data-Cassandra 的这个 JIRA: https://jira.spring.io/browse/DATACASS-56

现在,根据上面的帖子,由于 Cassandra 的结构,目前 SDC 不支持 Spring App 中的分页。但是,我在想,如果我可以将整个行列表拉到 Java 列表中,我可以对该列表进行分页吗?我在 Spring 方面没有太多经验,但是当我认为可以做到这一点时,我是否缺少一些东西?

【问题讨论】:

    标签: spring spring-boot spring-data-jpa spring-data-cassandra


    【解决方案1】:

    Cassandra 不支持指向特定页面(限制/偏移)的分页,但会生成一个延续令牌 (PagingState),它是一组 bytes。拉取List 的记录会将所有记录加载到内存中,并可能耗尽您的内存(取决于数据量)。

    Spring Data Cassandra 1.5.0 RC1 在CassandraTemplate 中带有一个streaming API

    Iterator<Person> it = template.stream("SELECT * FROM person WHERE … ;", Person.class);
    
    while(it.hasNext()) {
       // …
    }
    

    CassandraTemplate.stream(…) 将返回一个在底层ResultSet 上运行的Iterator。 DataStax 驱动程序使用可配置的提取大小(默认为5000 行)进行批量提取。流式数据访问可以获取处理数据所需的尽可能多或尽可能少的数据。驱动程序和 Spring Data Cassandra 都不会保留数据,一旦从 Iterator 检索到获取的批量,底层 ResultSet 将自行获取下一个批量。

    另一种选择是直接使用ResultSet,这样您就可以访问PagingState,并自己完成所有的继续/分页业务。您将失去 Spring Data Cassandra 的所有更高级别的好处。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-14
      • 2018-02-14
      • 2020-08-06
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 2022-10-12
      相关资源
      最近更新 更多