Пейджинг результатов запроса SELECT из Cassandra в приложении Spring Boot

Во время своего исследования я наткнулся на эту JIRA для Spring-Data-Cassandra: https://jira.spring.io/browse/DATACASS-56

Теперь, согласно сообщению выше, в настоящее время SDC не поддерживает разбиение на страницы в приложении Spring из-за структуры Cassandra. Однако я думаю, что если я могу вывести весь список строк в список Java, могу ли я разбить этот список на страницы? У меня нет большого опыта в Spring, но что-то мне не хватает, когда я предполагаю, что это можно сделать?


person arshellium    schedule 30.12.2016    source источник


Ответы (1)


Cassandra не поддерживает разбиение на страницы в смысле указания на определенную страницу (ограничение / смещение), но генерирует токен продолжения (PagingState), который представляет собой набор bytes. Вытягивание List записей загрузит все записи в память и, возможно, исчерпает вашу память (в зависимости от количества данных).

Spring Data Cassandra 1.5.0 RC1 поставляется с API потоковой передачи в CassandraTemplate:

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

while(it.hasNext()) {
   // …
}

CassandraTemplate.stream(…) вернет Iterator, который работает с базовым ResultSet. Драйвер DataStax использует настраиваемый размер выборки (по умолчанию 5000 строк) для массовой выборки. Доступ к потоковым данным позволяет получать столько или меньше данных, сколько требуется для обработки данных. Данные не сохраняются ни драйвером, ни Spring Data Cassandra, и как только полученный массив будет извлечен из Iterator, базовый ResultSet сам получит следующий массив.

Другой альтернативой является прямое использование ResultSet, что дает вам доступ к PagingState и самостоятельное выполнение всех операций по продвижению / пейджингу. Вы потеряете все преимущества Spring Data Cassandra более высокого уровня.

person mp911de    schedule 30.12.2016