作者:柯克·罗伊巴尔 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频道、解决方案网站、博客文章和导师的美妙社区。我可以从哲学的角度阐述数据库是跨平台、跨系统结构和跨文化的。有无数个小时的演讲、视频和讲座。
或者,你可以直接下载它,看看它是否超出了你的想象。我想你会很惊讶的。

PG考试相关细节:http://www.pgccc.com.cn/
