我们提请您注意约瑟夫·赫勒斯坦 ( Joseph Hellerstein)在知识共享国际版权确认版本4.0(CC-BY 4.0)下发表的文章“回顾Postgres”的译文。 作者保留在带有正确链接来源的个人和公司网站上分发此作品的权利。由Elena Indrupskaya作翻译。 我将自己补充说,“一个迫切希望构建具有多版本的系统的程序员”似乎是Vadim Mikheev,但是我们都知道重写了GiST的“来自俄罗斯的志愿者”。注解
这是对Postgres项目的回忆,该项目在1980年代中期至1990年代中期由麦克·斯通布雷克(Mike Stonebraker)领导,在加州大学伯克利分校进行。 作为许多个人和历史的回忆之一,本文被要求作为有关《碎石者图灵奖》的书[
Bro19 ]。 因此,本文的重点是Stonebreaker的领导作用及其在设计方面的思想。 但是Stonebreaker从来都不是程序员,也没有干涉他的开发团队。 Postgres代码库是由一群才华横溢的学生和有时是全职大学程序员组成的团队的工作,他们比学生有更多的经验(并且薪水略高)。 在项目的最后几年里,我很幸运能作为一个学生加入这个团队。 我从参与该项目的一些年长的学生那里收到了有用的本文材料,但是任何错误或遗漏都是我的。 如果您发现其中任何一个,请与我联系,我将尝试修复它们。
1.简介
Postgres是Michael Stonebreaker最雄心勃勃的项目-他为创建通用数据库系统所做的认真尝试。 十年来,该项目所产生的文章,博士,教授和公司数量超过任何其他Stonebreaker活动。 该项目还涵盖了比他构建的任何其他系统更多的技术领域。 尽管存在如此巨大的固有风险,但Postgres也成为了Stonebreaker的研究团队及其对开源的主要贡献中最成功的软件工件。 这是成功的“第二系统” [
Bro75 ]的示例。 在撰写本文时,距项目开始已有30多年的时间,开源PostgreSQL系统是世界上最流行的独立开源数据库系统,也是第四大最流行的数据库系统。 同时,由Postgres创建的公司总计产生了超过26亿美元的交易成本(收购成本)。 无论如何,Postgres Stonebreaker的愿景产生了巨大的持久共鸣。
1.1。 背景知识
Stonebreaker在Ingres Berkeley研究项目[
SHWK76 ]以及他随后与Larry Rowe和Eugene Wong创立的关系技术公司(Relational Technology,Inc.)的职业生涯初期取得了巨大的成功。 (RTI)。
随着RTI在1980年代初期的发展,Stonebreaker开始致力于支持DBMS中数据类型的支持,这些数据类型已经超出了原始Codd关系模型(Edgar Frank Codd)的传统行和列。 当时一个令人鼓舞的例子是需要数据库来支持微电子行业的计算机辅助设计(CAD)工具。 在1983年Stonebreaker和学生的文章中,Brad Rubenstein和Antonin Guttman解释了该行业需要多少支持“新数据类型,例如多边形,矩形,文本字符串等”,“在相同的物理结构中进行“有效的空间搜索”,“复杂的完整性约束”以及“设计层次结构和多种表示” [
SRG83 ]。 出于这种动机,该小组开始进行索引编制(包括使用Guttman R树进行空间索引
编制 [
Gut84 ]),以及向关系数据库系统添加抽象数据类型(ADT)。 当时,ADT是一种流行的编程语言新设计,最早由Barbara Liskov(后来的图灵奖获得者)引入,并由Stonebreaker的新合作者Lonely Rowe进行了数据库应用程序编程的探索。 1983年SIGMOD唱片[
OFS83 ]中的一篇文章
裂石者和学生James Ong和Dennis Fogg在名为ADT-Ingres的Ingres扩展中描述了对该概念的研究,该研究结合了许多研究的表示概念在Postgres中提供更深入的支持和更好的系统支持
2. Postgres:一般信息
顾名思义,Postgres是Post-Ingres:一种旨在接受Ingres可以做并超越它的系统。 Postgres的一个独特功能是引入了最终称为数据库的对象关系属性:支持数据模型中的面向对象编程的概念以及数据库系统的声明性查询语言。 但是Stonebreaker还计划独立于Postgres中的面向对象支持解决其他许多技术问题,例如活动数据库规则,版本数据,第三级存储和并发性。
有两篇关于Postgres设计的文章:1986年SIGMOD [
SR86 ]的早期设计描述和CACM 1991 [
SK91 ]的中间描述。 Postgres的研究项目在1992年成立,这是一个新兴的初创公司Illustra的基础上逐渐消失的,该公司包括Stonebreaker,主要研究生Wei Hong,后来成为首席程序员Jeff Meredith。 在下面的列表中,1986年文章中提到的机会用星号*标记,而1991年文章中没有出现在1986年文章中的机会则用匕首
†标记。 下面列出的其他任务已在系统和研究文献中进行,但在任何设计规范中均未找到。 这些主题中的许多主题是在Postgres上讨论的很久以前就被其他人研究或改造的。 在许多情况下,Postgres都过时了,从现代的角度看,后来人们对话题的兴趣激增了。
- 数据库系统中的ADT支持
- 复杂对象(即嵌套数据或非第一范式数据(非第一范式-NF2))*
- 自定义抽象数据类型和函数*
- 新数据类型的扩展访问方法*
- 具有昂贵的用户定义功能的优化查询处理
- 活动数据库和规则系统(触发器,警告)*
- 实施为请求重写的规则†
- 实施为记录级别触发器的规则†
- 基于日志的存储和恢复
- 降低了复杂度的恢复代码,该代码将日志视为数据*,使用非易失性存储器作为提交状态†
- 不可重写的存储和临时查询†
- 支持新的深度存储技术,尤其是光盘*
- 支持多处理器和专用处理器*
- 支持多种语言模型
- 对关系模型的最小更改并支持声明性查询*
- 从内部API绕过查询语言访问“快速通道” †
- 多种语言†
我们将简要讨论Postgres在计算领域中对每个项目的贡献。
2.1。 数据库系统中的ADT支持
Postgres的明确目标是支持新的对象关系属性:扩展数据库技术以提供关系查询处理和面向对象编程的好处。 随着时间的流逝,最早出现在Postgres中的对象关系概念成为大多数现代数据库系统中的标准功能。
2.1.1。 复杂物体
通常,数据表示为嵌套实体或“对象”。 一个典型的例子是采购订单,其中包含一组嵌入式产品,其数量和价格。 关系建模的原则是,应使用多个对象(订单,产品)的平面表和相互联系的平面表(product_in_order)来重组和保存此类数据,而无需嵌套。 这种扁平化的一个典型原因是它减少了数据重复(因为产品在许多采购订单中都进行了冗余描述),从而避免了更新所有冗余副本时的复杂性或错误。 但是在某些情况下,您希望保留子视图,因为它对于应用程序来说很自然(例如,CAD中电路的布局机制),并且很少进行更新。 关于数据建模的争论至少与关系模型一样古老。
Postgres的主要方法是在数据建模方面“坐在两把椅子上”:Postgres将表保存为“最外部”数据类型,但允许列具有“复杂”类型,包括嵌套元组或表。 它的一种较不常见的实现方式(首先在ADT-Ingres原型中进行了研究)是允许将表类型列
声明性地声明为查询定义:“ Quel作为数据类型” [
SAHR84 ]
(Quel-Ingres查询语言。 ) 。
多年来,支持声明性查询和嵌入数据的“后关系”主题重新出现,通常是由哪个更好的争执引起的。 在1980年代和1990年代的Postgres时期,一些面向对象数据库的组织采纳了这个想法,并将其发展成为标准的OQL语言,然后不再使用。
在千年之交,对嵌套对象的声明性查询已成为XML数据库形式的数据库开发人员社区研究的一种困扰。 需要使用由此产生的XQuery语言(由SQL角色Don Donlin领导)来支持Postgres的Postgel语言中的复杂对象。 XQuery在行业中被广泛使用和广泛使用,但是从未受到用户的欢迎。 如今,在基于浏览器的应用程序中流行的JSON数据模型的查询语言项目中,正在重新审查这些概念。 与OQL一样,在最初拒绝声明性查询以支持面向开发人员的编程(“ NoSQL”运动)的组中,这些语言通常只是由于希望将查询添加回系统中而成为后来的添加。 同时,随着Postgres多年的发展(从Postquel查询语言转变为可满足许多目标的SQL版本),它包括对嵌入式数据的支持,例如通用DBMS中的XML和JSON。或进行重大重新设计。 争论以不同程度的成功进行着,Postgres的使用嵌套数据扩展来扩展关系结构的方法已反复证明,对于论点消退后的各方而言,它自然是一种最终状态。
2.1.2。 自定义抽象数据类型和函数
除了建议嵌套类型外,Postgres还提出了引入不透明,可扩展的ADT的想法,这些ADT存储在数据库中,但未被内核解释。 基本上,这一直是Codd关系模型的一部分:整数和字符串是传统的,但实际上,关系模型包含带有谓词的任何原子数据类型。 任务是在软件中提供这种数学上的灵活性。 要使用解释这些对象并对其进行操作的查询,应用程序程序员必须能够为系统中的这些类型注册用户定义的函数(UDF),并在查询中调用这些函数。 还希望用户定义的聚合(UDA)函数汇总查询中这些对象的集合。 Postgres数据库系统已经过创新,可以全面支持这些功能。
为什么要在DBMS中而不是在高级应用程序中使用这种功能? 该问题的典型答案是,与将数据“拉”到代码上相比,放置在数据上的代码的性能具有显着优势。 Postgres证明这在关系环境中是很自然的:在关系元数据目录中只需要进行很小的更改,并创建了第三方代码调用机制,但是查询语法,语义和系统架构却简单而优雅地工作。
Postgres在探索此功能方面领先于时间。 特别是那时,数据库研究界并不特别担心将不安全代码下载到服务器的安全隐患。 当业界注意到技术时,这开始被视为一个问题。 Stonebreaker在其初创公司Illustra中将Postgres推向市场,Informix在很大程度上获得了其支持DataBlade扩展包(包括UDF)的能力而被收购。 Informix凭借其基于Postgres的技术和强大的并行数据库产品,已成为对Oracle的重大威胁。 Oracle已对与Informix运行“不安全”用户C代码的能力相关的风险进行了负面营销方面的大量投资。 尽管Informix的财务舞弊(以及随后对其当时的CEO的联邦起诉)确实带来了更严重的问题,但仍有一些人将Informix的死亡归因于此活动。 几十年后的今天,所有主要的数据库提供商都使用一种或多种语言支持自定义功能,并使用新技术来防止服务器崩溃或数据损坏。
同时,2000年代大数据的技术堆栈,包括MapReduce现象,为Stonebreaker和David DeWitt [
DS08 ]“浪费了很多血”,是对Postgres想法的重新实现-将用户代码放置在请求中。 看来,MapReduce在很大程度上将Postgres软件开发思想与Gamma和Teradata等系统的并发思想结合在一起,并围绕重新启动具有极高可扩展性的工作负载的查询过程进行了一些小的创新。 基于Postgres,Greenplum和Aster的初创公司(大约在2007年)显示,对于大多数客户而言,并行化Postgres可能会比MapReduce带来更多的功能和实用性,但是在2008年,市场尚未为这项技术做好准备。 。 到目前为止,到2018年,几乎每个大数据堆栈都基本上可以使用UDF处理并行SQL工作负载,这与Stonebreaker和团队最初在Postgres中使用的设计非常相似。
2.1.3。 新数据类型的可扩展访问方法
关系数据库在1970年代初期与B树同时开发,B树帮助Codd实现了“独立于物理数据存储”的梦想:用B树建立索引提供了一定程度的间接性自适应地重组物理存储,而无需更改应用程序。 B树及其相关结构的主要局限性在于它们仅支持一维范围内的相等搜索和查询。 但是,如果您有典型的制图和CAD应用程序二维范围查询,该怎么办? 这个问题在Postgres期间就已为人所知,R-tree [
Gut84 ]由Stonebreaker组的Antonin Guttman开发,是旨在在实践中解决此问题的最成功的新索引之一。 但是,索引结构的发明没有解决在用于复杂系统的DBMS中支持多维范围的问题。 有很多问题。 您可以轻松地将访问方法(例如R树)添加到DBMS吗? 您可以教优化器了解指定的访问方法对某些查询有用吗? 您能否实现正确的恢复和同时访问? 这是Postgres行动计划中非常大胆的一点:软件体系结构问题会影响从优化器到存储层以及日记和恢复系统的大多数数据库引擎。 Postgres R树已经成为强大的驱动力,并且是访问方法层的优雅可扩展性及其与查询优化器的集成的典型示例。 Postgres使用不透明的ADT显示了如何注册抽象描述的访问方法(在这种情况下为R树),以及查询优化器如何识别抽象选择谓词(在这种情况下为范围选择)并将其与抽象描述的访问方法进行匹配。 在最初的工作中,对并发访问控制的关注较少:缺少一维键排序使在这种情况下B树中使用的锁不适用。
Postgres可扩展访问方法的有前途的特性激发了我在研究生院结束时的第一个研究项目之一:通用搜索树-GiST [ HNP95 ]和随后的索引理论概念[ HKM + 02 ]。 完成博士学位后,我在Postgres中实施了一个学期的GiST,这使向Postgres添加新的索引逻辑变得更加容易。 来自伯克利的Marcel Kornacker(Marcel Kornacker)的论文解决了由可扩展的“模板”类型的索引GiST [ KMH97 ]带来的复杂的恢复和同时访问问题。如今,PostgreSQL可以很好地将可扩展访问方法的原始软件体系结构(具有B树,GiST,SP-GiST和Gin索引)与广义搜索树接口(GiST)的可扩展性和激烈的竞争性结合起来。 GiST索引支持流行的基于PostgreSQL的PostGIS地理信息系统。 Gin索引在PostgreSQL中提供内部文本索引支持。
2.1.4。 使用昂贵的UDF的查询优化器
在传统的查询优化中,任务是最小化在处理请求时创建的元组流(以及因此的I / O操作)数量。 这意味着过滤元组(获取)的语句在查询计划的开始就很好,而可以生成新元组(联接)的语句则需要稍后执行。 结果,查询优化器将“推”取操作符置于连接下方,并随机排列它们,而将精力集中在对连接和磁盘访问的巧妙优化上。 UDF改变了这种方法:如果示例语句中包含昂贵的UDF,则UDF的执行顺序对于优化性能至关重要。 此外,如果选择运算符中的UDF确实花费大量时间,则有可能应该在连接之后执行选择(即,选择应为“上拉”-选择为“上拉”)。 考虑这些因素使优化器的搜索空间复杂化。 我把这个问题作为研究生院的第一个艰巨任务,最终成为我的硕士在伯克利的Stonebreaker和威斯康星州的博士学位工作的主题,在Jeff Naughton的指导下,但得到了Stonebreaker的不断帮助。 Postgres是第一个将成本和用户定义函数的选择性存储在数据库目录中的DBMS。 我们提出了优化问题,提出了采样操作的最佳顺序,然后沿着计划搜索中考虑的每个连接树的分支进行了采样操作的最佳轮换。 System R .
, , . , , .PostgreSQL , . , , , , 2018 . , , , , , . , Postgres .
, , , PostgreSQL (Neil Conway), « » .2.2。
Postgres . : , « », 1990- .
. — Datalog. « » : , , .
Datalog , - . Datalog — « » . , , ., , , , . .
(Eric Hanson), Ingres, Postgres. (Spyros Potamianos) PRS2: Postgres Rules System 2. . — . , Ingres. « » « ». , « » « 10%». , « », . ( ), .
PRS2 , , . Postgres (, ) Postgres 3.1 1991 ( ):
* :
* .
* (. .
* "" ) . -
* () . .
* . .
* . ...
* , , ? , , .
* ,
* ...
Postgres , «» — . PostgreSQL, - .
Postgres « » IBM Starburst MCC HiPAC. SQL . . , , , , « »: , . , - , , , , . , , , , Postgres.
2.3. X
Postgres :
Postgres, - . (write-ahead log — WAL), , . , Ingres 1970- , . [ SK91 ]
, , . , IBM Tandem . : - , , , .
X Postgres . , , , — « » « » . , , — . , «» . : , . Postgres, , , , [
Sto87 ]. Postgres .
« » , , . . , , , , Postgres. Postgres . PostgreSQL .
, PostgreSQL : . , PostgreSQL , Postgres, , Postgres . , (snapshot isolation) Oracle -, .(Mike Olson) , , B- Postgres B- Berkeley DB, Postgres. . Berkeley DB Sleepycat Corp., () PostgreSQL « ». : , (MVCC), , .PostgreSQL . Greenplum PostgreSQL . (Matt McCline)— (Jim Gray) Tandem. .. , NoSQL ( , WAL), (MMDB — main memory databases, ). , . , .
2.4.
在Postgres项目的中期,Stonebreaker签署了一项名为“红杉计划”的大型数字土地科学赠款的高管之一。 拨款提案的一部分是处理前所未有的数字卫星图像,需要高达100 TB的内存,即比当时在磁盘上存储的数据量更大的数据量。 提出的解决方案的基础是研究创建DBMS(即Postgres)的想法,该数据库可以方便地访问由自动驱动器替换的自动驱动器提供的半自动“三级”存储,以管理光盘或磁带库。
这导致了一些不同的研究。 其中之一是Inversion文件系统,它是通过关系DBMS提供UNIX文件系统抽象的一种尝试。 在针对红杉的评论文章中,Stonebreaker以他惯常的光顾“简单运动”的方式对其进行了描述[
Sto95 ]。 实际上,Stonebreaker(后来是Cloudera的创始人)的学生Mike Olson一直忙于这一工作,并且最终结果不是很简单[
Ols93 ],并且在实践中无法幸免。
几年后,Inversion Bill Gates在WinFS中“与风车抗争”-试图在关系数据库的后端重新创建世界上使用最广泛的文件系统。 WinFS附带Windows的开发版本,但从未进入市场。 盖茨后来称其为他对微软最大的失望。在这方面的另一个主要研究领域是在更典型的关系数据库的堆栈中包含一个第三级存储库,这是Sunita Sarawagi博士论文的主题。 主要主题是改变管理空间(即存储中的数据和内存的层次结构)和时间(协调查询调度和缓存以最小化不需要的I / O)的规模。 这项工作的关键问题之一是将大型多维数组存储在第三级存储中并对其进行检索,这与多维索引领域的工作相呼应。 关键思想包括将阵列分成多个部分,并将选择在一起的部分存储在一起,以及复制这些部分,以便数据部分可以具有多个物理“邻居”。 第二个问题是考虑磁盘如何成为三级存储的缓存。 最后,查询优化和调度应考虑到来自三级存储的数据加载时间长以及磁盘缓存命中(命中)的重要性。 这会影响查询优化器选择的计划以及完成计划所需的时间。
磁带和光盘上的机器人目前尚未广泛使用。 但是三级存储问题在云中非常普遍,云在2018年具有深层的存储层次结构:从附加的SSD到可靠的磁盘式存储服务(例如AWS EBS),再到归档存储(例如在AWS S3中),再到深度存储(例如,AWS Glacier)。 如今,这些存储层仍然相对分离,并且数据库实际上不支持有关包含这些层的端到端存储的推理。 如果Postgres在这方面进行调查的问题很快得到审查,我不会感到惊讶。
2.5。 多处理器支持:XPRS
Stonebreaker从未创建大型并行数据库系统,但他领导了这一领域的许多具有挑战性的讨论。 他的文章“无共享案例” [
Sto86 ]记录了该领域的大型
模块化体系结构解决方案。 他普及了该行业中使用的术语,并迷惑了没有共享资源的体系结构的支持,例如Gamma和Teradata,它们在2000年代被大数据社区重新发现。
具有讽刺意味的是,Stonebreaker对并行数据库领域的最重要贡献是称为XPRS的“共享内存”架构,这意味着“在RAID和Sprite上扩展了Postgres”。 在1990年代初期,XPRS是伯克利系统的“正义同盟”:它结合了缩写的Postgres Stonebreaker系统,John Ousterhout,分布式Sprite OS,Dave Patterson和Randy Katz RAID体系结构) 与许多跨学科工作一样,XPRS项目的实施实际上是由从事该项目的研究生决定的。 事实证明,主要贡献是由Wei Hong撰写的,他撰写了有关XPRS中的并行查询优化的博士学位论文。 因此,XPRS对文献和行业的主要贡献是在不显着解决与RAID或Sprite相关的问题的情况下优化并发请求。
在这三个项目中,Postgres和RAID对未来产生了巨大影响。 孟德尔·罗森布拉姆(Mendel Rosenblum)在日志结构文件系统(LFS)上的博士学位论文最能记住Sprite,这与分布式操作系统无关。 除修改单个副本外,所有三个项目都包含磁盘存储的新想法。 LFS和Postgres存储库管理器在将期刊作为主要存储库的新处理方式以及需要进行昂贵的后台重组方面非常相似。 一次,我仔细地探究了《坚石破坏者》中有关LFS与Postgres之间的竞争或有关他们之间关系的学术“炒作”,但我从未从他那里学到任何有趣的东西。 也许那时在伯克利,有人在“搅水”。原则上,并发“扩展”了查询优化器计划的空间,将查询优化过程中的传统选择(数据访问,连接算法,连接顺序)乘以并行选择的所有可能方式。 Stonebreaker调用“ Wei Hong优化器”的主要思想是将问题分为两部分:本着系统R的精神针对一个节点启动传统的查询优化器,然后“并行化”生成的计划,根据表示来计划并行度和每个运算符的位置数据和系统配置。 这种方法是启发式的,但是并发性增加了传统查询优化的成本,而不是相乘。
尽管Wei Hong的优化器是在Postgres上下文中开发的,但它已成为业内许多并发查询优化器的标准方法。
2.6。 支持多种语言模型
自Ingres以来就不断更新的Stonebreaker的兴趣之一就是数据库系统应用程序编程接口(API)。 在数据库系统系列的演讲中,他经常将GEM语言Carlo Zaniolo列为一个主题,对于理解数据库系统的支持者来说很重要。 对语言的这种兴趣无疑使他成为了Postgres的Larry Rowe的合伙人,这反过来又深深影响了Postgres数据模型的设计及其对象关系方法。 他们的工作主要集中于处理来自商业领域的大量数据的应用程序,包括处理业务信息和诸如CAD / CAM和GIS等新应用程序。
当时强加给Stonebreaker的问题之一是“隐藏”编程语言结构和数据库存储库之间的界限的想法。 各种竞争性研究项目和研究面向对象数据库(OODB)的公司都针对命令性的面向对象编程语言(例如Smalltalk,C ++和Java)和声明性关系之间的所谓“一致性损失”。模型。 OODB的想法是使编程语言的对象(如果需要)标记为“永久”并由内置DBMS自动处理。 Postgres支持存储嵌套对象和抽象数据类型,但是它的接口基于关系样式的声明式查询,假定程序员对数据库的访问是不自然的(它要求使用声明式查询),这也很昂贵(要求解析和解析)。优化)。 为了与OODB提供程序竞争,Postgres提供了所谓的Fast Path接口:本质上是用于内部数据库存储的C / C ++ API。 这使Postgres具有OODB学术基准性能的平均水平,但是它从未解决过让不同语言的程序员避免失去合规性的问题。 相反,Stonebreaker将Postgres标记为“对象关系”标签,并简单地绕过了将面向对象的数据库用作价值0亿美元的市场。 如今,几乎所有商业关系数据库系统都是“对象关系”数据库系统。
事实证明这是一个合理的解决方案。 如今,没有一种OODB产品以其预期的形式存在,并且在编程语言中“持久对象”的思想已被很大程度上抛弃。 相反,在Java Hibernate和Ruby on Rails等早期工作的推动下,对象关系映射(ORM)层的使用变得广泛,这使得可以相对平稳地将声明性数据库“适应”于几乎所有命令性对象。面向库的编程语言。 这种应用程序级方法不同于OODB和Stonebreaker对象关系数据库。 此外,轻量级键值存储也已成功以非事务和事务形式使用。 他们的发现者是Stonebreaker研究生Margo Seltzer,她与Postgres小组同时在Berkeley数据库数据库中工作,是她的博士学位论文的一部分,该组织预计分布式NoSQL键值存储库(例如Dynamo)的增长,MongoDB和Cassandra。
3.对软件的影响
3.1。 开源的
Postgres一直是具有一致版本的开放源代码项目,但一开始它旨在用于研究而非生产。
随着Postgres研究项目的缩减,两名Stonebreaker学生Andrew Yu和Jolly Chen修改了系统解析器,以可扩展的SQL变体替换原始的Postquel语言。 支持SQL的第一个Postgres版本是Postgres95,下一个叫做PostgreSQL。
一个开源开发团队开始对PostgreSQL感兴趣,即使伯克利团队其他成员的利益发生了变化,它也“接受”了它。 随着时间的推移,核心PostgreSQL团队保持相对稳定,并且开源项目已经高度发展。 最初,人们的工作重点放在用户可见的代码和功能的稳定性上,但是随着时间的流逝,开源软件社区已经从改进器到访问方法以及主要的事务和存储系统,极大地改变和改进了系统的核心。 自1990年代中期以来,PostgreSQL的内部组件中很小一部分来自伯克利学术团队。 她的最后贡献可能是我在1990年代下半年实施的GiST,但即使是开源社区(在本例中为俄罗斯)的志愿者也对其进行了实质性的重写和清除。 在PostgreSQL上工作的开源社区部分因其简化的过程而受到最大的赞誉,数十年来,它简化了创建高效且长期的项目的过程。
尽管在过去25年中发生了许多变化,但底层PostgreSQL体系结构仍然与1990年代初的Postgres大学版本非常相似,熟悉当前PostgreSQL源代码的开发人员将很容易阅读Postgres 3.1源代码(1991年)。 从源代码目录结构到过程结构和数据结构的所有内容都令人惊讶地相似。 伯克利Postgres团队的代码具有强大的骨干力量。
如今,PostgreSQL无疑是性能最高的开源数据库管理系统,它支持通常在商业产品中找不到的功能。 它也是(根据一个有影响力的评级网站)世界上最受欢迎的独立开源DBMS,并且其影响力还在不断增长:在2017年和2018年,它是世界上增长最快的数据库[
DE19c ]。 PostgreSQL被广泛用于各种行业和任务,鉴于它关注大量机会,这并不奇怪。
根据DB-Engines的说法,今天的PostgreSQL是仅次于Oracle,MySQL和MS SQL Server的世界第四大数据库,这三个数据库都是由特定公司提供的(MySQL是在多年前被Oracle收购的)[ DE19a ]。 在排名方法DB-Engines [ DE19b ]的描述中讨论了排名规则。Heroku是SaaS云提供商,现已成为Salesforce的一部分。 Postgres作为其平台的默认数据库于2010年在Heroku中引入。 Heroku选择Postgres是为了提高可靠性。 有了Heroku的支持,诸如Ruby on Rails和适用于Django的Python之类的大型应用程序开发平台开始建议将Postgres作为默认数据库。
如今,PostgreSQL支持扩展基础结构,该基础结构使通过用户定义的函数和相关修改为系统添加附加功能变得容易。 现在有一个PostgreSQL扩展生态系统,类似于llustra的DataBlade扩展软件包的概念,但是具有开源代码。 最有趣的扩展包括,例如,用于在SQL接口中进行机器学习的Apache MADlib库和用于并行查询执行的Citus库。
建立在Postgres上最有趣的开源应用程序之一是PostGIS地理信息系统,它使用了许多Postgres功能,这些功能最初启发了Stonebreaker启动该项目。
3.2。 商业实施
PostgreSQL长期以来一直是创建商业数据库系统的一个有吸引力的起点,因为它在“所有允许的”开源软件许可下使用,可靠的代码,灵活性和广泛的功能。 总结下面列出的收购成本,我们看到Postgres收到了超过26亿美元的收购成本。
请注意,这是按实际金融交易的美元来衡量的,并且比高科技中经常使用的价值更重要。 十亿美元的数字通常用于描述一整批股票的估计价值,但为了达到其未来的意义,与现值相比经常被夸大10倍甚至更多。 公司的收购交易美元衡量收购时的实际市场价值。 可以说,Postgres已创造了超过26亿美元的实际商业价值。与PostgreSQL相关的许多商业努力都集中在其主要局限性上:无需共享资源即可扩展到并行架构的能力。
PostgreSQL的并行化需要大量工作,但是由经验丰富的小型团队则非常可行。 今天,PostgreSQL开源行业分支(例如Greenplum和CitusDB)提供了这样的机会。 不幸的是,PostgreSQL在开放源代码中得不到更早的并行化。 如果PostgreSQL在2000年代初期在开放源代码中进行扩展以支持不带资源共享的体系结构,那么开放源代码大数据方向可能会以一种完全不同且更有效的方式发展。- Illustra是Stonebreaker的第二大创业公司,成立于1992年,是RTI在市场上推出Ingres时将Postgres商业化的。
Illustra实际上是为公司建议的第三个名称。 Illustra继承了绘画的主题,命名为Ingres,最初称为Miro。 由于商标问题,名称被更改为Montage,但同时也遇到了商标问题。
创始团队包括Postgres团队的一些核心人员,包括最近的研究生院毕业生Wei Hong和当时的高级程序员Jeff Meredith,以及Ingres Paula Hawthorn和Michael Ubell的毕业生。 Postgres研究生Mike Mike Olson成立后不久就加入了该公司,而我在Illustra的工作是优化昂贵的功能,这是我的博士学位的一部分。 Illustra : SQL92 , Postquel, Postgres DataBlade — . Illustra Informix 1997 400 . . [ Mon96 ], DataBlade Informix Informix Universal Server.
- Netezza , 1999 , PostgreSQL FPGA. Netezza , 2007 . IBM 1,7 . . [ IBM10 ].
- Greenplum PostgreSQL . 2003 , Greenplum PostgreSQL, API PostgreSQL, API . , Greenplum PostgreSQL , , Orca. Greenplum EMC 2010 300 . . [ Mal10 ], 2012 EMC Greenplum Pivotal. 2015 Pivotal Greenplum Orca . Greenplum Postgres API MADlib SQL [ HRS+12 ]. MADlib Apache. , Greenplum, Apache HAWQ, Pivotal, « » Greenplum (. . PostgreSQL) , Hadoop.
- EnterpriseDB 2004 , PostgreSQL , . EnterpriseDB Advanced Server Oracle, Oracle.
- Aster Data 2005 , . PostgreSQL. Aster , SQL MapReduce. Aster Data Teradata 2011 263 . . [ Sho11 ]. Teradata Aster , - Aster Teradata.
- ParAccel 2006 , PostgreSQL . ParAccel Postgres . 2011 Amazon ParAccel, 2012 AWS Redshift — ParAccel. 2013 ParAccel Actian ( Ingres) , , Actian. AWS Redshift Amazon — Amazon, , , Teradata Oracle Exadata. Postgres .
- CitusDB (CitusDB — ; Citus Data. — . .) 2010 , PostgreSQL . PostgreSQL, 2016 CitusDB API PostgreSQL PostgreSQL. 2016 CitusDB .
4.
Postgres, .
, , , Postgres « » (Second System Effect) (Fred Brooks) [
Bro75 ]. , , - . Postgres , , , . , , . — Postgres , . : , . , « » . , , . «-» , «-» .
, , « », , .
( 2001 (). — . .) 2000- « ». , Postgres. , , .
(Ralph Waldo Emerson), « — »., « » ( ), , , , , . , . , , - . , . , .
, Postgres, — , . « » PostgreSQL, , . , :
, , , 1995 . Postgres, , . , , , . [ Sto14 ]
, , , , « » . « ». , , , , Postgres. - , : « - ». ( ), .
5.
Postgres , , (Craig Kerstiens) PostgreSQL.
文学作品
- [Bro75] Frederick P Brooks. The mythical man-month, 1975.
- [Bro19] Michael L. Brodie, editor. Making Databases Work. Morgan & Claypool, 2019.
- [DE19a] DB-Engines. DB-Engines ranking, 2019. db-engines.com/en/ranking . (Last accessed January 4, 2019).
- [DE19b] DB-Engines. Method of calculating the scores of the DB-Engines ranking, 2019. db-engines.com/en/ranking_definition (Last accessed January 4, 2019).
- [DE19c] DB-Engines. PostgreSQL is the DBMS of the year 2018, January 2019. db-engines.com/en/blog_post/79 (Last accessed January 4, 2019).
- [DS08] David DeWitt and Michael Stonebraker. Mapreduce: A major step backwards. The Database Column, 1:23, 2008.
- [Gut84] Antonin Guttman. R-trees: A dynamic index structure for spatial searching. In Proceedings of the 1984 ACM SIGMOD International Conference on Management of Data, SIGMOD '84, pages 47–57, New York, NY, USA, 1984. ACM.
- [HKM + 02] Joseph M. Hellerstein, Elias Koutsoupias, Daniel P. Miranker, Christos H. Papadimitriou, and Vasilis Samoladas. On a model of indexability and its bounds for range queries. J. ACM, 49(1):35–55, January 2002.
- [HNP95] Joseph M. Hellerstein, Jeffrey F. Naughton, and Avi Pfeffer. Generalized search trees for database systems. In Proceedings of the 21th International Conference on Very Large Data Bases, VLDB '95, pages 562–573, San Francisco, CA, USA, 1995. Morgan Kaufmann Publishers Inc.
- [HRS + 12] Joseph M Hellerstein, Christoper Re, Florian Schoppmann, Daisy Zhe Wang, Eugene Fratkin, Aleksander Gorajek, Kee Siong Ng, Caleb Welton, Xixuan Feng, Kun Li, et al. The MADlib analytics library: or MAD skills, the SQL. Proceedings of the VLDB Endowment, 5(12):1700–1711, 2012.
- [IBM10] IBM to acquire Netezza, September 2010. www-03.ibm.com/press/us/en/pressrelease/32514.wss#release (Last accessed January 22, 2018).
- [KMH97] Marcel Kornacker, C. Mohan, and Joseph M. Hellerstein. Concurrency and recovery in generalized search trees. In Proceedings of the 1997 ACM SIGMOD International Conference on Management of Data, SIGMOD '97, pages 62–72, New York, NY, USA, 1997. ACM.
- [Mal10] Om Malik. Big Data = Big Money: EMC Buys Greenplum. In GigaOm, July 2010. gigaom.com/2010/07/06/emc-buys-greenplum .
- [Mon96] John Monroe. Informix acquires illustra for complex data management. In Federal Computer Week, January 1996.
- [OFS83] James Ong, Dennis Fogg, and Michael Stonebraker. Implementation of data abstraction in the relational database system ingres. ACM Sigmod Record, 14(1):1–14, 1983.
- [Ols93] Michael A. Olson. The design and implementation of the inversion file system. 1993.
- [SAHR84] Michael Stonebraker, Erika Anderson, Eric Hanson, and Brad Rubenstein. Quel as a data type. In Proceedings of the 1984 ACM SIGMOD International Conference on Management of Data, SIGMOD '84, pages 208–214, New York, NY, USA, 1984. ACM.
- [Sho11] Erick Shonfeld. Big pay day for big data. teradata buys aster data for $263 million. In TechCrunch, May 2011. techcrunch.com/2011/03/03/teradata-buys-aster-data-263-million (Last accessed January 22, 2018).
- [SHWK76] Michael Stonebraker, Gerald Held, Eugene Wong, and Peter Kreps. The design and implementation of ingres. ACM Transactions on Database Systems (TODS), 1(3):189–222, 1976.
- [SK91] Michael Stonebraker and Greg Kemnitz. The postgres next generation database management system. Commun. ACM, 34(10):78–92, October 1991.
- [SR86] Michael Stonebraker and Lawrence A. Rowe. The design of postgres. In Proceedings of the 1986 ACM SIGMOD International Conference on Management of Data, SIGMOD '86, pages 340–355, New York, NY, USA, 1986. ACM.
- [SRG83] M Stonebraker, B Rubenstein, and A Guttman. Application of abstract data types and abstract indices to cad bases. IEEE Trans, on Software Engineering, 1983.
- [Sto86] Michael Stonebraker. The case for shared nothing. IEEE Database Eng. Bull., 9(1):4–9, 1986.
- [Sto87] Michael Stonebraker. The design of the postgres storage system. In Proceedings of the 13th International Conference on Very Large Data Bases, VLDB '87, pages 289–300, San Francisco, CA, USA, 1987. Morgan Kaufmann Publishers Inc.
- [Sto95] Michael Stonebraker. An overview of the sequoia 2000 project. Digital Technical Journal, 7(3):39–49, 1995.
- [Sto14] Michael Stonebraker. The land sharks are on the squawk box, 2014. www.acm.org/turing-lecture-stonebraker (Last accessed January 4, 2019).