在我们开始之前:MongoDB和Postgres都是很好的数据库管理系统。这篇文章的目的是让你快速了解每个数据库的个性,以及每个数据库最适合的用例类型。
MongoDB和PostgreSQL:一个简单的比较
MongoDB是主要的文档数据库。它构建在分布式、向外扩展的架构上,并已成为一个用于管理和向应用程序交付数据的综合云平台。MongoDB可以大规模地处理事务、操作和分析工作负载。如果您关心的是上市时间、开发人员的生产力、支持DevOps和敏捷方法,以及构建无需操作操作就可伸缩的东西,那么MongoDB就是最好的选择。
PostgreSQL是一个坚如磐石的、开放源码的企业级SQL数据库,30年来一直在扩展它的功能。你想从关系数据库中得到的所有东西都可以在PostgreSQL中找到,它依赖于一个扩展的架构。如果您关心的是兼容性,从数百个表中提供数千个查询,利用现有的SQL技能,并将SQL推到极限,PostgreSQL将会做得非常出色。
这两个数据库都很棒,但是您需要什么呢?
作为一个精明的读者应该已经知道,真正的问题不是MongoDB和Postgres,而是最好的文档数据库和最好的关系数据库。两个数据库都很棒。
如果您正在为处理快速变化、多结构数据的现代事务和分析应用程序寻找分布式数据库,那么MongoDB就是最佳选择。
如果SQL数据库符合您的需要,那么Postgres是一个很好的选择。
你需要的正确答案当然是基于你正在尝试做的事情。在本文中,我们的目标是帮助解释每个数据库的个性和特征,以便您更好地了解它是否满足您的需要。
但是通常在开发项目的开始阶段,项目负责人通常很好地掌握了用例,但是对于他们的业务和用户将需要的具体应用程序特性并不是很清楚。他们不得不打赌谁最适合。本文的其余部分旨在提供有助于进行安全打赌的信息。
PostgresqlvsMongoDB概述
但是,对于那些想要马上了解故事的人,这里是我们的一般指导的一个总结:
如果你在一个开发项目的开始阶段,试图通过敏捷的开发过程找出你的需求和数据模型,MongoDB将会大出风头,因为开发人员可以在他们需要的时候,自己重塑数据。MongoDB允许您管理任何结构的数据,而不仅仅是预先定义的表格结构。
如果你支持一个应用程序,你知道它需要扩展流量或数据大小(或两者都需要),并且需要跨区域分布数据本地或数据主权,MongoDB的扩展架构将自动满足这些需求。
如果你想要一个在每个公共云上都以相同方式工作的多云数据库,可以在特定的地理区域存储客户数据,并支持最新的无服务器和移动开发范例,MongoDBAtlas是正确的选择。
如果你是一个SQL商店,引入一个新的范例所花费的成本比上面提到的任何好处都要高,那么PostgreSQL是一个很可能满足你所有需求的选择。
如果你想要一个关系数据库,运行复杂的SQL查询,并与许多现有的基于表格、关系数据模型的应用程序一起工作,PostgreSQL可以完成这项工作。
如果你是一个创造性的SQL开发人员和想把SQL索引限制通过使用先进的技术,存储和搜索大量的结构化数据类型,创建用户定义的函数在不同的语言中,和调优数据库第n个学位,你可能能够更进一步,比任何其他RDBMSPostgreSQL。
所以,现在不耐心的人已经得到了满足,患者可以深入到MongoDB,然后是PostgreSQL,然后进行比较。
MongoDB:可伸缩的文档数据库,已成为一个数据平台
文档模型的美丽之处
MongoDB的文档数据模型自然地映射到应用程序代码中的对象,使得开发人员可以很容易地学习和使用它。文档使您能够表示层次关系,从而方便地存储数组和其他更复杂的结构。JSON文档可以将数据存储在字段中,作为数组,甚至作为嵌套的子文档。这样就可以将相关信息存储在一起,通过丰富而富有表现力的MongoDB查询语言进行快速查询访问。
MongoDB以名为BSON(二进制JSON)的二进制表示形式将数据存储为文档。字段可以因文档而异;不需要向系统声明文档的结构—文档是自描述的。如果需要将新字段添加到文档中,那么可以在不影响集合中的所有其他文档的情况下创建该字段,不需要更新中央系统目录、更新ORM,也不需要使系统脱机。可选地,模式验证可用于对每个集合实施数据治理控制。
这种灵活性在合并来自不同来源的信息或适应随时间变化的文档时非常有用,特别是在不断部署新的应用程序功能时。
PostgreSQL和MongoDB的术语和概念
MongoDB的文档模型中使用的许多术语和概念与PostgreSQL的表格模型相同或相似:
文档模型的增强
MongoDB允许您以几乎任何结构存储数据,并且每个字段——甚至是那些嵌套在子文档和数组中的字段——都可以建立索引并有效地搜索。
MongoDB向文档模型和查询引擎添加元素,以处理数据的地理空间和时间序列标记。这扩展了可以在数据库上执行的查询和分析类型。
BSON包含了JSON数据中没有的数据类型(例如,datetime、int、long、date、浮点数、decimal和字节数组),提供了对多种数字类型的严格类型处理,而不是通用的“数字”类型。
模式验证允许您对模式应用治理和数据质量控制。
用于对许多文档进行更改的ACID事务
ACID事务是关系数据库中使编写应用程序更加容易的最强大的特性之一。关于如何定义和实现ACID事务的细节充斥着许多计算机科学教科书。计算机科学领域的许多讨论都是关于数据库事务中的隔离级别的)。PostgreSQL默认为read