Все запросы выполняются драйвером, вы уже правы.
- Вы можете определить размер вашей страницы с помощью следующего параметра в
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 - но это не то, что вам нужно.
до go с ограничением / смещением. Я бы просто перебрал записи в 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