资讯详情

为何PostgreSQL是世界上最好的数据库?

作者:柯克·罗伊巴尔 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吗?~即使你从未升级过硬件,五年投资回报率还是很长的解决方案,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/

标签: 免螺钉连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台