周期性地,应用程序将接收大量具有纬度和经度的移动物体(每秒大约 100,00,000 [100 万] 个)。要求是检测 400 米距离内的任何物体,检测必须在 400 毫秒(毫秒)内完成。
因此,每当应用程序接收到任何具有纬度和经度的新对象时,我首先需要将其添加到数据结构中,并在 400 毫秒内检查数据结构中的任何其他对象是否在距离新添加对象 400 米的范围内。
根据我的研究,我有以下 2 个选项: 选项 1:如果对象数量较少,Redis GEO 可用于上述要求。但是,对于 100 万个对象,执行 geoadd 和 georadius 查询将花费超过 400 毫秒,这是不可接受的。将来对象可以每秒 200 万个。
选项 2:使用八叉树数据结构,这将提供更好的性能由新对象。
我想了很多关于使用 geohash 对数据进行分区的问题。示例 使用 geohash 前缀,将 redis 实例 1 中的数据和其他 geohas 数据保存在 redis 实例 2 中。但是对于两个对象在 400 m 范围内但在相邻象限中的极端情况,它将失败。
问题 有没有人知道根据纬度和经度划分数据并仍然检测相邻对象?或者减少map-reduce范式中的问题?
考虑到未来物体可以达到每秒 200 万个,任何人都可以提出一种不同的方法吗?