【发布时间】:2015-11-26 18:37:03
【问题描述】:
我正在构建一个使用 Cassandra 作为数据存储的应用程序,它从大量传感器捕获数据并允许不同的监控组件监控这些传感器。
例如,一个服务器机房可能有一个温度传感器,而 10 个不同的服务器监控组件可能会从该传感器接收值。同样,监控组件将接收来自多个传感器的数据。
我的(非常简化的)概念架构类似于:
我需要运行以下查询:
- 单个传感器的历史值
- 监控组件上每个属性的最新值
这是我遇到的第二个问题。
当测量到达时,我只知道传感器 ID、时间戳和值。如何建模一个表格,让我可以在 Monitor 上保留每个属性的当前值?
我试过下表:
CREATE TABLE monitor_subscriptions (
sensor_id uuid,
monitor_id uuid,
attribute text, # e.g. 'Temperature'
timestamp timestamp,
value double,
PRIMARY KEY (sensor_id, monitor_id, attribute)
);
我试图做的是更新订阅该传感器的每个监视器的时间戳/值,但显然以下查询不起作用,因为我没有指定 monitor_id 或 attribute:
UPDATE monitor_subscriptions
SET timestamp = ?, value = ?
WHERE sensor_id = ?;
不过,在我收到新测量值时,我只知道sensor_id、timestamp 和value。
【问题讨论】:
-
对于多对多关系,您必须添加一个额外的表,并且必须将两个表都连接到这个新创建的表才能正常工作
标签: database-design cassandra cql