波斯格雷斯是怎么回事?(文字记录)

2020-10-31 02:41:07

克雷格,你处于一个有趣的位置,因为你为Postgres这个项目做了这么多;你教过,你说过,你写过博客,你提供了无穷无尽的资源,你策划了PG周刊时事通讯…。我关注你的很多东西已经很长时间了,只是在你把东西放到那里的过程中学习,因为我是一个临时的postgres用户…。长期使用,但只是随意使用。我并不经常钻研细节,因为我就是不需要…。但是您已经做了所有这些,但是Postgres项目-它不是您的孩子;也许现在感觉像是,但它是一个长期开放源码的东西,有几十个人…。告诉我们你是如何参与这个项目的,也许你是如何爱上这个数据库的。

嗯。所以我认为Postgres本身很有趣--实际上我自己从来没有为它贡献过一行代码。有那么多人知道…的来龙去脉。我看过了,我看过了…。但也许有一天我真的会这么做。但是,是的,我的贡献主要是在社区方面。与他人交谈,与人共事。

实际上,我是这么想的--我想我加入Truviso的第一次机会是在很多年前的一家初创公司。我大约有十个人参加。他们将Postgres转换成一个流数据库;它基本上是在数据传入时执行MapReduce。大约12年前,在最后一次坠机事件中,它又回来了。基本上,复杂的事件处理是一种新的很酷、很性感的事情。我在大学时就熟悉它,但在那里并没有真正使用过它。我们基本上是把它转化成真正先进的东西,处理大量的数据。我们有这样的客户-我想MySpace是我们当时的客户之一,当时他们还很火爆,这让它有了很好的历史。

从那时起,我们制造了一个产品,公司发展壮大,缩小到大约10人,我转向了…。几年后,我发现自己在Heroku。这真的很有趣,因为它有点像您--您是一名应用程序开发人员,它就在那里,您正在使用它…。即使在Heroku内部,我们也有50名员工,他们说“是的,Postgres很好。管他呢。我会用它的。“。我就像是“伙计们,你们这里有一个很棒的数据库。”我发现自己开始越来越多地写博客。

我是个懒惰的博客写手。我想我有一篇博客文章在谈论我为什么要写博客,那是因为我很懒。一旦我解释了两遍,我就不想再解释了。所以我会写一篇关于它的博客文章。一旦我发现自己在教一些东西,比如“我们走吧”,它不一定要经过润色或有用;我告诉很多人写博客的时候,“不要担心把它做得完美。”把它拿出来就行了。它可能对很多人都有价值。“。

然后,当人们问你问题时,你只需发送链接,而不需要重写答案,对吗?

我当然喜欢。有时候我觉得自己是个彻头彻尾的混蛋,当我说“等等”的时候。我不会真的回答,我只是给你发一个博客文章的链接。“。我确实觉得自己有点像个混蛋。但这就是它存在的原因,对吧?

正确的。有点像“去读我的书吧”嗯,那就更糟了,因为你得买这本书。有了博客帖子,至少它是免费的。但我知道有些人会说“去读我的书吧。它会告诉你答案。“。就像,“好吧,我就在这里问了你这个问题。”但是如果它是在线的,而且你在问,发送一个链接是有用的。我明白。

嗯。因此,我发现自己真的有点像是在和应用程序开发人员交谈。我不是DBA,但我一直在帮助开发人员解决诸如“我如何解决这个问题?我如何对此进行故障排除?如果我回到Heroku-我们所有的Rails开发人员都要求一个数据库,我们有点想“这能有多难呢?”当时,亚马逊RDS甚至还不存在。我们看了看,说“Postgres是一个非常可靠的数据库。”它有良好的基本面,良好的核心…。我的意思是,如果你回顾一下它的历史,Postgres和许多其他数据库有着相同的根源。它在名字里。Ingres是最早的发源地之一,就像加州大学伯克利分校(UC Berkeley)数据库的鼻祖一样。后Ingres就是Postgres。

许多其他数据库都具有相同的ingres根,如SYBASE、SQL Server…。但是它现在已经有20多年的历史了,而且还很结实。所以我很早就开始了,在Heroku真正投入其中,运行并帮助构建Heroku Postgres数年,发现自己在西图斯做这件事,现在在Crunchy Data,构建和运营他们的云服务…。基本上,只是为人们运营一段时间的Postgres。

