【发布时间】:2016-09-28 04:17:47
【问题描述】:
我需要将传感器读数存储在 cassandra(版本 2!)中。 有 n 个传感器,每个传感器最多可以发送 m 个不同类型的值(例如 Float、Bool、String)。这些值必须存储在 cassandra 中。稍后,将主要按时间范围查询值。因此,查询可能是“给我从 2016-05-01 09:00 到 2016-05-15 13:00 的所有读数”。可能有传感器 ID/类型的过滤器,但主要查询始终是时间。 (因此查询可能是“给我 2016 年 5 月 5 日传感器 1 和 5 的所有数据”,但很可能不是“给我传感器 1 和 5 的所有数据”)。
对于更详细的查询,如果必须扫描所有数据(受时间和可能的传感器 ID 限制)是可以的。因此,对于查询“给我 2016 年 5 月 5 日传感器 5 的所有传感器数据,其中读数的浮点值大于 1000”,如果 cassandra 必须从 2016 年 5 月 5 日扫描传感器 5 的所有值,则可以!
我阅读了很多关于数据建模的博客文章/问题,(例如[1][2][3][4][5][6])但有些东西已经存在多年了,我不确定,如果这仍然是正确的方法。
我的主要问题是:
- 时间戳我使用什么数据类型(需要毫秒分辨率)
- 如何定义键? (例如,我是否需要像某些示例那样使用每小时一次的主键?如果需要,我可以在 cassandra 中合并超过一小时的结果,还是需要手动执行?)
- 如何添加 sensorID 以便高效查询
传感器数据将始终按顺序插入,因此不会更改以前的数据,也不会添加时间戳低于当前最大值的数据。
【问题讨论】:
标签: database-design cassandra cql