如何在 MongoDB 和 PostgreSQL for GIS 之间进行选择? [关闭]
Posted
技术标签:
【中文标题】如何在 MongoDB 和 PostgreSQL for GIS 之间进行选择? [关闭]【英文标题】:How to choose between MongoDB and PostgreSQL for GIS? [closed] 【发布时间】:2017-06-14 13:21:03 【问题描述】:我正在尝试查找有关此主题的一些信息,但我找到的大多数文章都是 3 年以上的。我对这方面也很陌生,不知道该问谁。
对于我的特定用例,我根本不是数据库专家,但我之前使用过 MongoDB 几次。我只在一个小项目中使用过一次 PostgreSQL(不涉及 GIS 的东西)。对于它的价值,我现在有少量数据存储到 dynamoDB 中。它有一个地理库,但它只在 Java 中可用,我对 Java 不是很了解。
我的用例相当简单——除了用户个人资料数据之外,我还希望能够查询用户添加的标记。已验证用户当前latLng
等 X 英里范围内的标记。标记除了 latLng
之外还有其他相关数据,例如添加它的用户、标题、描述等。
我的目标是能够使用 Web API 将结果返回到客户端,并在其当前位置 X 英里范围内从最近到最远标记。为此,在 Mongo 和 PostgreSQL 之间,从什么开始会更好?
【问题讨论】:
您不需要为此使用特殊的数据库,尽管在具有地理扩展的数据库中它会更快。您可以使用the Haversine formula。在 SQL 实现中,您可以在WHERE
子句中添加距离过滤器。
【参考方案1】:
PostgreSQL 可以通过 PostGis 为您提供完整的(地理)空间功能,尽管您的应用程序中可能不需要那么多。
如果您只需要在(lat,lng)点的某个半径范围内快速找到用户,您可以使用earthdistance module 和GIST indexes。
查看How can I speed-up my query on geo-location processes了解详细说明。
还要检查Searching in a Radius using Postgres。
在 MongoDB 中,您将使用 geoNear 功能和 2dsphere Indexes
PostgreSQL 中的查询非常快速且非常灵活,并且可以很好地扩展。与 MongoDB 相比,您需要做更多的工作来设置它。
无论如何,两者的基本功能都可用,您应该考虑所有其他因素来决定:
您的数据结构是否良好,并且在此结构中几乎没有变化? (更多关于 SQL 的内容) 您需要 ACID(原子性、一致性、隔离性、持久性)保证吗? (更多关于 SQL 的内容) 您需要巨大的水平缩放吗? (更多关于 MongoDB 的内容) 您是否需要一次查询多个表(并连接)? (SQL 端) 您觉得 javascript 和 JSON 比其他任何语言更舒服吗? (MongoDB +) (等等等等)还要查看 Postgres Outperforms MongoDB and Ushers in New Developer Reality 和 System Properties Comparison MongoDB vs. PostgreSQL 等。
【讨论】:
非常感谢乔阿诺洛。我意识到我的问题被否决了很多,但老实说,很难轻松找到这类信息,而且也很容易消化。感谢您的回复。 如果我可以再问一个问题。目前,我认为我不需要关系数据库,因此我倾向于使用 MongoDB,因为它易于设置和使用。我期待大量初始写入(创建新标记)和大量读取,但除了删除之外,不要期望对现有标记进行很多更新。我认为我的数据模型也很简单,如果需要(如前所述,我对数据库不太了解,我正在尝试构建 PoC),我可以切换到 postgres。您认为这是一种有效的方法吗?谢谢 当您进行概念验证时,通常您的基本需求是让它快速发生,在这种情况下,请选择让您工作得最快的工具。这在很大程度上取决于您以前的背景;你习惯的那种工具。但要小心,不要陷入认为最适合 PoC 的东西就是生产中最好的东西的陷阱…… geoNear 和 geoIntersects 可用于 MongoDB以上是关于如何在 MongoDB 和 PostgreSQL for GIS 之间进行选择? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 Spring Boot 中将 MongoDb 和 PostgreSql 用于同一模型?
工具PostgreSQL的NoSQL特性表现抢眼,多个方面优于MongoDB