我想存储来自传感器的聚合数据,这是我的卡桑德拉表模式计划
已更新
CREATE TABLE every_second_aggregate_signature(
device_id text,
year int,
month int,
day int,
hour int,
minute int,
second int,
signature map<text,counter>,
PRIMARY KEY ((device_id, year, month, day, hour, minute, second))
)WITH CLUSTERING ORDER BY (year DESC, month DESC, day DESC, hour DESC, minute DESC, second DESC);
签名数据采用增量值和动态值的形式,例如。
ts1 - {"4123sad" : 80, "djas10" : 99}
ts2 - {"4123sad" : 83, "djas10" : 103}
ts3 - {"4123sad" : 87, "djas10" : 198, "asfac9" : 281}
ts4 - {"4123sad" : 89, "djas10" : 201, "asfac9" : 540, "asd81" : 12}
问题是我知道cassandra不支持集合内的counter。是否有其他替代方法或解决方案来解决此问题?感谢您的帮助
答案 0 :(得分:1)
这里唯一的替代方法是将地图的“键”移到表的主键中。现在,您正在尝试像这样建模(据我了解):
create table counters (
ts timestamp primary key,
counters map<text, counter>
);
然后您需要将其更改为以下内容:
create table counters (
ts timestamp,
key text,
counter counter,
primary key (ts, key)
);
只需选择应该输入地图的所有值
select ts, key, counter from counters where ts = 'some value';
它将在单独的行中返回给定ts
的每一对密钥/计数器,因此您需要有一个将它们合并到地图中的代码...