2015-01-28 2 views
1

Позволяет рассмотреть следующую таблицу, взятую из http://planetcassandra.org/blog/getting-started-with-time-series-data-modeling/
Cassandra 2.0.11 - счетчик колонки для разделения ключа

CREATE TABLE temperature 
(
    weatherstation_id text, 
    event_time timestamp, 
    temperature text, 
    PRIMARY KEY (weatherstation_id,event_time) 
); 

weatherstation_id Так это ключ раздела и event_time является столбцом кластеризации.
Данные загружаются в эту таблицу, а затем мы проводим запрос:

SELECT COUNT(1) FROM temperature WHERE weatherstation_id = '1234ABCD' 

Поэтому на самом деле мы спрашиваем для числа столбцов в базовой строке хранения Cassandra.

1) Это операция O (1)?
2) Если нет - как достигать O (1) в подсчете столбцов в строке хранения cassandra? Использовать счетчики?

(я использую Cassandra v2.0.11)

Спасибо

ответ

3

Это не O (1) операции, так как он должен сканировать раздел и подсчитать количество столбцов. Если вам нужен постоянный счет времени, вам придется отслеживать его каким-то другим способом. Вы можете использовать столбцы счетчиков, но сначала вы должны прочитать this.

+0

Я очень удивлен, что количество столбцов внутри раздела не сохраняется в метаданных раздела или что-то в этом роде –

+1

@fuggy_yama Хранение номера столбца не помогает. Данные для раздела потенциально могут быть распределены между несколькими SSTables и Memtables, и подсчеты должны быть объединены. К сожалению, вы не можете просто добавить эти подсчеты вместе, поскольку одни и те же столбцы могут существовать в нескольких местах. –

+0

Хорошая точка @MichaelMior –

0

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

+0

звучит нормально (в моем случае 100% точные подсчеты не нужны), но для этого требуется выполнение запланированного задания хаоп, чтобы подсчитать, что статистика - это рабочие задания adoop? –

+1

Работы Hadoop могут быть дорогими, если обрабатываемые таблицы являются большими. Если вы делаете roll ups, вы хотите избежать повторного сканирования одних и тех же данных при каждом обновлении. Существуют и другие подходы, помимо Hadoop, такие как искра. –

+0

В частности, вы должны посмотреть Spark Streaming, что позволит вам обновлять счетчики в течение определенного времени. –

Смежные вопросы