【译】PostgreSQL优于其他开源数据库的特性:Part I

和同事 DCOS 工程师共同翻译了一篇稍有争议的文章,这篇译文主要从功能特性方面介绍 PG ,观点中肯,难度适中,由于这篇文章在描述 PG 功能特性时拿其它开源数据库相比,在翻译之前有考虑过这样可能不太妥当,但这篇文章突出了 PG 功能特性,仍然是一篇好文,并且此文只做技术讨论,并没有带着情绪去写,详见:

转自我们部门的公众号”三墩IT人” 【译】PostgreSQL优于其他开源数据库的特性:Part I

译者

谭峰(francs) 浙江移动PG数据库专家
朱智武 浙江移动DCOS工程师

作者

原文作者:Lisa Smith
作者博客:https://www.compose.io/articles/author/lisa-smith/

你可能会问自己 “为什么选择PostgreSQL ?” 开源数据库我们有好几种选择(本文参考 MySQL, MariaDB 和 Firebird ), 那么 PostgreSQL 具有哪些其它开源数据库不具备的特性呢? PostgreSQL 宣称它是“世界上最先进的开源数据库。” 我们将会给出 PostgreSQL 这么宣称的原因。

本系列 Part I,我们将看看数据存储 – 数据模型, 结构, 数据类型, 和大小限制. Part II 我们将更关注数据操作和检索。

数据模型

PostgreSQL 不仅仅是关系型,它也是对象关系型,这使它一定程度优于其他一些开源数据库,例如 MySQL,MariaDB 和 Firebird。

一个对象-关系数据库的一个基本特征是支持用户自定义对象和它的属性,包括数据类型、函数、操作符,域和索引。这使得PostgreSQL非常灵活和健壮,除此之外,复杂的数据结构可以被创建,存储和检索,下面的例子可以看到标准RDBMS不支持的嵌套和复合结构。

数据类型和结构

PostgreSQL 有着广泛的被支持数据类型列表,除了 numeric, floating-point, string, boolean 和你能想到的数据类型(并且支持各种选项),PostgreSQL 还引以为傲地支持 uuid, monetary, enumerated, geometric, binary, network address,bit string, text search, xml, json, array, composite 和 range 数据类型,以及一些内部对象标识和日志位置类型。公平地说,MySQL,MariaDB 和 Firebird 在不同程度上支持上面部分数据类型,但仅仅 PostgreSQL 支持以上全部数据类型。

让我们仔细看看其中几个数据类型:

网络地址类型

PostgreSQL提供用于存储不同网络地址的类型, CIDR (Classless Internet Domain Routing) 数据类型适合IPv4和IPv6网络地址,CIDR的一些例子:

  • 192.168.100.128/25
  • 10.1.2.3/32
  • 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128
  • ::ffff:1.2.3.0/128

也可用于网络地址存储的是INET数据类型, 用于IPv4和IPv6主机,子网是可选的,MACADDR 数据类型用于存储硬件标识的 MAC 地址,例如 08-00-2b-01-02-03。

MySQL和MariaDB 提供一些 INET 函数用于网络地址转换,但不直接提供用于存储网络地址的数据类型, Firebird 也没有网络地址类型。

多维数组

因为PostgreSQL是对象关系数据库,数组的元素可以存储大多数现有的数据类型,通过将方括号附加到使用数组类型的字段后就能定义数组,可以指定数组大小,但不是必需的。让我们通过一个假日野餐菜单展示数组的使用:(译者注:建表脚本有错误,创建表会报错,作者大概只是展示数组数据类型的使用。)

【译】PostgreSQL优于其他开源数据库的特性:Part I

MySQL, MariaDB, 和 Firebird 不具备这种能力,如果想把类似这样的数组存储在传统的关系数据库中,替代的解决方法是为数组值每一行创建单独的表。

几何类型

地理数据正迅速成为很多应用程序的核心需求, PostgreSQL一直支持各种各样的几何数据类型,如点、线、圆、多边形。路径数据类型就是其中之一。路径中包含多个点序列,可以开放(开始和结束点是没有连接的)或封闭(开始和结束点连接)。让我们用一个徒步旅行的例子作为一个路径,在这个例子中我的徒步旅行路线是循环的,开始点和结束点相连,所以我的路径是闭环的。坐标内的圆括号意味着一个封闭的路径而方括号表示开放的路径。

【译】PostgreSQL优于其他开源数据库的特性:Part I

PostGIS 扩展增强了 PostgreSQL 现有的几何数据特性,例如额外的空间类型,函数,操作符和索引,它支持位置特性以及栅格和矢量数据数据。它还提供了与各种第三方开源和专有的地理空间处理工具的互操作性,例如映射和呈现数据.今年一月份我们为Compose PostgreSQL部署提供了PostGIS:为所有Compose PostgreSQL部署的PostGIS。

