Я думаю использовать Cassandra для данных временных рядов в приложении Java. Мне также нужен средний (и min/max) за последние n минут.Cassandra: значение вставки и среднее значение update/min/max
Простой подход, чтобы сделать три звонка от клиента:
- вставить новое значение
- выбрать среднее, минимальный и максимальный за последние п минут
- обновления среднего
Есть ли более эффективный способ сделать это?
Первый и второй шаги используют один и тот же раздел и, таким образом, будут работать на одном узле. Таким образом, может быть сохранено обратное путешествие, если оба оператора могут быть выполнены в том же запросе. Но BATCH не поддерживает выбор (насколько я понимаю).
Третий запрос включает в себя другой раздел (и, вероятно, другой узел). Преимущество использования BATCH состояло бы в том, чтобы обе таблицы оставались в синхронизации. И я думаю, что это также спасло бы клиента -> координатора в оба конца. Но BATCH не поддерживает передачу результатов от выбора до обновления (насколько я знаю).
create table metrics (
resource_name text,
metric_name text,
recorded_at timestamp,
value double,
primary key ((resource_name, metric_name), recorded_at)
) with clustering order by (recorded_at desc);
create table last_30m (
metric_name text,
resource_name text,
avg_value double,
min_value double,
max_value double,
primary key (metric_name, resource_name)
) with clustering order by (resource_name asc);
Спасибо за ответ. Сначала я проверю его, чтобы оценить производительность. – rwfbc