您可能比我更记得这段历史,但我是早期的Rails开发人员,我知道Rails(最初的堆栈)是MySQL;它是生产数据库。现在,它开始于SQLite,所以您可以只运行您的测试,但是人们-甚至Basecamp-运行mysql…。在某种程度上,就像mysql失宠了,postgres取而代之,就像Rails开发人员…的时代精神一样。我记不清为什么了。是什么触发了这一切。是因为Heroku的影响和Heroku Postgres吗?

我很确定这是赫鲁库的影响。在Heroku,你有一个Postgres数据库。每个Rails应用程序都有一个Postgres数据库。所以我很确定我们可以感谢Heroku做了很多事情。我希望我能说这是经过深思熟虑的具有战略意义的…。我们认为Postgres是一个很好的数据库;我们决定运行Postgres。我认为这是一个正确的选择,我们在这上面投入了很多钱来让它变得更好。

Postgres在很长一段时间里都不是最友好的,它也不是最性感的数据库。数据库能性感吗?

我不知道。我一直听到人们这么说,我就像是“真的吗?”但我知道你在说什么。也许令人兴奋是个更好的词…。

正确的。这不是我想象中的周五晚上(难以理解的)Postgres,但它有更酷的特点。杰森是个大块头。

[]所以我认为随着Heroku的出现,这一点真的发生了变化。实际上,我记得Heroku支持它的时间可能比Amazon RDS早了五年。我参加了很多亚马逊的会议;Re:Inventent是一个很大的会议,它是一个非常非常大的会议…。他们在一次又一次的产品发布会上发布产品公告,我记得当时在…。我早有预感,所以我确实去了那个主题演讲现场看了一下公告,诸如此类的…。全场起立鼓掌。我以前从未在产品发布的技术会议上看到过这种情况。

出现了长时间的停顿,起立鼓掌,演讲者又开始讲话,人们仍然站着为此鼓掌。我以前从来没有见过这种情况,我从来没有在技术会议上看到过这种情况,当你宣布一款新产品的时候。

那你为什么认为波斯格雷斯如此受人爱戴呢?我知道我将自己从mysql切换到postgres;主要是,当我切换到postgres时,可能仅仅是因为教程的流程,而这个笼统的(难以理解的)和我就在其中的…。但我记得我有一些数据--那是在05-06年间,我的mysql资料有数据一致性问题,我读了一些博客文章,关于mysql怎么可以什么都不记录,而且它不会在…上报告它。

那里有一些边缘的箱子,那里好像不太安全。Postgres就在那里,它的名声就是坚如磐石,始终如一,对你的数据更严格。因为在Rails中切换很容易,所以我可以非常快地切换。所以我刚刚开始将我所有的项目都转换过来,我发现它很容易使用,来管理…。所以这就是我的切换点。我真的没有比这更多的想法了。

我想如果你仔细看的话,波斯格雷斯就是这样。就像是“我会安全可靠的。我不会丢失你的数据的。“。当涉及到数据库时,这是一件很有趣的事情,对吗?保留您的数据而不会丢失。但这是Postgres更酷的价值--“我们不会添加闪亮的、新的东西。”MySQL的默认设置在一段时间内受到了一些抨击,因为在某些模式下,它会运行不同类型的存储引擎;某些存储引擎并不安全。MySQL-有趣的是,当你在MySQL中搜索时,它是不区分大小写的。

这真的很有趣,优步从MySQL换成了Postgres,然后Postgres又换成了MySQL。所以他们来来回回了几次,但当他们换到Postgres时,他们必须弄清楚-他们的所有应用程序逻辑都依赖于不区分大小写的东西,因为数据库就是不尊重大小写搜索。对我来说,这有点反功能。

我可以继续讨论MySQL与Postgres的比较;我认为MySQL是一个很好的数据库,而且做得很好。我认为Postgres真的是从安全和可靠开始的。然后我们说“现在有了这些丰富的用户功能。”有像JSON这样的东西,有像公用表表达式、窗口函数…这样的东西。有一套非常丰富的功能,我想我们会有一大堆分散在各处的功能。我现在可以给你一份要洗的清单,但每一种都是独一无二的。但它是从真正的安全和可靠开始的。

我查看了很多其他数据库,…。Mongo一开始并不安全可靠,并努力赶上这一点。它一开始也很容易使用。我认为开发人员已经开始尊重和欣赏这一点。你有腐败,你花了两个星期,嘿,数据就不见了。你怎么回答客户这个问题呢?

对于我们喜欢的所有闪亮的东西,每天都有新的框架推出,旧的和可靠的只是工作,我真的开始欣赏这一点,比如“嘿,我已经有了我的Rails堆栈或Python和Django堆栈,还有我的Postgres数据库,这个应用程序可以走得很远。”我不需要闪亮的新东西来建立一个有趣的业务。

