weibo
作者weibo2020-04-13 17:06
副总, 北京象前行信息科技有限公司

PostgreSQL是世界上最好的数据库

字数 5210阅读 1745评论 0赞 1

作者: 柯克·罗伊巴尔

Kirk Roybal是PostgreSQL的狂热者,并定期为2ndQuadrant博客做贡献。

首先声明,我不是标题党 , 刻意诱惑点击或夸大描述 。我打算证明,无论有没有金钱方面的考虑,通过设计和实现,PostgreSQL都可以客观,可衡量地比当前可用的数据库更好。

我在世界上如何主张并证明这样一个崇高的说法?

继续阅读, 可爱 的 读者 。我保证不会浪费您的时间。

安全透明

PostgreSQL有一个安全邮件列表。PostgreSQL项目 组 与其他所有人 在 同时学习入侵向量。没有什么是隐藏的,任何发现的东西都以使商业供应商头晕目眩的速度 进行 工作。供应商提供了正在审查的软件 , 他们所提供的的缺陷列表会更简短 。

这意味着所有已知的攻击载体一旦公开就会被处理。这种安全响应能力在商业 领域 甚至是不可估量的。对于商业供应商来说,在问题得到解决之前保密对补救至关重要。PostgreSQL却没有这样的 限制 ,这 是不是很棒呢!

多版本并发控制对您有好处

PostgreSQL选择了一种并发控制方法,该方法最适合高INSERT和SELECT工作负载。

PostgreSQL的设计非常简单,只需记住更新和删除的跟踪开销。 重要的是 ,如果您尊重数据,则应该 尝试拥抱 PostgreSQL为您提供的数据安全性。

PostgreSQL 中 DDL 也能 参与事务。完全迁移或完全无效(最糟糕的一种无效方法 是近乎马上完成 的 废弃 )。测试 用例也可以重建 。需要重置测试工具吗? 答案是只需 回滚 事务 。

PostgreSQL支持符合标准的事务隔离形式,包括序列化,已提交读和可重复读。这些方法完全符合ACID 标准 。

PostgreSQL几乎能做所有事情

那么,您想 使用 NoSQL 、 Riak 、 REACT 、 Redis 、 Mongo等 的功能 吗?PostgreSQL 都具备这种能力 。不可否认, 不能包括 原始产品的所有细节。例如,PostgreSQL不会为您创建新的分片 , 那仍然是一个手动过程。但 总有办法 , 譬如 pg_partman。

您想要列数据存储吗?hstore 可供选择。

您不想再培训员工吗? 使用您已选择的语言继续拓展业务 。

您要部分复制吗?流式逻辑复制适合您。

您要从其他系统提取数据吗?PostgreSQL具有所有数据库中最活跃的 联邦 对象集合 -外部 数据包装器 ( FDW ) ,您可以 用 胶带和拉链将PostgreSQL挂接鳄鱼身上。 可以对他 像对待您 自己 的数据一样。

很难 想到 一个PostgreSQL不具备的功能,或者没有 PostgreSQL 扩展 所能 提供 的功能 。

扩展地图功能

可以说PostGIS社区可能比PostgreSQL社区本身更大。PostgreSQL的映射功能将其放在了一个类中,即使与非常昂贵的替代品相比也是如此。

PostGIS项目之所以选择PostgreSQL作为平台,是因为其易扩展性和丰富的数据功能。这些功能 可以 直接公开给其他任何项目使用。任何其他供应商,无论是商业的还是开源的,都无法回答这些问题。

PostgreSQL在开源领域正在引领发展

PostgreSQL项目是开源软件中最引人注目的组织之一。随着社区庞大的 力量 和 巨大 的增长,现在可以说它所存在的任何不足都会在其他供应商 意想不到 的时间内被 解决 。

几乎每天都有新的企业 级功能 特性发布,维护这些特性的员工是从每家公司都希望聘用的天才中挑选出来的,只是人手远远不够。

PostgreSQL建立了长期稳定的解决方案

PostgreSQL在内核中内置了逻辑复制。这允许跨版本迁移。您没有 被 锁定到特定的硬件或软件版本。该解决方案可以无限升级。

此外,许多平台都支持PostgreSQL,包括Linux的超稳定版本。你是否需要一个比典型的3~5年投资回报率还长的解决方案?即使你从来没有升级过硬件,PostgreSQL也会永远支持你。费用很容易计算 , 0美元。

声明式于命令式

数据库语言通常是声明性的。也就是说,您使用自己选择的内置语言编写了一个查询,描述了您希望看到的结果。该数据库尝试解码您的意图,并提供适当的结果。这是所有声明式编程模型的基础。在PostgreSQL中,这可以归结为将函数映射到SQL语言中的关键字,有时还会有几个算法选择来精确地实现每个声明。

关于命令式与声明式编程模型的 古老 争论中 ,我觉得声明式编程只是一种伪装的命令式编程。数据库查询语言中的每个声明性令牌最终都映射到一种或几种以命令式术语应用声明的算法。因此,由Henrietta定义的阻抗失配最终是由开发人员决定的。也就是说,如果开发人员的思维方式与数据库函数程序员的思维方式完全一致,那么就不会出现不匹配。

那么,假设一个模型只是另一个模型的调用特征,那么声明式模型最终将比命令模型更好 吗 ? 很高兴您这么问 ,因为这 正是我要强调的一点 。

PostgreSQL开发人员 比较 聪明。我不是开玩笑或忸怩作态。从字面上看,成千上万的贡献者为PostgreSQL项目做出了 数以 百万 计 的贡献,其中许多是对其他贡献者的改进。你头脑中想到的任何 情况 比 起 已经实现的 功能 更好的机会是非常低的。而且,即使你的想法更好,你也应该把它们贡献给PostgreSQL项目,以造福所有人,从而提高其他人的标准。

那么,是什么让PostgreSQL那么精彩呢?无需考虑公司 利益 即可在全球范围内共享思想。成千上万的开发人员正在花费数十万小时来做出更好的算法选择。 因 此,您的软件在每个版本中都会变得更好,通常不需要做任何特别的事情。

您说 , 这难道不是软件的本质吗?嗯,是的。但远不及整个世界 范围的人才 都参与到你的项目中来。PostgreSQL在开源社区中享有非常 显著 的地位。商业供应商将永远无法跟上开源项目在这个层次上所能提供的变化速度。向开源(尤其是PostgreSQL)的迁移就是证明。

商业供应商可以指出的明显优势已经所剩无几了。其中包括SMP支持、双向复制和外部工具。猜猜社区现在正在做什么,很可能 这些 在未来几年 将得以 发布 。

任意扩展PostgreSQL

PostgreSQL有一个充满活力的编写辅助软件的 技术 社区。这包括插入您喜欢的任何语言,并使用它以有用的任何方式扩展PostgreSQL。您是否喜欢perl字符串处理?好的, 可以 使用它。Python地图支持怎么样?当然,只需插入python 就可以进城了 。是否想使用PostgreSQL后端编写Web服务?太棒了,PostgreSQL会帮上忙。JSON?好。XML?PostgreSQL对所有这些都有直接的支持,并且提供了无限的支持。如果您认为可以使用一种很好的语言,则将其插入PostgreSQL,然后将其放在服务器端即可。

您可以创建自己的函数,数据类型,运算符,集合,窗口函数或几乎其他任何东西。没有看到您喜欢的功能?从源代码 拷贝 并自定义它。由于许可证,您可以自由地这样做。

PostgreSQL还提供了一些钩子函数,允许您扩展数据库而不必进行极端的编程。

这种吸收任何其他语言特性的能力是PostgreSQL所独有的。您可以使用现有的任何标准库来提供任何特性。你可以遵循标准,跟上变化,可以在PostgreSQL尚在运行时对其进行更新,并且可以免费完成所有操作。

大而广

PostgreSQL具有多种功能,可以充分利用已提供的硬件平台。分区,并行执行,部分索引,表空间,缓存和并行非阻塞维护例程(PostgreSQL中几乎所有东西最近都在使用CONCURRENTLY关键字)。

如果这还不足以满足您的需求,那么物理流复制将以便宜的价格为您提供 您所需数量的可读从节点 。分片 、 内存缓存 、 队列 、 负载平衡和连接池都可以在PostgreSQL中使用。还不够吗?逻辑流复制怎么样?您想对世界 范围 的数据库进行地理分区吗?好了,欢迎使用双向复制。

而且价格仍然是0 美元 。

索引丰富

PostgreSQL支持如此 多 的索引列表,以至于使人难以确定如何使用它们。GiST、spi - GiST、KNN GiST、GIN、BRIN和Btree都是可用的。还有很多其他功能 可以通过扩展实现 ,例如Bloom过滤器等。