注意在MySQL 5.7.8 和MariaDB 5.3.3,才添加了支持OpenGIS地理信息标准的数据类型扩展, 这个版本的 MySQL和之后的 MariaDB版本提供了和 类似PostgreSQL方便使用的几何数据类型的数据类型存储。 然而,在MySQL和MariaDB,数据值必须先使用简单的命令转换为几何格式之后才能插入到表中,Firebird目前并不提供地理数据类型。

JSON 支持

PostgreSQL 的 JSON 支持在 SQL 数据库中支持非结构化数据,当数据结构由于处在开发中需要灵活性或数据对象包含了未知的字段时是有用的。

JSON数据类型强制检查 JSON 有效性,这让你可以使用专门的 JSON 操作符和 PostgreSQL提供的内置函数用于查询和操作数据。也可用JSONB类型 – JSON 的二进制形式,与 JSON 不同的是它删除了数据中的空格,保存对象的顺序不一样,存储层面做了优化,只有最后一个重复的键值保留。JSONB通常是首选的格式因为它需要更少的空间存储对象,可以被索引,处理速度更快,因为它不需要被解析,要了解更多,请查看: Is PostgreSQL Your Next JSON Database?

在MySQL 5.7.8 和 MariaDB 10.0.1 支持JSON对象, 虽然目前在这些数据库中有不同的函数和运算符支持 JSON,它们的索引方式与 PostgreSQL 的 JSONB不同。 Firebird 目前仅支持文本对象的 JSON。

创建新的数据类型

如果 PostgreSQL 提供的数据类型列表还不够,您还可以使用 CREATE TYPE 命令创建新的数据类型,例如复合类型,枚举,范围等。 这里是一个创建并且使用新创建的复合类型的例子。

【译】PostgreSQL优于其他开源数据库的特性:Part I

MySQL,MariaDB,和Firebird不提供这种强大的功能,因为它们不是面向对象的。

Data size

PostgreSQL可以处理大量的数据。下面列出了当前的大小限制:
【译】PostgreSQL优于其他开源数据库的特性:Part I

在 Compose 平台我们会自动部署扩展,所以您不必担心数据增长。但是,正如每位 DBA 知道的,最好警惕容量上的限制,我们建议您在创建表和索引时遵从常规性的指导。

相比之下, MySQL和MariaDB行大小限制为65535字节,Firebird 宣称最大行大小为 64KB ,通常数据大小被操作系统文件大小限制。因为PostgreSQL可以将表数据存储在多个小文件,它可以绕过这个限制 – 不过需要注意的是太多的文件可能对性能造成负面影响。然而,MySQL和MariaDB 确实比 PostgreSQL 单表支持更多的列(最多4096列,与数据类型有关)和更大的单表大小,但在罕见的情况下,现有的PostgreSQL限制需要被超过。

数据完整性

PostgreSQL毫无疑问符合 ANSI-SQL:2008 标准, 完全遵从 ACID (Atomicity, Consistency, Isolation and Durability) ,并且它因稳定性和事务完整性而闻名。它支持的主键,约束,外键,唯一约束,非空约束,以及其它数据完整性特性确保只有合法的数据被存储。

MySQL 和 MariaDB 使用合InnoDB / XtraDB存储引擎可兼容更多的 SQL 标准,他们现在为SQL模式提供一个STRICT选项,SQL模式决定了使用的数据检查方法。然而,基于使用的模式,非法和截断的数据可能会被插入或更新时创建。这些数据库现在都不支持检查约束,外键约束也存在许多附加说明。此外,数据的完整性可能会大大取决于所选择的存储引擎。 MySQL ,MariaDB 长期侧重于速度和效率甚于遵从完整性和遵从性。

总结

PostgreSQL有很多功能。使用一个对象-关系模型,它支持复杂的结构和内置的丰富用户定义的数据类型,它提供了广阔的数据容量和可信的数据完整性,你可能不需要我这里回顾的所有高级特性,但由于数据需求发展很快,拥有所有这些毫无疑问具有明显的好处。

如果PostgreSQL不能完全满足你的需求,或者你更倾向于更多选型, 那么看看我们在 Compose 平台提供的NoSQL数据库或其他开源SQL数据库,它们每个都有自己的优势,Compose 坚信选择合适的数据库为当务之急,作为解决方案,有时候这也意味着需要选择多个数据库。

准备好了看更多关于 PostgreSQL 的内容吗?在本系列的 Part II ,我们将看看PostgreSQL的数据操作和检索,包括虚拟表,查询功能,索引和语言扩展。

阅读原文

原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/240109.html

(0)
上一篇 2022年2月15日
下一篇 2022年2月15日

相关推荐

发表回复

登录后才能评论