HarperDB、MongoDB与PostgreSQL差异对比:有什么区别?

2021年11月28日06:20:21 发表评论 1,205 次浏览

HarperDB、MongoDB与PostgreSQL有什么区别?许多人学习或理解与他们已经知道的事物相关的新事物。这是有道理的,这可能是一种本能。说到产品和技术,很多人会问“你有什么不同”,但到底有什么不同?你需要某种基线作为起点,因此你可以说,“与 X 相似,但因 Y 而不同。” 因此,比较、竞争分析和特征矩阵是了解哪些技术解决方案适合你的好方法。那么今天我们就来对三种不同的数据库系统做一个对比。

正如我的数据库架构和用例 文章中所述:在大多数情况下,并不是一个数据库比另一个更好,而是由于多种因素,一个数据库更适合特定用例。本文的重点不是确定哪个数据库是最好的,而是帮助揭示在为你的特定项目选择数据库时要考虑的因素。MongoDB 和 PostgreSQL 是目前最流行的两种工具,你可能已经知道有大量资源可以比较这两者。然而,由于 HarperDB 是一个全新的数据库,我认为将它混合在一起以提供进一步的清晰度可能会有所帮助。

再次参考我的数据库架构概述帖子:了解数据类型/结构、数据量、一致性、读写频率、托管、成本、安全性和集成约束等内容很重要。那篇文章对所有不同类型的数据库提供了一个很好的高级解释,但今天我们将得到一个更具体的HarperDB、MongoDB与PostgreSQL差异对比。


相似之处

这些技术的相似之处在于它们都用于存储数据,但这个简单的概念是相似之处的终结。然而,虽然 MongoDB 和 PostgreSQL 实际上彼此有很大不同,但 HarperDB 介于两者之间。

如前所述,有很多资源可以比较 MongoDB 和 PostgreSQL,它们都是很棒的数据库。这篇 来自 Educative 的文章是了解它们之间差异的好地方。因此,为了避免冗余,在这篇文章中,与两者相比,我将更多地关注 HarperDB。


定义

MongoDB被归类为 NoSQL 数据库。它是面向文档的,并使用带有可选模式的类似 JSON 的文档。

PostgreSQL是传统的 RDBMS(关系数据库管理系统)。主要用于关系数据,本质上是面向对象的。

HarperDB是一个分布式数据库,具有 REST API 和动态模式,支持 NoSQL 和 SQL,包括连接。(例如,你可以通过 NoSQL JSON 摄取数据,然后立即通过 SQL 查询)


HarperDB、MongoDB与PostgreSQL有什么区别?

MongoDB vs. PostgreSQL:PostgreSQL 是一种关系数据库,处理更复杂的过程、设计和集成。MongoDB 是一种 NoSQL 数据库,通常用于更简单、更非结构化的数据,非常适合应用程序开发。最终 PostgreSQL 会强制执行模式验证,而 Mongo 则不会。

HarperDB vs. MongoDB:MongoDB 是一种非常适合非结构化数据的文档存储,而 HarperDB 提供完整的文档存储功能以及企业级 ACID SQL。基准测试发现,HarperDB 比 Mongo 快 37 倍,而价格不到其一半。HarperDB 还具有原生 REST API,支持 JSON 上的 SQL,并且可以更易于使用和管理。在此处查看完整的基准测试。(Mongo 针对大规模写入进行了优化,但没有针对读取进行优化。HarperDB 的数据存储算法写在 LMDB 之上,可实现大规模读取和写入,从而实现整体高性能。)

HarperDB v. PostgreSQL:HarperDB 比 PostgreSQL 更灵活,对于复杂数据或严格一致性来说,这是一项很棒的技术,但 HarperDB 简化了安装、配置和管理方面的大部分工作。HarperDB 允许来自关系背景的开发人员将他们现有的 SQL 知识与数据库结合使用,该数据库还允许他们的团队使用来自相同数据模型的 NoSQL。


无障碍

MongoDB、PostgreSQL 和 HarperDB 都可以在任何地方运行;在云中、本地、数据中心等中。(没有像 HarperDB Cloud 和 MongoDB Atlas 那样的 PostgreSQL Cloud,但云提供商提供 PostgreSQL 即服务。)


底层实现

