社区编辑申请
注册/登录
三大流行数据库(MongoDB、PostgreSQL和Harper)大比拼 译文
数据库 PostgreSQL MongoDB
本文以当前流行的MongoDB和PostgreSQL两大数据库系统为参照,引入Harper这一全新的数据库,并对三者的功能、结构、以及适用场景进行了比较。

【51CTO.com快译】在日常生活中,许多人都是在基于他们已经知道的事物基础上,去学习或了解新的事物。这是人类的天性。同样,在产品和技术方面,人们需要事先找到一个基线作为起点,然后问出类似:“相对于X,那么Y到底有哪些不同呢?”等问题。下面,我们将按照这样的思路,以当前流行的MongoDB和PostgreSQL两大数据库系统为参照,引入Harper这一全新的数据库,并对三者的功能、结构、以及适用场景进行比较。

总体而言,在大多数情况下,鉴于多方面因素的考虑,我们并不需要得出“哪家数据库最强?”的结论,而是要探索出在为特定项目选择数据库时,需要考虑的各种因素和适用场景。

定义

MongoDB被分类为NoSQL数据库。由于使用的是类似JSON的文档,作为可选的模式集合(schema),因此它是面向文档(document-oriented)的。

PostgreSQL是传统的RDBMS(relational database management system,关系数据库管理系统)。由于主要被用于关系型数据,因此它本质上是面向对象的。

HarperDB是具有REST API和动态模式集合的分布式数据库。它支持NoSQL和包括联合(joins)功能在内的SQL。例如,您可以通过NoSQL JSON来提取数据,并立即通过SQL进行查询。

差异概述

MongoDB与PostgreSQL:作为一个关系型数据库,PostgreSQL可被用于处理更为复杂的过程、设计和集成。而作为一个NoSQL数据库,MongoDB通常被用于简单、非结构化的数据场景,同时也非常适合于大数据应用程序的开发。PostgreSQL能够强制执行模式集合的验证,而Mongo则不然。

HarperDB与MongoDB:作为一种文档存储,MongoDB非常适合非结构化数据;而HarperDB提供了完整的文档存储功能,以及企业级的ACID SQL,即:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、和持久性(Durability)。基准测试(Benchmark test)发现,HarperDB比Mongo快37倍,而价格却不到其一半。HarperDB不但具有原生的REST API,支持针对JSON的SQL,而且更易于使用和管理。Mongo虽然已针对大规模的写操作进行了优化,但是并未针对读操作采取任何优化。而针对LMDB(Lightning Memory-Mapped Database)编写的HarperDB数据存储算法,可实现大规模的读和写操作,进而提高整体性能。

HarperDB与PostgreSQL:PostgreSQL是善于处理复杂数据或严格的一致性。而HarperDB比PostgreSQL更灵活,它简化了大量的安装、配置和管理工作。HarperDB不但允许那些具有关系型数据库背景的开发人员继续沿用SQL技能,还允许他们使用来自同一数据模型的NoSQL。

辅助功能

MongoDB、PostgreSQL和HarperDB均可在云端、本地、以及数据中心等任何地方运行。PostgreSQL虽然不像HarperDB Cloud和MongoDB Atlas那样有云端版本,但是各个云提供商会提供所谓的PostgreSQL即服务(PostgreSQL-as-a-service)。

深入了解

MongoDB主要适用于C、C++和JavaScript语言编程;PostgreSQL则主要适用于C语言编程;而HarperDB适用于Node.js的编写。此外,LMDB不但适用于C语言的编写,而且在安装过程中使用到了Python。

MongoDB在后台采用BSON(binary JavaScript Object Notation,二进制JavaScript对象表示法),来加快查询的速度。在您打开集合时,它会转换为JSON以便被读取。

PostgreSQL采用SQL(一种结构化查询语言)来定义、访问和操作数据库。当然,PostgreSQL也有一个JSON数据类型。

HarperDB对数据的类型并无强制性要求。它当前存储的所有数据属性均为字符串,而且可以通过SQL和(或)NoSQL来查询数据。同时,HarperDB也致力于让管理员能够显式地设置属性类型(如:数字或字符串型),以方便性能的调优。

数据存储与架构

MongoDB将数据存储为单独的文档,而并不考虑其属性。PostgreSQL将数据存储在传统的表和行中。而HarperDB则将数据存储在表、行、以及对象中,并且所有顶级属性在默认情况下都已经建立了索引。

HarperDB能够将独特的数据存储算法运行在LMDB上。这使得HarperDB可以在单个产品中,提取JSON文档和关系型数据。HarperDB会持续将传入的数据,映射到数据模型中。而无论传入的数据是何种类型,它们都会根据HarperDB的内部数据模型来予以存储,并方便了开发人员通过SQL或NoSQL进行查询。

