服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - MongoDB - 三大流行数据库(MongoDB、PostgreSQL和Harper)大比拼

三大流行数据库(MongoDB、PostgreSQL和Harper)大比拼

2023-05-07 04:14未知服务器之家 MongoDB

【51CTO.com快译】在日常生活中,许多人都是在基于他们已经知道的事物基础上,去学习或了解新的事物。这是人类的天性。同样,在产品和技术方面,人们需要事先找到一个基线作为起点,然后问出类似:相对于X,那么Y到底有哪

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

[[358467]]

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

定义

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】

 

延伸 · 阅读

精彩推荐
  • MongoDBMongoDB安装图文教程

    MongoDB安装图文教程

    这篇文章主要为大家详细介绍了MongoDB安装图文教程,分为两大部分为大家介绍下载MongoDB和安装MongoDB的方法,感兴趣的小伙伴们可以参考一下 ...

    Yangyi.He6132020-05-07
  • MongoDBMongodb实现定时备份与恢复的方法教程

    Mongodb实现定时备份与恢复的方法教程

    这篇文章主要给大家介绍了Mongodb实现定时备份与恢复的方法教程,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面...

    chenjsh364522020-05-13
  • MongoDBMongoDB 内存使用情况分析

    MongoDB 内存使用情况分析

    都说 MongoDB 是个内存大户,但是怎么知道它到底用了多少内存呢...

    MongoDB教程网10002020-09-29
  • MongoDB迁移sqlserver数据到MongoDb的方法

    迁移sqlserver数据到MongoDb的方法

    这篇文章主要介绍了迁移sqlserver数据到MongoDb的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    听枫xl9682021-01-03
  • MongoDBmongodb基本命令实例小结

    mongodb基本命令实例小结

    这篇文章主要介绍了mongodb基本命令,结合实例形式总结分析了MongoDB数据库切换、查看、删除、查询等基本命令用法与操作注意事项,需要的朋友可以参考下...

    dawn-liu3652020-05-26
  • MongoDB分布式文档存储数据库之MongoDB分片集群的问题

    分布式文档存储数据库之MongoDB分片集群的问题

    这篇文章主要介绍了分布式文档存储数据库之MongoDB分片集群的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    Linux-18743072020-12-20
  • MongoDBMongoDB中javascript脚本编程简介和入门实例

    MongoDB中javascript脚本编程简介和入门实例

    作为一个数据库,MongoDB有一个很大的优势——它使用js管理数据库,所以也能够使用js脚本进行复杂的管理——这种方法非常灵活 ...

    MongoDB教程网6982020-04-24
  • MongoDBMongoDB凭什么跻身数据库排行前五

    MongoDB凭什么跻身数据库排行前五

    MongoDB以比去年同期超出65.96分的成绩继续雄踞榜单前五,这个增幅在全榜仅次于PostgreSQL的77.99,而其相对于4月份的6.10分的增长也是仅次于微软SQL Server排名...

    孙浩峰3892020-05-22