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


    本文以当前流行的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】

    【编辑推荐】

  • 相关阅读:
    Charles:rewrite重写功能
    Vue中provide和inject 用法
    vue中install方法
    vue自定义组件(通过Vue.use()来使用)即install的使用
    Eelectron 中的remote模块
    理解Vue中的Render渲染函数
    Vue.js中this.$nextTick()的使用
    postman请求本地接口Error: connect ECONNREFUSED 127.0.0.1:8083
    1016 Phone Bills (25 分)
    CF842E Nikita and game
  • 原文地址:https://www.cnblogs.com/linyinmobayu/p/14246617.html
Copyright © 2020-2023  润新知