(不确定它叫...模型..架构......超级模型?)
我在'm'(唯一ID)家中有'n'(唯一id'd)传感器。这些中的每一个都是0到'k'次/天(以1-5为块)。此数据当前存储在MySQL中,每个“主页”都有一个表格,结构为:
time stamp
sensor id
firing count
我无法围绕这个数据的'nosql'模型进行思考,这样我就可以找到家庭,时间或传感器的点火次数。
..或许这可能不是推送到nosql的正确数据?我们当前的服务器在负载下陷入困境(数亿行x数百个家庭)。我非常有兴趣找到一个允许cassandra可扩展性的数据存储。
答案 0 :(得分:2)
这取决于。想想“先查询”的方法:
因此,虽然您可能有一个列系列作为您的物理模型,但您还将拥有一个或多个提供查询数据的列。而且,您可以进一步利用Cassandra功能,例如:
列名称可以包含数据。您不必存储值,每个名称可以是时间戳,例如
非常适合为每个密钥存储数千列,列将保持排序状态,并且可以按正向或反向顺序访问;因此,继续上面的示例,可以轻松获取传感器的所有时间戳列表
复合数据类型允许您将多个数据位组合成键,名称或值。例如结合房屋ID和传感器ID
计数器列提供简单的值增量,即使对于初始值也是如此,因此只需要一个写操作。
可以在静态列名称上定义索引,这实际上提供了一个反向列族,其中包含键作为结果,只需要小心桶大小(例如,可能不希望值为millisec)< / p>
答案 1 :(得分:1)
通过传感器和房屋存储射击次数:
House_Sensors <-Column family
house_id <-Key
sensor_id <-Column name
firing_count <-Column value
以JSON-ish表示法表示的数据
House_Sensors = {
house_1 : {
sensor_1: 3436,
sensor_2: 46,
sensor_3: 99,
...
},
house_2 : {
sensor_7: 0,
sensor_8: 444,
...
},
...
}
您可能希望定义另一个列族,其中sensor_id作为存储触发时间戳的键。
在设计架构时考虑您需要哪些查询,并根据需要进行非规范化。重复数据,Cassandra插入非常快。
触发的时间戳未存储在House_Sensor列族中。使用sensor_id作为密钥为其创建新的列族。
通过这种方式,您可以使用House_Sensor系列来查询点火计数以及每个房屋属于哪个传感器。使用其他列族查询触发时间戳。