我有一个要求,即我每隔一段时间从设备中获取gps数据。
因此,对于给定的设备id,我有纬度、经度和时间戳字段。
我需要找到给定车辆id的最新纬度经度。
我的方法是将主键作为(device_id,timestamp)并按时间戳排序。
选择设备id作为分区键是个好主意吗?
在我的例子中,设备是一个虚拟机。每个新的工作都会创建一个新的工作。该设备将发送其gps位置,直到它完成其工作(通常为3-4天),然后到期。对于下一个作业,将创建一个具有新设备id的新设备。
因此,我将有一个给定设备id的数据3-4天,然后什么都没有。此外,每周都有新设备问世。
所以,我唯一担心的是我的分区数量会随着时间的推移而不断增加。对于cassandra来说,这是一个好的设计吗?
发布于 2017-07-02 12:18:45
是的,这是一个很好的设计。
分区键确定哪个节点存储数据。它负责跨节点的数据分发。分区数量越多,数据分布越多,可伸缩性越强,负载平衡的也越多。
发布于 2017-07-02 12:58:51
:选择设备id作为分区键是个好主意吗?
是的,根据cassandra,你需要有一个分区键,这样那些键应该有非常好的分布,所以键的数量越多,你得到的分布数量就越多,这样当从客户端执行多个查询时,每个查询将在不同的节点上执行,因此可以减少热点。因此,将device_id作为分区键是的确切用例
您需要记住的另一件事是,来自cassandra文档here,
单个分区中的最大单元数(行x列)为20亿。
这意味着从您的模式来看,给定device_id的时间戳不能超过20亿。我相信你的数据不会达到这个极限,如果是这样的话,你需要重新考虑你的数据模型。否则,你的数据模型是百分之好的。
https://stackoverflow.com/questions/44863350
复制相似问题