数据时代的来临也是对人类快速有效处理数据的一个考验,现下最流行的三大数据库:PostgreSQL、MongoDB和Harper,专业人士也都在探讨这三大数据库哪个更好呢?实际上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的各种产品功能,进行了扩展与市场融合,填补了其中的空白与短板,并为开发人员提供了实用且高效的工具。
以上我们介绍了当下最流行的三大数据,希望能够对您有所帮助,如果您想了解更多相关信息,请您及时关注中培伟业。