[]是的。我也喜欢这一点,特别是对于数据库而言。这就像,在我的应用程序中,有一些地方我愿意尝试,我愿意去尝试前沿,有点流血,但得到那些前沿的功能。就像“这个数据库存储了我的数据,我相信它能做到这一点。”这就像是“这个数据库存储了我的数据,我相信它能做到这一点。”我想这就是我坚持下去的原因之一。它从来没有在背后捅过我一刀;我从来没有说过这样的话:“哦,波斯格雷斯,你把我给骗了。”

正确的。其他许多人也是如此-你有过这种糟糕的经历,是的,它闪闪发光,很新,但伙计,你会丢失Data…。我想你再也做不出更糟的事了。显然,我是一个数据专家,我喜欢数据库,但这比停机更有价值。好的,去停机一小时,或者几分钟,或者一天,但是不要丢失你无法取回的数据。如果你在银行或类似的地方,你弄丢了我的存款,我对你非常不高兴。

是啊,就是这样。那么帮我们了解一下历史吧,因为在所有这场开发运动到来之前,发生的一件事就是-我确信它在DBA中很受欢迎,在世界各地的不同人中也很受欢迎,但确实有一股浪潮,可能是Rails和Herokus,无论这种趋势是什么,人们开始选择Postgres,就像他们默认启动的数据库一样。但到那时,它已经存在了很长一段时间了。也许这就是它如此坚如磐石的原因。它有Ingres的根源,然后-我的意思是,到2006-2007年我开始使用它的时候,它已经作为Postgres积极开发了大约十年。

它没有JSON的功能,也没有我们在这一点上要研究的所有东西,但是帮助我们解开它的来源,谁在做这件事,以及它的历史,有点像Postgres周围的社区。

是的,我们可以追溯到加州大学伯克利分校。Stonebraker-我不知道他是否仅仅因为Postgres获得了图灵奖,但Postgres是其中的一个巨大的组成部分,他想要建立这种可扩展的数据库。所以他看着英格雷斯说:“我们怎样才能把它发展到下一阶段呢?”这是很多回溯过去的历史;ACM上有一篇很棒的文章,回顾了Postgres。我认为它经历了很多那段历史。

我认为,在加州大学伯克利分校推出它之后,有很多年,社区的良好管理,真的得到了所有的赞誉。我走到这里谈论它,但人们只是吃力地工作,确保它是坚如磐石的…。

我刚才有点麻烦,我列出了几个名字,然后我开始列出两个或三个或四个或五个…。我想你应该指出的是汤姆·莱恩。Tom Lane为开放源码…做出了如此多贡献。他帮助创建了jpeg、gif和png…。其中一些规格是他写的。他帮助编写了libjpeg,libpng…。这是20-25年前的事了,…。然后说:“是的,我有点厌倦了图像格式。这个数据库是怎么回事?让我花点时间在这上面。“。并且为大量的Postgres代码做出了贡献。如果有错误,就深入挖掘并确保它们被修复。

你有他,你有布鲁斯·蒙健,你有罗伯特·哈斯,你有安德烈斯·弗洛因德,你有斯蒂芬·弗罗斯特,你有乔·康威,你有西蒙·里格斯,你有一大群人坐在这里,为Postgres工作。你可以去看看所有的公开活动;它们都在邮件列表中。开发仍然像15年前那样发生,在邮件列表上,以补丁的形式出现。

非常有趣的是,他们有一组可靠的提交者,主要贡献者,次要贡献者…。那里有整个等级制度,不太正式。在社区内部有很多争论,比如“好吧,我们有没有一个主要的文档贡献者,或者社区贡献者或其他东西?”但是代码只是向前移动,我对它很感兴趣,因为它确实是这样工作的。

[]我们经常谈论开放源码,开放源码不再是一个新话题;我们谈论它很多。数据库说它们是开源的,但是Postgres确实是独一无二的。是的,它是开源的,其他数据库也是开源的,但没有人拥有Postgres。没有人可以拥有Postgres。你不能去买下一家公司,然后说-MySQL现在归甲骨文所有。他们拥有版权。他们拥有密码。

我想,理论上,如果你有几十亿美元,你想试着雇佣所有致力于此的人,也许是…。但我就是看不到这一点。核心结构以及交付和开发的方式--它在某种程度上属于开放源码的范畴。它是社区主导、社区运营、社区管理的…。

