4

我正在开发一个地理定位应用程序。这个应用程序在正确索引的 MongoDB 中保存了大约 500K 记录。每行都有自己的纬度和经度记录值。因此,客户端必须从这 500k 行中恢复 200 个最近的点。我担心性能。起初,我想将所有记录(纬度/经度信息)保存在缓存管理器或内存数据库中。之后,可以将给定的点(纬度/经度)与缓存中的那些值进行比较。这一刻,我的疑惑产生了。

将所有这些记录存储在缓存管理器中的 ArrayList 中,然后将记录的地理位置与 ArrayList 中的地理位置进行比较以计算距离会很好吗?

使用这种方法,我可以防止 MongoDB 中的大量查询,另一方面,通过在 ArrayList 中保留大约 500K 记录(地理位置)然后获取该列表以检索最近的 200 个,这可能是错误的。如果没有错,至少我认为这是性能损失。

我该如何处理这个问题?

提前致谢。

4

1 回答 1

4

将数据保存在内存中可能会提高性能。但是,当您在 ArrayList 中有 500k 条记录并且想要搜索最接近给定点的 200 条记录时,这意味着必须针对每个请求检查 500k 条记录中的每一条记录。这需要一段时间。可能比 MongoDB 花费的时间要长得多。

但是您可以通过 MongoDB 对其地理索引执行相同的操作来提高性能:使用针对搜索优化的更智能的数据结构。以R-Tree为例。在一个平衡良好的 R-Tree 中,搜索给定区域中的所有记录是一个运行时复杂度log n而不是n数组列表的操作。对于 50 万个条目,这将是几个数量级的改进。

于 2013-11-06T19:33:42.070 回答