2015-10-05 1 views
7

я делаю пагинацию больших наборов результатов с Cassanda 2.2 с помощью клиента Java и PagingState, как описано здесь: https://datastax.github.io/java-driver/2.2.0-rc2/features/paging/Как Cassandra пагинация ведет себя на параллельных вставок

Это работает довольно хорошо, но я не могу найти информацию, как Cassandra ведет себя, когда , в то время как пейджинг через результаты, новые записи вставляются (или существующие обновляются). Являются ли такие новые или измененные записи включенными в результат или являются неизменными в результате?

Вариант использования - это веб-служба без состояния, где клиент может запрашивать большие результирующие наборы.

EDIT: Тот же вопрос для ResultSet подкачки вообще (Cassandra делает автоматический ленивым выборки здесь)

edit2: Насколько мне известно, Cassandra поддерживает не ACID но AID транзакции, поэтому я бы ожидать такой изоляции здесь, когда происходит через результирующий набор

ответ

5

Нет такой изоляции, поскольку это было бы слишком дорого реализовать. Весь результирующий набор не сохраняется в памяти, а строки, которые будут возвращены на следующей странице, неизвестны, когда текущий отправляется клиенту.

Одним из интересных следствий этого является то, что он нарушает гарантию обновления ПАРТИЯ, указано в документации, как:

Все обновления в @ сЕРИЙНОГО @, принадлежащих к данному ключу раздела выполняются в изоляции.

Существует один открытый issue об этом.

Есть также некоторые последствия для производительности, так как большая часть работы, выполненной для получения страницы n, должна быть выполнена снова, чтобы получить страницу n + 1 (например, открытие и чтение из файлов индекса и файлов данных). Scylla, замена для Cassandra, на которую я вхожу, работает на fixing this.

Смежные вопросы