【发布时间】:2017-02-27 01:41:50
【问题描述】:
我正在考虑在 Java 应用程序中使用 Cassandra 处理时间序列数据。我还需要最后 n 分钟的平均值(和最小值/最大值)。
简单的方法是从客户端进行三个调用:
- 插入新值
- 选择最近 n 分钟的平均值、最小值和最大值
- 更新平均值
有没有更有效的方法来做到这一点?
第一步和第二步使用同一个分区,因此将在同一个节点上运行。因此,如果两个语句都可以在同一个请求中执行,则可以节省往返行程。但 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);
【问题讨论】: