共计 5069 个字符,预计需要花费 13 分钟才能阅读完成。
作者 : 柯克·罗伊巴尔 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 频道、有解决方案的网站、博客文章和导师的微妙社区。对于数据库是跨平台、跨体系结构和跨文化的,我能够从哲学的角度进行论述。有无数个小时的演讲、视频和讲座。
或者,您能够间接下载它,看看它是否超出您的设想。我想您会感到十分惊喜。
更多精彩内容,请关注以下平台、网站:
中国 Postgre SQL 分会官网公众号(技术文章、技术流动):
开源软件联盟 PostgreSQL 分会
中国 Postgre SQL 分会技术问答社区:
www.pgfans.cn
中国 Postgre SQL 分会官方网站:
www.postgresqlchina.com