Mongodb 为客户提供地理空间新闻
我正在开发一个应用程序,用户将根据其位置接收基于地理位置的信息。服务器应该能够处理数量庞大的连接客户端>100k 现在我想出了4种方法来处理用户的位置Mongodb 为客户提供地理空间新闻,mongodb,indexing,geospatial,Mongodb,Indexing,Geospatial,我正在开发一个应用程序,用户将根据其位置接收基于地理位置的信息。服务器应该能够处理数量庞大的连接客户端>100k 现在我想出了4种方法来处理用户的位置 方法-无地理空间索引: 应用程序服务器只保存一个已连接客户端的列表,它们位于不同的位置。 每当有可用的信息时,服务器就会在整个列表上循环,并检查客户机是否在给定的半径范围内 怀疑:非常昂贵 方法-在应用程序服务器中处理地理空间索引: 应用程序服务器确实维护了一个包含所有连接客户端的R树,并且它们位于同一位置。 所以我在看 怀疑:使用JSI更新地理
如果有人能给我指出正确的方向,我将不胜感激。MongoDB用于地理空间索引的索引基于geohash,它基本上将二维空间转换为一维键,适合于B树索引。虽然这比R树索引的效率要低一些,但它比场景1的效率要高得多。我还认为,在数据库级别使用空间查询过滤数据比在上面创建自己的空间索引策略更高效、更易于维护 MongoDB需要注意的主要一点是,不能将几何体列用作切分键,尽管可以使用另一个键切分包含几何体字段的集合。此外,如果您希望执行任何聚合查询(您的问题还不清楚),几何体字段必须是管道中的第一个字段 还有一个geohaystack索引,它基于小桶,并针对基于小区域的搜索进行了优化,请参阅,这在您的案例中可能很有用 就速度而言,B树索引上的插入和搜索本质上是O(logn),请参阅,如果没有索引,则搜索将是O(n),因此不需要很长时间,索引与没有索引之间的性能差异将是巨大的
如果您担心大量写入会减慢速度,您可以调整,这样您就不必等待大多数副本响应每次写入(默认设置),但如果您丢失主副本,则可能会导致数据不一致。感谢您的回答,我想geohaystack索引适合我的情况。MongoDB文档没有回答我的问题的地方是,对索引的更新将如何影响性能,以及这样做是否是一个好主意。最终,测试是无可替代的,但即使索引对写性能有影响,这也会被读性能所抵消。使用MongoDB,您可以调整所谓的写入问题,即如果不等待大多数副本响应,写入将更快返回,但如果丢失主副本,则可能会导致数据不一致。@user3211074。我已经用B-Tree上的一些信息更新了我的答案,并在Mongo中写下了关注点,这可能有助于回答您的问题。我想询问您实际查询的更多信息,以便更好地给出场景4的观点,但请确保您已接受答案。那么,您选择场景3了吗?我尝试了场景3,但性能测试的结果并不令人惊讶。今天我尝试了场景4。它非常简单,性能非常好。我使用了一个hashMap,键为“long;lat”(四舍五入到1个小数点),该键的值是一个连接用户的列表。它非常适合我的用例。