用于车辆GPS跟踪的Cassandra架构

时间:2017-07-01 16:51:06

标签: cassandra

我有一个要求,即我每隔一段时间从设备获取gps数据。

因此,对于给定的设备ID,我有纬度,经度和时间戳字段。

我需要找到给定车辆ID的最新纬度经度。

我的方法是将主键设置为(device_id,timestamp)并按时间戳排序。

选择设备ID作为分区密钥是个好主意吗?

就我而言,设备是虚拟机。为每个新工作创建一个新工作。设备将发送其gps位置,直到它完成其工作(通常为3-4天),然后到期。对于下一个作业,将创建具有新设备ID的新设备。

因此,我将为给定的设备ID提供3-4天的数据,然后什么也没有。 此外,每周都缺少新设备。

所以,我唯一担心的是我的分区数量会随着时间的推移而不断增加。 这对cassandra来说是个好设计吗?

2 个答案:

答案 0 :(得分:1)

是的,这是一个很好的设计。

分区键确定哪个节点存储数据。它负责跨节点的数据分发。 分区数量越多,数据分布越多,扩展能力越强,负载均衡越多

答案 1 :(得分:1)

选择设备ID作为分区键是个好主意吗?

是的,根据cassandra你需要有一个分区键,这些键应该具有非常好的分布,所以你有更多的分配数量,你得到更多的分配,所以当从客户端执行多个查询每个查询将在不同的节点执行,以便减少热点。因此,将device_id作为分区键是cassandra的完全用例

还需要记住的另一件事是,来自cassandra文档here

  

单个分区中的最大单元数(行x列)   20亿。

这意味着从您的架构中,给定的device_id不能超过20亿个时间戳。我相信您的数据不会触及这个限制,如果是这种情况,那么您需要重新考虑您的数据模型。否则,您的数据模型可以百分之百。