PostgreSQL可以将它们与函数驱动的索引,部分索引,覆盖索引和全文搜索一起使用。这些扩展功能不是互斥的。您可以同时使用它们。

数据“推手”

已经提到的几种技术使PostgreSQL成为了出色的数据集成和分发平台。多种形式的复制与联合为几乎任何类型的数据系统提供了推 、 拉技术。

它们可以无限配置 、 组合在一起,以桥接数据库存储解决方案。所有这些都不需要任何ETL/ELT处理 程序 包。PostgreSQL就是这样做的。这个 地 球上最快的单一事实来源数据库是通过完全不将数据 从 源系统移出来实现的。这意味着数据始终是最新的,并且可以管理响应时间。

如果您无法忍受源系统的不可靠性,或者希望在查询端获得更好的性能,您还可以使用物化视图定期缓存数据,这些视图可以在查询时进行更新。

译者注:推手是太极术语,本地引入目的是描述数据的推送和拉取。

许可证是开放的

PostgreSQL有自己的许可证,主要基于BSD许可证。这允许更大的使用和分发自由。

该许可证适用于主要项目的所有代码,主要贡献扩展,客户端库,连接管理器以及大多数相关工具。

它是高度宽容的, 原文许可描述中 ,并 不涉及 可供购买。

很棒的文档

PostgreSQL项目要求任何提交代码的开发人员都 要 提供建议 描述 文档。该建议用于创建功能 的说明 , 建议 文档以多种格式提供。 此 文档还用于评估功能 模块 本身,并作为未来开发功能 模块 的参考。

总之,这意味着PostgreSQL依赖于文档。有很多PostgreSQL的开发人员已经学会了用C语言编码,数据库是如何工作的,以及如何 管理 PostgreSQL项目。这份文件是首屈一指的。

*测试驱动开发

PostgreSQL经过了广泛 、 详尽 的测试。每个错误都会通过测试来验证其存在,并编写代码来满足该测试。首先通过创建测试(和文档)来编写新功能,然后对其进行编码,直到 实现 该功能为止。

这些测试已集成到 组建 场中进行回归,因此bug不会(重新)出现在PostgreSQL的未来版本中。这意味着在每个构建周期中,将为每个版本的PostgreSQL运行每个测试( 当前测试 )。这是 大量的 测试,它确保PostgreSQL仍然是可用的最稳定的数据库。

PostgreSQL仅在所有回归测试通过后才发布。这提供了“ 0个已知错误”版本。

国际化和本地化

PostgreSQL的开发人员来自世界各地。自PostgreSQL成为大学毕业生项目以来,他们就一直在使用多种本地语言工作。国际化和本地化已经成为PostgreSQL的标准做法,而PostgreSQL不 再是 吸引全球商业市场的一个螺 钉 。

尽管PostgreSQL出于兼容性原因将某些国际化委托给操作系统,但许多翻译都嵌入到系统中,从而提供了无缝的语言过渡体验。

云端作业

PostgreSQL在云架构中使用ansible、kubernetes和来自多个云供应商的专有工具。有几种本地云实现可供选择,以匹配您的架构。

如果您想像牛而不是宠物那样对待服务器,PostgreSQL也为 您 提供了云服务。

符合标准

PostgreSQL在项目的整个生命周期内一直是标准的。由于PostgreSQL起源于大学的研究生课程,因此它已被用作许多SQL标准的参考实现。

PostgreSQL实现 了 SQL / Med和ANSI SQL。

根据出色的文档 描述 ,“ PostgreSQL支持SQL : 2016的大部分主要功能。完整的核心一致性需要179个强制性的特性,PostgreSQL至少符合160个。这几乎超过了任何其他数据库引擎。

语言功能

PostgreSQL实现了公共表表达式(CTE)、语言控制结构(if、for、case等)、结构化错误处理,以及您期望从成熟过程语言中获得的所有好处。

您信**服了吗?

我仍然可以谈论用户组、IRC频道、有解决方案的网站、博客文章和导师的奇妙社区。对于数据库是跨平台、跨体系结构和跨文化的,我可以从哲学的角度进行阐述。有无数个小时的演讲、视频和讲座。

或者,您可以直接下载它,看看它是否超出您的想象。我想您会感到非常惊喜。

原文链接:

https://www.2ndquadrant.com/en/blog/postgresql-is-the-worlds-best-database/

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广