2016-06-17 2 views
0

У меня есть таблица Кассандры, как показано ниже:Как выполнить несколько запросов в одном пакете на Кассандре

create table experience.userstats (stream varchar, user varchar, computer varchar, experience varchar, amount int, primary key (experience, stream, user, computer);

Я использую штормовые болты Apache для создания этих записей в Кассандру из носика очереди.

Я хочу генерировать статистику агрегатов и отображать счетчик для разных событий для данного потока в виде круговой диаграммы. Например, 30% удовлетворены, 40% смешанны и 30% неудовлетворены.

Поскольку я не могу обновлять счетчики в Интернете, я использую Clock spout (таймер) для чтения этих данных и создания счетчиков в новую таблицу. Но Кассандра не поддерживает групповые предложения, и поэтому я должен прочитать три раза, чтобы получить счетчик для каждого опыта, как показано ниже.

select count(*) from experience.userstats where experience='satisfied' and stream='xyz'; 

select count(*) from experience.userstats where experience='unsatisfied' and stream='xyz'; 

select count(*) from experience.userstats where experience='mixed' and stream='xyz'; 

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

Есть ли способ, который я могу выполнить над тремя операциями select в одной партии? Или вы могли бы предложить альтернативный подход к дизайну?

+0

http://docs.datastax.com/ru/cql/3.1/cql/cql_reference/batch_r.html –

+0

Он поддерживает только dml no? – pavybez

ответ

0

вы можете использовать

ПО

отношение оператора как это,

SELECT COUNT (*) FROM userstats WHERE опыт IN ('смешан', 'Неудовлетворенный',» удовлетворен) И поток = 'xyz';

+0

Это даст счет для всех переживаний. Мне нужно рассчитывать на каждый опыт. – pavybez

0

Выполнение счета (*) даст вам время простоя. Почему бы вам не использовать поле счетчика и просто увеличить его при вставке? Таким образом вы будете просто запрашивать одно значение. Распределенные счетчики улучшены в версии 2.1 и более поздних версий, и они отлично работают.

+0

Спасибо за подсказку. Я избегу счет count (*), но мне нужно использовать счетчики, поэтому вам придется создавать новые таблицы для поддержки этого счетчика. – pavybez