Агрегация и объединение данных Cassandra

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

Используете ли вы достаточно новую версию для использования определяемых пользователем агрегатов (UDA / UDF)? Какая у вас модель данных

Chris Lohfink 22.10.2018 07:49

Упрощенная версия - СОЗДАТЬ ТАБЛИЧНЫЕ ТОЧКИ (id bigint, objid bigint, ts timestamp, avg double, last double, max double, min double, PRIMARY KEY ((id), objid, ts)) WITH compaction = {'compaction_window_size': ' 7 ',' compaction_window_unit ':' DAYS ',' class ':' org.apache.cassandra.db.compaction.TimeWindowCompactionStra‌ tegy '} и gc_grace_seconds = 86400;

RJtokenring 22.10.2018 12:34
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
0
2
594
1

Ответы 1

Материализованные представления

Использование материализованных представлений в кассандре довольно ограничено:

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

  • агрегатные функции, такие как avg, использовать нельзя

  • GROUP BY не допускается

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

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

Ручное решение

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

Индексы

Совершенно другой подход к свертке - использовать Элассандра для индексации временного столбца. Мы создадим вторичный индекс elasticsearch и будем синхронизировать его автоматически. Затем используйте встроенный API elasticsearch для запроса в разных временных масштабах, используя агрегирование гистограммы даты.

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

Другие вопросы по теме