它甚至不像Linux,因为Linux-你有一个仁慈的独裁者。波斯格雷斯没有那个。它让人们处于平等的地位。

那么,是不是建立了一个治理结构,或者人们只是就邮件列表进行辩论?那它到底是怎么运行的呢?

是啊,关于邮件列表肯定有争论。它在…意义上是开放源码。[笑声]你根本无法摆脱这一点。所以有一个核心委员会,那是五个人。他们负责监督,并设立了一个实体来维护版权,诸如此类的事情。那里有一家Postgres实体拥有的许可证,他们在多家公司设立。核心团队不是谁说了算。核心是一种转向体。

所以有五个人,任何一家公司一次最多不超过两个人,…。我认为大约是40%,所以如果核心增长到7个,它可能会在这个意义上发生变化。但基本上,你没有任何一家公司的裁决集。所以它分布在各个公司的…上。但后来的实际发展--基本上,你赢得了一个承诺。你出现,你贡献,你审查补丁…。Postgres每年发布一次主要版本。事情出现了,关于邮件列表、补丁的想法,有争论和讨论…。有几个冲刺,提交补丁的节日。有一款应用程序…。而建立你的信誉的最大方法就是进来,为人们检查补丁。评论总是受欢迎的,总是有帮助的。如果你想建立信誉,你不会带着“嘿,我想解决这件事。”它会出现在邮件列表上并参与进来。

有两个邮寄列表是最大的。有一个pgsql黑客列表和一个pgsql用户。黑客名单是所有有趣的事情发生的地方。我读这本书是为了在晚上入睡。但是,如果你想了解Postgres的内部结构,这是一个值得深入阅读的迷人领域。

您之前说过您没有提交一行代码。您是否从可读性的角度深入到代码中去了?这是一个C项目,在这一点上可能有几百万行代码…。你有没有试着把它拆开,看看引擎盖下面呢?

有时候。不是在最近几年,但在我的职业生涯中,绝对是有时。这很有趣--它是C语言,但是我听人们说他们不喜欢写C语言,但是他们可以写Postgres C语言。它结构很好,定义也很好。如果您想看一个大型C项目的好例子,这是一个非常好的例子。

它必须是,保持这么长的时间,并保持积极的工作。在所有这些年的过程中,如果你有那么多的技术债务,如果你只是[难以理解]C代码,没有好的架构,好的重构,随着时间的推移,你只会慢得像爬行;或者爬得慢。我说得不对。你就会停止快速移动。我们看到Postgres保持着每年发布的节奏。新功能不断推出,它们只是一遍又一遍地建立在这个基础之上。

是的,这证明了在我之前很久就有很多人一直在拼命工作。社区中已经有一个积极的焦点来增加提交者的数量。我想现在40岁左右才有承诺…。但是你要在几年内赚到这些钱,而且你必须保持活跃。如果你不每一两年做点什么,你就会失去这个承诺。因此,它需要工作来赚取它,然后它需要工作来维持它。然后他们互相看着对方。你不能去提交一些东西--已经有一些版本加入了功能,而一些代码质量却不在那里,而工程师在下一个主要版本的剩余时间里没有编写新的功能,也没有进行清理。他们以一种良好的方式承担起自己的责任。所以这绝对是一种有趣的项目证明,我不知道有多少其他类似的例子。

因此,我们讨论了它的稳定性,以及它如何不会让您失望,以及Data Consistency…。还出现了这种NoSQL趋势,大量闪亮的、新的数据库从…中涌现出来。我不确定这是哪一年-可能是2010年,也可能是2012年…。时间就像是塑造成了一个连续体。但在这个范围内,就像是“看看这个东西能做什么”,而传统的关系数据库管理系统,如postgres和mysql,真的有点被抛在了公交车下,就像它们很乏味一样,它们没有你需要的…所需的灵活性。当时很多人离开postgres,或者干脆离开sql转到nosql…。而我们这些稍有耐心的人,Postgres只是不断地添加一些东西,就像是“等一下…”NoSQL有个不错的功能,你可以非常接近,或者足够好,而不必失去所有的资产担保和Postgres拥有的所有东西。《邮报》(Postgres)有一个很棒的功能,那就是,你可以非常接近,或者足够好,而不会失去所有的资产担保和Postgres拥有的所有东西。其中之一是json…。谈谈这个项目在过去十年中出现的一些令人兴奋的功能,这些功能真的不仅让它成为稳定的摇滚,而且还有点令人兴奋-它有很多很酷的东西。

.