我有一个要求,即我每隔一段时间从设备获取gps数据。
因此,对于给定的设备ID,我有纬度,经度和时间戳字段。
我需要找到给定车辆ID的最新纬度经度。
我的方法是将主键设置为(device_id,timestamp)并按时间戳排序。
选择设备ID作为分区密钥是个好主意吗?
就我而言,设备是虚拟机。为每个新工作创建一个新工作。设备将发送其gps位置,直到它完成其工作(通常为3-4天),然后到期。对于下一个作业,将创建具有新设备ID的新设备。
因此,我将为给定的设备ID提供3-4天的数据,然后什么也没有。 此外,每周都缺少新设备。
所以,我唯一担心的是我的分区数量会随着时间的推移而不断增加。 这对cassandra来说是个好设计吗?
答案 0 :(得分:1)
是的,这是一个很好的设计。
分区键确定哪个节点存储数据。它负责跨节点的数据分发。 分区数量越多,数据分布越多,扩展能力越强,负载均衡越多。
答案 1 :(得分:1)
选择设备ID作为分区键是个好主意吗?
是的,根据cassandra你需要有一个分区键,这些键应该具有非常好的分布,所以你有更多的分配数量,你得到更多的分配,所以当从客户端执行多个查询每个查询将在不同的节点执行,以便减少热点。因此,将device_id
作为分区键是cassandra的完全用例
还需要记住的另一件事是,来自cassandra文档here,
单个分区中的最大单元数(行x列) 20亿。
这意味着从您的架构中,给定的device_id不能超过20亿个时间戳。我相信您的数据不会触及这个限制,如果是这种情况,那么您需要重新考虑您的数据模型。否则,您的数据模型可以百分之百。