cassandra - 在 cassandra 集合内存储计数器
问题描述
我想存储来自传感器的聚合数据,这是我的 cassandra 表架构计划
更新
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 不支持集合内的计数器。是否有任何替代方法或解决方案来解决这个问题?谢谢你的帮助
解决方案
这里唯一的替代方法是将映射的“键”移动到表的主键中。现在你正在尝试像这样建模(据我所知):
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
,因此您需要有一个将它们合并到映射中的代码...
推荐阅读
- swift - 在两个视图之间添加约束时要扩展哪个视图
- c# - C# ASP 通用处理程序 - 回调内部的响应问题
- javascript - 使用JQuery获取最后一个输入字段的输入值
- vba - Excel 代码中的应用程序定义或对象定义错误
- react-native - “RCTCustomWebView”的不变违规本机组件不存在
- android - 现在我想使用 ArrayAdapter 将列表视图的特定数据表单显示到另一个列表视图中
- javascript - 我如何删除我输入的最后一个元素,如果我想要所有元素?
- kotlin - How to Resolve Function Template Generics for Signal/Slot System?
- javascript - How do I hide NavBar of my website when using in mobile with reactjs?
- crystal-reports - 将多个列值连接成一个字符串 - Crystal Repot 公式