我们的要求非常简单,我们希望为传感器存储GPS位置,这些传感器不应超过几天。数据的总粒度最大约为一分钟左右。
由于传感器的总数可能超过十亿,因此除非我自己编写分区逻辑,否则SimpleDB不是一个选项。 SimpleDB虽然为每个属性编制索引,但可以在一段时间内运行一次定期清理脚本,删除超过2天的条目。
DynamoDB看起来好多了,因为它对数据量没有限制,我可以在sensorID + timestamp上使用分区+范围主键。但是,删除旧数据需要扫描查询,除非我在时间戳字段上也有一个全局二级索引。在这个二级全局索引中,查询可能会更快。
只是我认为可以有更好的方式吗?使用DynamoDB / SimpleDB更好,因为整个部署都在AWS环境中,我们并不想投入大量的操作。我知道像Mongo DB这样的其他NOSQL数据库支持这些。
答案 0 :(得分:1)
您可以以x
天的增量在基于日期的表格中保存条目。
GPS_LOCATIONS_09052016
GPS_LOCATIONS_09072016
...
然后您可以每隔x
天删除旧表。
每个传感器有多少个GPS位置?如果你有5亿个独特的传感器,那么传感器id的分区效率不高。
如果基于日期的表格无效,那么您可以在timestampHash
哈希键和timestamp
范围键上创建GSI,其中timestampHash
是一个数字1到y
,y
,具体取决于您的数据大小。然后,您可以针对每个timestampHash
执行范围查询,并且timestamp
小于现在,或者您设置清除参数的任何内容。 timestampHash
将帮助您对数据进行分区,以帮助提高吞吐量。
答案 1 :(得分:1)
添加了DynamoDB中的新功能。 请检查TTL
这将在特定项目的TTL过期后删除该项目。