此外,MongoDB和HarperDB都具有分布式的体系架构,而PostgreSQL则被视为一种单体架构。

ACID属性

由于支持企业级的ACID SQL事务,因此数据在HarperDB和PostgreSQL内具有可靠的有效性。而像MongoDB之类的NoSQL数据库,通常注重的是终极一致性,而非ACID整体属性。2020年5月,有一项研究发现了MongoDB未对交易进行完全隔离的错误,进而确证了它不符合ACID。当然,HarperDB和PostgreSQL都能够遵循ANSI SQL标准。

模式集合和表

对于MongoDB和HarperDB而言,通过使用JSON,您可以灵活地更改架构,而不会产生任何后果。当然,对应的文档可能会在键/值方面有所不同。

MongoDB和HarperDB都可以通过水平方向的扩展,来提高速度与性能。其中,HarperDB具有双向表级(bidirectional table-level)的数据复制特性。通过使用HarperDB简单的pub-sub模型,您可以订阅和复制数据的方式,将数据水平发布到不同节点处。

PostgreSQL可以垂直方向扩展。随着数据库的变大,它会需要更多的空间或内存,因此对应的停机时间也会增加。也就是说,对于PostgreSQL之类的关系型数据库,您与其在事后更改表的结构,并可能导致数据库的停机,以及应用服务的中断,不如在系统上线之前,就对整个架构进行完善的设计和配置。此外,PostgreSQL数据库可以使用外键,来显式地链接表与表之间的数据,以用于保持数据的规范化。

使用场景

如前文所述,由于PostgreSQL中的事务能够遵循ACID属性,而对于金融科技(fintech)之类的行业而言,他们需要对数据的状态拥有绝对的控制权​​,因此Postgres之类的关系型数据库是不错的选择。

如果您仅具有非结构化的数据,或是正在使用大数据,那么最好将水平扩展的方法,与MongoDB之类的工具协同使用。

相对于现有的数据库系统,HarperDB更适合于同时需要SQL和NoSQL,快速应用开发与集成,边缘计算,分布式计算,实时分析,以及高度事务性(high transactions)处理的项目。当然,如果您需要全文索引、高度结构化的关系型数据、跨系统的严格一致性、以及约束开发人员访问或维护某些数据项目的话,HarperDB就不太适用了。

小结

总的说来,吸收了MongoDB和PostgreSQL各项优点的HarperDB,对SQL、NoSQL、以及NewSQL的各种产品功能,进行了扩展与市场融合,填补了其中的空白与短板,并为开发人员提供了实用且高效的工具。

原文标题:HarperDB vs MongoDB vs PostgreSQL,作者:Margo McCabe

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

责任编辑:华轩 来源: 51CTO
相关推荐

2022-04-12 10:36:52

数据库PostgreSQLMongoDB

2022-04-28 08:05:05

2022-04-26 07:45:52

PostgreSQL容器

2022-03-17 18:52:41

PostgreSQ序列数据集群

2022-04-06 12:19:50

LinuxUbuntu

2022-03-02 09:53:44

开源ZabbixCentOS 7

2011-08-02 16:27:50

2014-01-02 09:57:56

PostgreSQL命令

2022-02-11 14:02:09

2022-05-27 08:31:24

Coolify开源

2022-05-12 09:55:53

PostgreSQL数据库谷歌

2014-03-03 10:10:37

2022-04-22 14:05:43

数据库MongoDBMySQL

2018-08-16 17:18:49

数据处理

2022-04-29 10:17:51

数据库Group-IB数据库安全

2022-05-13 07:31:58

数据库连接池druid

2011-08-24 10:21:39

CHECKPOINT中文man

2022-05-18 16:55:38

数据分析工具开源

2022-05-19 08:01:49

2022-05-12 11:12:46

MongoDB索引元数据

同话题下的热门内容

Abase2:字节跳动新一代高可用 NoSQL 数据库再有人问你什么是分库分表,直接把这篇文章发给他实时数据湖在字节跳动的实践聊聊延时消息的六种实现方案​基于智能数据库的自助式机器学习关于MySQL数据库性能优化方法,看这一篇文章就够了基于ES的开源分布式SQL数据库,CrateDB适用于哪些场景?分库分表会带来读扩散问题?怎么解决?

编辑推荐

Oracle数据库初学者开场篇NoSQL数据库概览及其与SQL语法的比较如果对MySQL还停留在这个印象,就out了SQL编程之高级查询及注意事项防止服务器宕机时MySQL数据丢失的几种方案
我收藏的内容
点赞
收藏

51CTO技术栈公众号