gpt4 book ai didi

java - 将大量地理位置记录存储在缓存的 ArrayList 中或始终从 MongoDB 中查询它们?

转载 作者:可可西里 更新时间:2023-11-01 09:13:11 29 4
gpt4 key购买 nike

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

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

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

我该如何处理这个问题?

提前致谢。

最佳答案

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

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

关于java - 将大量地理位置记录存储在缓存的 ArrayList 中或始终从 MongoDB 中查询它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19820288/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com