MariaDB 和 PostgreSQL 有什么区别?


MariaDB 和 PostgreSQL 有什么区别?

MariaDB 和 PostgreSQL 都是开源关系数据库,以表格式存储数据。MariaDB 是 MySQL 的修改版,由 MySQL 的原始开发团队制作。PostgreSQL 是一个对象关系数据库管理系统,可以提供比 MariaDB 更多的功能。PostgreSQL 提供实体化视图和部分索引,可提高读取性能。MariaDB 则可大规模提供更大的灵活性和容错能力。

MariaDB 和 PostgreSQL 有什么相似之处?

MariaDB 和 PostgreSQL 都是成熟的开源数据库系统,可提供数据存储的高可用性、并发性和一致性。以下是两者之间的一些具体相似之处。

数据模型

MariaDB 和 PostgreSQL 都是关系数据库系统,它们以表格式将数据存储为行和列。两种架构都支持主键和外键以及一系列数据类型和格式。每个架构都提供强大的数据建模和不同信息表之间的关系构造。MariaDB 和 PostgreSQL 均使用索引来支持查询性能,因此可以按优化的方式快速查询。

可延展性

MariaDB 和 PostgreSQL 提供多种机制来扩展其功能。例如,开发人员可以使用这两个系统,以各种编程语言创建自定义函数。可以使用这些用户定义的函数(UDF)来执行具体的操作。

当满足特定条件时,还可以使用存储过程和触发器来运行规定的操作。例如,可以根据存储环境中的特定事件使用它们来强制执行数据完整性。

语言和语法

作为关系数据库管理系统,MariaDB 和 PostgreSQL 使用 SQL 作为其标准语言。在这两个系统中,可以使用大多数相同的 SQL 命令并获得相同的结果。

它们都支持开窗函数和公用表表达式等高级 SQL 功能。可以创建较小数据子集的视图,可从多个表中获取这些子集。这些附加功能提高了这两个系统执行复杂查询的能力。

架构差异:MariaDB 与PostgreSQL

尽管 MariaDB 和 PostgreSQL 有一些相似之处,但它们也有几点用来区分的关键区别。

数据类型

MariaDB 提供广泛的数据类型,包括整数、浮点数、字符串和日期。除此之外,MariaDB 还支持 ENUM、SET 和空间数据,以及有助于存储非结构化数据的 LONGTEXT 列。

PostgreSQL 数据库还提供广泛的数据类型选择,包括浮点数、整数、字符串、日期、数组和布尔值。PostgreSQL 还支持适用于非结构化数据的通用唯一标识符(UUID)、JSON 和 JSONB。

索引和部分索引

由于 MariaDB 提供列式存储和并发处理,它无需索引即可查询大量列或行。但是,默认情况下,MariaDB 确实支持 B 树索引。它有四个主要索引:主键、唯一索引、普通索引和全文索引。 

PostgreSQL 提供更广泛的索引选项,例如 B 树、通用搜索树(GiST)、空间分区 GiST(Sp-GiST)、块范围索引(BRIN)、广义倒排索引(GIN)和哈希索引。除此之外,PostgreSQL 还提供部分索引并支持相互包容性索引,因此您可以同时使用多个索引。 

复制

MariaDB 支持使用 MariaDB 复制协议进行异步复制。MariaDB 维护主要数据库和辅助数据库上的数据副本。执行更改后,主要数据库系统会异步记录副本数据库的更改。MariaDB 还允许将多个主要数据库复制到单个副本数据库,这有助于改善数据整合。

PostgreSQL 同时使用异步复制和同步复制。异步复制会记录从主要数据库到副本数据库的更改。同步复制将主要数据库系统的更改提交到辅助数据库。此过程发生在事务完成之前,这有助于提高数据的一致性和完整性。 

列式存储

在面向行的数据存储中,数据块按顺序存储构成整行的每个连续列的值。在面向列的存储或列式存储中,每个数据块存储多行的单列值。

虽然 MariaDB 的核心不支持列式存储,但 MariaDB 中有一些存储引擎支持此功能。更新至 10.5.4 版本之后,您可以使用像 ColumnStore 这样的存储引擎,这些引擎支持 MariaDB 服务器的列式存储。 

PostgreSQL 通过名为 cstore_fdw 的开源扩展提供列式存储。

性能:MariaDB 与PostgreSQL

MariaDB 和 PostgreSQL 根据使用案例提供不同的性能优势。

速度

MariaDB 和 PostgreSQL 都有高级查询优化器,旨在高效地运行查询。速度因查询的复杂性、相关索引的可用性以及优化器选择查询计划的有效性而异。

在一些性能基准测试中,PostgreSQL 的表现要稍微优于 MariaDB。

但是,MariaDB 在更新的版本中使用基于成本的优化器(CBO),该优化器可以改善查询规划并加快数据访问。