HarperDB、MongoDB与PostgreSQL差异对比:MongoDB 主要使用 C、C++ 和 JavaScript 语言进行编程。PostgreSQL 主要用 C编写, HarperDB用 Node.js 编写 (LMDB 用 C 编写,安装过程使用 Python)。

MongoDB 在底层使用 BSON(二进制 JavaScript 对象表示法)来加快查询速度。然后将其转换为 JSON 以在你打开你的收藏时读取。

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

HarperDB 不强制执行数据类型,它目前将所有数据属性存储为字符串,并且可以通过 SQL 和/或 NoSQL 查询数据。(HarperDB 还致力于使管理员能够显式设置属性类型(如数字或字符串)以进行性能调整。)


数据存储与架构

MongoDB 将数据存储为单独的文档而不考虑属性,PostgreSQL 将数据存储在传统的表和行中,HarperDB 将数据存储在表和行/对象中,默认情况下所有顶级属性都有索引。

HarperDB 具有运行在 LMDB 之上的独特数据存储算法,这使 HarperDB 能够在单个产品中摄取 JSON 文档和关系数据。当数据进来时,HarperDB 将其映射到数据模型;它不是 SQL 引擎或 NoSQL 引擎。(无论数据是如何摄取的,数据都是按照 HarperDB 数据模型存储的,可以通过 SQL 或 NoSQL 进行查询。)

MongoDB 和 HarperDB 是更分布式的架构,而 PostgreSQL 可能被认为是单体架构。


ACID 属性(原子的、一致的、隔离的和持久的)

HarperDB 和 PostgreSQL 都有企业级 ACID SQL 事务,这意味着数据的有效性是相当可靠的。

像 MongoDB 这样的 NoSQL 数据库通常采用最终一致性而不是 ACID 属性。(2020 年 5 月的一项研究 发现了一个错误,该错误对 Mongo 符合 ACID 的说法提出异议,因为 MongoDB 的事务并未完全隔离。)

HarperDB 和 PostgreSQL 都遵循 ANSI SQL 标准。


架构和表

HarperDB、MongoDB与PostgreSQL有什么区别?对于 MongoDB 和 HarperDB,使用 JSON 允许你灵活地更改架构而不会产生任何后果。文档在键/值对方面可能会有所不同。

MongoDB 和 HarperDB 都可以水平扩展,从而提高速度。HarperDB 具有双向表级数据复制。HarperDB 使用简单的发布-订阅模型;通过将数据发布到不同节点订阅并能够水平分布的不同“聊天室”来复制数据。

PostgreSQL 垂直扩展(随着它变大,需要更多空间或更多内存),因此需要停机升级。

对于像 PostgreSQL 这样的关系数据库,需要更改表才能进行任何更改。整个架构需要在创建时进行设计和配置。你稍后可以更改表,但这可能会导致数据库停机和应用程序中的错误。PostgreSQL 数据库可以使用外键在表之间显式链接数据并用于保持数据规范化。


HarperDB、MongoDB与PostgreSQL差异对比:用例和总结

如本文所述 ,由于PostgreSQL中的事务遵循ACID属性,因此对于金融科技等行业来说是一个不错的选择。当你绝对需要控制数据的状态时,请使用像 Postgres 这样的关系数据库。或者,如果你只有非结构化数据,或者正在处理大数据,那么将水平扩展方法与 MongoDB 之类的工具一起使用可能是个好主意。

HarperDB 可能比现有系统更适合的用例包括需要 SQL 和 NoSQL、快速应用程序开发、混合云、集成、边缘计算、分布式计算、实时分析和高事务的项目。我们的团队还将第一个告诉你 HarperDB 何时不适合你的特定项目。当你需要全文索引、高度结构化的关系数据、跨系统的严格一致性或不信任开发人员来约束和维护数据的项目时,不建议使用 HarperDB。

对于某些用例,MongoDB 和 PostgreSQL 都是非常棒的工具。它们受到许多人的喜爱,HarperDB 的团队感谢他们为我们这样的技术的存在铺平了道路。HarperDB 的创建是为了扩展和融合 市场上出色的SQL、NoSQL 和NewSQL产品的功能,以填补空白并确保开发人员能够持续使用正确的工具来完成工作。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: