#cassandra #hector
#кассандра #гектор
Вопрос:
Я хочу получить все строки, имеющие общий префикс, используя hector API. Я немного поиграл с RangeSuperSlicesQuery, но не нашел способа заставить его работать должным образом. Работают ли параметры диапазона ключей с подстановочными знаками и т.д.?
Обновление: я использовал ByteOrderedPartitioner вместо RandomPartitioner, и он отлично с этим работает. Это ожидаемое поведение?
Ответ №1:
Да, это ожидаемое поведение. В RandomPartitioner строки хранятся в порядке хэша MD5 их ключей, поэтому, чтобы получить значимый диапазон ключей, вам нужно использовать разделитель, сохраняющий порядок, такой как ByteOrderedPartitioner.
Однако у использования ByteOrderedPartitioner или OrderPreservingPartitioner есть недостатки, которых вы обычно можете избежать, используя немного другую модель данных и RandomPartitioner.
Ответ №2:
Чтобы уточнить приведенный выше ответ, вам следует рассмотреть возможность использования имен столбцов в качестве вашего «общего префикса» вместо ключа. Затем вы можете либо использовать фрагмент столбца, чтобы получить все имена столбцов в определенном диапазоне, либо вы могли бы использовать вторичный индекс, а затем выполнить индексированный фрагмент для всех ключей с этим именем столбца.
Column slice example:
Key (without prefix)
<prefix1> : <data>
<prefix2> : <data>
...
Secondary index example:
Key (with or without prefix)
"prefix" : <the_prefix> <-- this column is indexed
otherCol1 : <data>
...