我想使用QueryBuilder (datastax)在cassandra中实现分页。例如,/api/5将获取限制为20的结果的第5页。据我所读,我们需要存储最后一个页面状态。是否可以直接访问特定的页面。基本上,对于极限x,偏移量y,卡桑德拉的等效值是多少?
这里主要关注的是性能(基于时间的)。
发布于 2020-02-12 15:37:54
所有查询都是由驱动程序分页的,您已经正确了。
application.conf
或语句中使用以下参数定义页面大小。datastax-java-driver.basic.request.page-size = 5000
ResultSet
返回对象中,您可以调用getAvailableWithoutFetching
来知道您在这个页面中有多少记录。这些记录存储在一个Iterable
中,当您到达页面的末尾时,驱动程序将为您获取下一页。驱动程序文档:https://docs.datastax.com/en/developer/java-driver/4.4/manual/core/paging/PagingState
,它是您可以存储和使用的参数,可以在第二个调用中使用完全相同的查询来直接访问页面X--但是不是您想要的为了使用限制/偏移量,我只需在ResultSet
中的记录上迭代,如下所示:
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
https://stackoverflow.com/questions/60187208
复制相似问题