首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在cassandra中实现分页?

如何在cassandra中实现分页?
EN

Stack Overflow用户
提问于 2020-02-12 11:21:01
回答 1查看 2.1K关注 0票数 1

我想使用QueryBuilder (datastax)在cassandra中实现分页。例如,/api/5将获取限制为20的结果的第5页。据我所读,我们需要存储最后一个页面状态。是否可以直接访问特定的页面。基本上,对于极限x,偏移量y,卡桑德拉的等效值是多少?

这里主要关注的是性能(基于时间的)。

EN

回答 1

Stack Overflow用户

发布于 2020-02-12 15:37:54

所有查询都是由驱动程序分页的,您已经正确了。

  • 您可以在application.conf或语句中使用以下参数定义页面大小。

代码语言:javascript
运行
复制
datastax-java-driver.basic.request.page-size = 5000

  • ResultSet返回对象中,您可以调用getAvailableWithoutFetching来知道您在这个页面中有多少记录。这些记录存储在一个Iterable中,当您到达页面的末尾时,驱动程序将为您获取下一页。驱动程序文档:https://docs.datastax.com/en/developer/java-driver/4.4/manual/core/paging/
  • You可能听说过PagingState,它是您可以存储和使用的参数,可以在第二个调用中使用完全相同的查询来直接访问页面X--但是不是您想要的

为了使用限制/偏移量,我只需在ResultSet中的记录上迭代,如下所示:

代码语言:javascript
运行
复制
public Stream<Stock> findAllBySymbol(
      @NonNull String symbol,
      @NonNull Instant start,
      @NonNull Instant end,
      long offset,
      long limit) {
    BoundStatement bound = findBySymbol.bind(symbol, start, end);
    ResultSet rs = session.execute(bound);
    Stream<Row> stream = Stream.iterate(rs.one(), Objects::nonNull, row -> rs.one());
    return stream.skip(offset).limit(limit).map(rowMapper);
  }

来源。您可能会注意到,在回购中,您也有用于反应性和异步性的示例:https://github.com/datastax/cassandra-reactive-demo/blob/master/1_sync/src/main/java/com/datastax/demo/sync/repository/SyncStockRepository.java#L119

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60187208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档