2014-02-05 1 views
0

Ниже представлен образец моего Cassandra CF.Как получить список столбцов из одной строки в Cassandra?

 column1   column2   column3    ...... 

row1: Имя: Абай, значение: 10 имя: Benny, значение: 7 имя: Catherine, значение: 24 ........ ........

ComparatorType: utf8

Как я могу извлечь столбцы с именем ('Абай', 'Джон', 'питер', 'шестигранник') из этой строки в одном запросе с использованием Hector API. Количество имен в списке может меняться каждый раз. Я знаю, что могу получить их в отсортированном порядке с помощью SliceQuery. Но есть случаи, когда мне нужно случайно получать данные, как я упоминал выше. Пожалуйста, помогите мне.

+0

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

+0

На самом деле, мой обычный запрос был бы отсортированным, что можно сделать с помощью SliceQuery.setRange(). Но в некоторых случаях мне нужно получить случайный список столбцов из этой строки. Выполняет ли запрос случайного набора столбцов из строки ухудшает производительность? Я использую выровненное уплотнение для этого ср. –

+0

Сколько столбцов вы обычно имеете в строке? –

ответ

0

По вашему запросу у вас есть два варианта.

  1. Если вам нужно только выполнить этот запрос изредка, вы можете получить все столбцы для строки и отфильтровать их на клиенте. Если у вас не более нескольких тысяч столбцов, это должно быть нормально для случайного запроса.

  2. Если вам нужно выполнить это часто, вы захотите записать данные, которые вы можете запросить, используя имя в качестве ключа. Это, вероятно, означает, что вам придется дважды записывать данные в два CF, где один находится по вашему текущему ключу, а другой - по имени. Это обычная тактика Кассандры.

+0

Ну, у меня уже есть имя в качестве компаратора столбцов. Я использую slicequery.setColumnNames (name1, name 2, ....) для чтения из этой строки. Будет ли он работать хорошо? Большое спасибо за то, что нашли время, чтобы ответить на мой вопрос :) –

+0

Проблема в том, что вы будете много искать, и вы не можете распараллелить его. Если каждое имя имеет ключ, вы можете запускать параллельную передачу напрямую против ключа. –