Выборка диапазона ключей с общим префиксом в Cassandra

#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>    
  ...