我正在工作的一个系统需要存储设备24/7发送的字符串流。例如,一个具有id 'ID‘的设备每10秒发送一个不同的字符串。因此,我需要存储以下数据项:
('ID', t, t+10, somestring)我们谈论的是成千上万的设备,也就是说,数亿的数据集。
最重要的查询是:
Query(id, start, end) ==> list of strings您建议如何存储数据?你会推荐哪个数据库?
发布于 2016-10-14 16:08:00
对卡桑德拉来说,这是非常直接的。
CREATE TABLE device_strings (
id text,
year_month_day text,
start timestamp,
end timestamp,
value text,
PRIMARY KEY ((id, year_month_day), start, end)
);这意味着每个ID/日都有一个分区(不能让它们无限增长)。这意味着在查询中,如果开始/结束跨越一天,则可能需要多次阅读。
发布于 2016-10-13 22:21:33
这是timeSeries数据,而卡桑德拉可能是适合TimeSeries类型数据的。在Cassandra中以id、start(降序)、end (降序)作为主键存储数据。您的写入和读取将是快速的,可以线性缩放性能。注意: Cassandra将分区值的数量限制为20亿,如果不想为旧数据设置TTL,则应该考虑向分区添加另一个键来限制值。这还将使您能够在只有很少ID的情况下将数据分散到集群中,这些ID不断地发送数据。
https://stackoverflow.com/questions/40030959
复制相似问题