用于存储位置数据(经纬度)和搜索的 postgresql 或 Mongodb?

Posted

技术标签:

【中文标题】用于存储位置数据(经纬度)和搜索的 postgresql 或 Mongodb?【英文标题】:postgresql or Mongodb for storing location data (lat & long) and search based on? 【发布时间】:2018-07-04 18:38:47 【问题描述】:

我有一个系统,我喜欢根据纬度和经度数据找到离一个人最近的人。 我知道如何在 Mongodb 中使用位置数据,以及如何通过半径等为每个人找到最近的人。 但是我不知道如果我的系统中有大量用户,并且在 postgresql 中查询位置数据可能会使我的系统崩溃? 哪个 dbms 非常适合处理位置数据、Postgresql 或 Mongodb ??? 感谢您的帮助。

非常感谢

【问题讨论】:

【参考方案1】:

您所说的查询类型称为“KNN”或“K-nearest-neighbor”,PostgreSQL 直接使用 GIST 索引支持。更好的是,PostGIS 支持真正的 KNN,用于对纬度/经度(又名地理空间)数据进行 KNN。这是一个关于在 PostGIS 中使用 KNN 和 PostGIS 的精彩演示:

https://www.hagander.net/talks/Find%20your%20neighbours.pdf

您可以在此处阅读有关 PostGIS 中 KNN 功能的更多信息:

https://postgis.net/docs/geometry_distance_knn.html

我不会谈论哪个数据库更适合您的特定工作负载,因为我不直接知道它,而且无论如何我都会有点偏见,正如您可能会根据上面的链接猜到的那样。我要说的是,PostgreSQL 在执行这类查询方面非常高效且非常快速,并且可以很好地扩展。

【讨论】:

非常感谢您的指导。

以上是关于用于存储位置数据(经纬度)和搜索的 postgresql 或 Mongodb?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Boot JPA 在 Postgres 中存储几何点?

PHP 半径搜索

DSE:地理位置,即纬度和经度在 cassandra 中存储为不同的字段

如何在输入位置的x行程时间内搜索纬度,经度项目的数据库

SQlite 获取最近的位置(经纬度)

SQlite 获取最近的位置(经纬度)