Можем ли мы использовать пейджинг в Кассандре без использования состояния поискового вызова? Я имею в виду, что делать, если мы хотим, например, получить произвольный доступ (например, перейти на страницу 3) после первой страницы?Кассандра: как пропустить строки в пейджинге?
1
A
ответ
3
Есть трюк.
Представьте, что вы едите таблицу
CREATE TABLE (
partition uuid,
clustering uuid,
column1 text,
...
columnN text,
PRIMARY KEY((partition), clustering)
)
Для первой страницы с 10 строками:
SELECT * FROM table LIMIT 10;
На стороне клиента, сохранить значение раздела для последних строки, например 10th ряд. На второй странице (11 20-й строки):
SELECT * FROM table WHERE token(partition) > token('value_of_10th_partition') LIMIT 10;
Для третьей страницы (21-го по 30-й строке):
SELECT * FROM table WHERE token(partition) > token('value_of_20th_partition') LIMIT 10;
Это означает, что
- впервые, если вы хотите достичь страницы N, вам необходимо забрать все предыдущие N-1 страницы
- Вам необходимо сохранить Последнее значение раздела для каждой страницы должно быть доступно для доступа к следующей странице. Например, если вы хотите получить доступ к странице N ° 34, вам необходимо сохранить последнее значение раздела для страницы п ° 33
- этого метода делает не гарантии изоляции, например, в , тем не менее, если в Cassandra будут вставлены новые данные, то может добавить дополнительные записи на странице, чтобы страница № 30, например , не могла содержать те же строки после вставки новых данных. Использование Объект PagingState также не решает эту проблему. Это потому, что мы не создаем моментальный снимок каждой страницы (и мы не хотим делать , это слишком дорого), поэтому есть без изоляции.
Поскольку мы используем драйвер C# на сайте приложения, тогда манипулирование токеном недоступно. – Elnaz
'token()' является системной функцией CQL, поэтому он доступен для всех драйверов Cassandra, включая C# – doanduyhai