Кассандра: Как выполнить разбиение на страницы с помощью n-го ключа строки, используя RangeSlicesQuery? - PullRequest
0 голосов
/ 10 января 2012

Как выполнить разбиение на страницы с помощью n-го ключа строки, используя RangeSlicesQuery?

Данные основаны на RandomPartitioner, и обратная опция в функции setRange представляется применимой только для столбцов, а не для строк. (http://tinyurl.com/73tncn3)

Пример:

row_key1

row_key2

row_key3

row_key4

row_key5

row_key6

  • Установка endkey = row_key4, reverse = true & count row = 2 дает следующий вывод.

Ожидается:

row_key3

row_key4

Получено:

row_key1

row_key2

  • Установка startkey = row_key4, reverse = true & count row = 2 дает следующий вывод.

Полученное

row_key4

row_key5

1 Ответ

1 голос
/ 10 января 2012

При использовании RandomPartitioner эффективный порядок, в котором Cassandra хранит строки, является случайным.Поэтому вы не можете делать срезы диапазона так, как вы ожидаете.

Что вам нужно сделать, так это материализовать ваше представление в строке и использовать какой-то вычисленный интервал для ключа строки.Например, ключ строки может быть реальным ключом строки / 10, и тогда строка может содержать 10 реальных строк:

0 -> {row_key1 : v1, row_key2: v2, ...}
1 -> {row_key10: v10, row_key11: v11, ...}
and do on.

Чтобы выполнить свой запрос сейчас, вы делаете срез get для строки 0,из столбцов 'row_key4' ...

Теперь вы можете спросить, "как насчет моих ключей столбцов"?Для этого вы должны использовать составные имена столбцов.Например, что-то, что изначально выглядело так:

row_key1 -> {column1: v1, column2: v2, ...}

Теперь выглядело бы так:

0 -> {[row_key1, column1]: v1, [row_key2, column2]: v2, ...}
and so on.

HTH

Том

...