可扩展性

MariaDB 为垂直可扩展性提供了更多选项,即随着工作负载的增加,您可以增加基础设施容量。MariaDB 具有可插拔的存储引擎,例如 InnoDB 和 ColumnStore,这些引擎可以利用硬件增强功能来提高性能和可扩展性。 MariaDB 还提供 Spider 存储引擎,用于在多个服务器上对数据进行分片和水平分区。

PostgreSQL 为水平可扩展性提供更多选项,即在多个节点上分发数据以提高性能。PostgreSQL 提供各种复制方法,包括流式传输和逻辑复制,以及通过表分区进行逻辑分片。

数据输入

MariaDB 提供一种非常灵活的数据输入方法。可以自动更正数据类型以匹配目标。可以创建其他规则,例如系统是立即接受数据还是触发提醒。如果您使用许多不同类型的数据输入,MariaDB 提供的灵活性就非常有用。

PostgreSQL 提供不同程度的灵活性。PostgreSQL 制定严格的数据完整性检查。如果数据与目标类型不匹配,则系统会显示错误并阻止您插入该数据。 

使用时机:MariaDB 与PostgreSQL

如果您想要更出色的灵活性,MariaDB 可发挥作用。MariaDB 提供了许多有效的存储引擎,因此您可以根据需要调整数据库系统。如果您需要事务支持、列式存储或高吞吐量,则可以自定义系统以实现所有功能。

如果您想要高级数据建模,PostgreSQL 是更理想的选择。可以支持复杂的数据类型,定义自定义数据类型,创建扩展,以及专注于特殊的数据要求。PostgreSQL 的索引功能还可为分析工作负载提供更出色的大规模性能。它非常适合需要稳定性、响应能力和可靠性的应用程序。

差异摘要:MariaDB 与PostgreSQL

 

MariaDB

PostgreSQL

数据类型

数据类型范围,包括用于非结构化数据的 LONGTEXT。

数据类型范围,包括 JSON 数据和用于非结构化数据的 UUID。

索引

提供 B 树索引和其他四种索引类型。

提供大量的索引选项,还提供部分索引选项。 

复制

异步、半同步和延迟复制。

多种复制方法,例如异步、同步、并行、流式传输和层叠。 

列式存储

从 10.5.4 版本开始提供 ColumnStore,其中允许使用列式存储。

其引擎中没有列式存储,但可以安装 cstore_fdw。

速度

新版本中基于成本的优化器可以改善查询规划和性能。

已在第三方基准测试中表现出更快的读取和写入性能。

可扩展性

更多纵向扩展选项。

更多横向扩展选项。

数据输入

MariaDB 提供灵活性,具有用于匹配数据类型的高级功能。

PostgreSQL 在数据输入方面更加严格。

AWS 如何帮助您满足 MariaDB 和 PostgreSQL 的要求?

Amazon Web Services(AWS)有许多产品可以支持使用 MariaDB 和 PostgreSQL。

Amazon RDS

Amazon Relational Database Service(Amazon RDS)是一个托管式服务的集合,可以简化在云中设置、运营和扩展关系数据库的过程。从七个热门引擎中进行选择,其中两个专用于 PostgreSQL 和 MariaDB。

Amazon Relational Database Service(Amazon RDS)for PostgreSQL 现已支持 PostgreSQL 版本 9.6、10、11、12、13、14 和 15。同样,Amazon RDS for Maria DB 支持 MariaDB Server 版本 10.3、10.4、10.5 和 10.6。

以下是您可以立即使用 Amazon RDS 的方法:

  • 在几分钟内部署可用于生产的 PostgreSQL 和 MariaDB 数据库,不仅经济实惠,而且可调整硬件容量大小
  • 重新使用与现有数据库相关的代码、应用程序和工具
  • 查看关键运营指标,例如计算、内存和存储容量利用率

Amazon Aurora

此外,Amazon Aurora 是关系数据库管理系统(RDBMS),它提供以下功能:

  • 内置安全性
  • 连续备份
  • 无服务器计算
  • 最多 15 个只读副本
  • 自动多区域复制
  • 与其他 AWS 服务集成

Aurora 兼具高端商用数据库的速度和可用性,以及开源数据库的简单性和成本效益。可以轻松地将 MariaDB 和 PostgreSQL 工作负载迁移到 Aurora,从而体验当前设置的三倍吞吐量。

立即创建账户,开始在 AWS 上使用 PostgreSQL 和 MariaDB。

使用 AWS 的后续步骤

开始使用 PostgreSQL 进行构建

了解如何在 AWS 上开始使用 PostgreSQL

了解更多 
开始使用 MariaDB 进行构建

了解如何在 AWS 上开始使用 MariaDB

了解更多