绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
老鸟带你畅游PostgreSQL生态
2020-05-19 17:35:02

近年来,PostgreSQL越来越受到人们的欢迎和认可。用户的规模越来越大,商业的应用越来越多,相关的岗位越来越多。在DB-engines上连续两年获得了年度数据库的称号,并且在DB-engines的分数也是稳定、持续的上涨。作为PostgreSQL内核开发的老鸟,在2011年开始接触PostgreSQL内核开发领域,对于PostgreSQL社区,商业公司以及相关技术也算熟悉。本文主要以PostgreSQL整个生态介绍为主,希望初学者能够对PostgreSQL有一个体系化、清晰的认识。

PostgreSQL是什么?

PostgreSQL是一款关系型数据库或者叫做对象关系型数据库。
它拥有现代关系型数据库基本的特性:

  • 使用关系型模型作为数据模型;
  • 使用锁和WAL日志实现事务的原子性,使用查询处理器运行检测实现事务的一致性,使用锁和MVCC实现了事务的隔离性,使用WAL日志完成了事务的持久性;
  • 具有完善、先进的查询处理器,能够使用动态规划,遗传算法进行基于成本的代价优化;
  • 使用进程模型作为工作模型;
  • 具有丰富的系统函数、类型、接口、插件、前端工具、语法等等。

PostgreSQL的前世今生

现在被称为PostgreSQL的对象-关系型数据库管理系统是从加州大学伯克利分校写的POSTGRES软件包发展而来的。经过二十多年的发展,PostgreSQL是世界上可以获得的先进的开源数据库。

POSTGRES的实现始于 1986 年。个“演示性”系统在 1987 年便可使用了, 并且在 1988 年的ACM-SIGMOD大会上展出。在 1989 年6月发布了版本1给一些外部的用户使用。 为了回应用户对个规则系统的批评,在1990年6月发布了使用新规则系统的版本 2。 版本 3 在1991年出现,增加了多存储管理器的支持, 并且改进了查询执行器、重写了规则系统。为了避免占用过多的研究实践,伯克利的POSTGRES项目在版本 4.2 时正式终止。直到Postgres95发布前的后续版本大多把工作都集中在移植性和可靠性上。

在 1994 年,Andrew Yu 和 Jolly Chen 向POSTGRES中增加了 SQL 语言的解释器。并随后用新名字Postgres95将源代码发布到互联网上供大家使用, 成为初POSTGRES伯克利代码的开源继承者。到了 1996 年, 很明显“Postgres95”这个名字已经跟不上时代了。于是选择了一个新名字PostgreSQL来反映与初的POSTGRES和新的具有SQL能力的版本之间的关系。同时版本号也从 6.0 开始, 将版本号放回到初由伯克利POSTGRES项目开始的序列中。这就是我们现在看到的PostgreSQL系列。

始于大学研究,所以整个PostgreSQL具有高度的理论支撑,同时具有严谨的代码设计风格,工业级的代码设计。POSTGRES是由图灵奖的获得者Michael Ralph Stonebraker[1]初主持设计开发的,具有许多先进的数据库理念。其中许多概念在很久以后才出现在一些商业数据库系统中。ACM在公告中说,Stonebraker“发明了几乎所有现代数据库系统中使用的许多概念……并创立了许多公司,成功地将其开创性的数据库技术工作商业化。”

以下是关系型数据库的发展时间线与关系。

https://commons.wikimedia.org/wiki/File:RDBMS_timeline.svg

Stonebraker在1973年就在伯克利主持设计了数据库INGRES,而后他的学生基于INGRES的经验开发了Sybase数据库,后来发展成为了现在的SQL Server。后来Stonebraker作为Informix的顾问参与了设计开发。不论是Oracle还是DB2也都或多或少受到INGRES的影响。直接影响或间接影响了几乎所有商业数据库商业,并将其先进的数据库理念融入其中,而由其设计开发的POSTGRES更是兼具了上述先进理念,并成为世界上先进的开源数据库。

开源协议

PostgreSQL的开源协议[2]是类似于BSD协议或MIT协议,可以在任何目的下进行分发、闭源或者开源。只需将PostgreSQL协议内容附属到源码中即可。

开放友善的开源协议,工业级的代码开发,造就了现如今丰富的生态支撑。

丰富的生态

自Postgres95放到互联网上供人们使用后,渐渐形成了现在的社区。整个社区由不同国籍、不同背景、不同公司的人共同组成,也就无法被一家商业公司或者一个国家控制。

社区由国际核心组领导,具有自己的资产托管组织,自己的行为准则,具有社区管理的独立性。其次,社区有大量的赞助商支持,不会担心资金被把控,从而社区被控制。在各个国家都有自己的分会组织,比如国内就有PostgreSQL中文社区以及PostgreSQL分会,各个组织都在积极推进PostgreSQL的发展。

社区定期举行集会,只有交流、探讨、学习才能真正推动社区发展。目前主要会议有

  • PG con大会,在加拿大举行的全球开发者大会,汇聚了全球大多数的内核开发人员,讨论未来数据库的开发内容。
  • PG conf大会,美国用户者大会,聚集了大量的PostgreSQL用户,讨论数据库的使用方法、技巧。
  • PG open大会,用户者大会,在美国举行,更多的是公司,决策者提供技术交流,商业性质比较浓厚。
  • PG vision大会,商业推广讨论大会,每年6月份在美国举行。由EDB主导,探讨PostgreSQL未来的发展趋势。
  • PG 亚洲大会,主要在亚洲地区举行会议,一般都在日本,今年设在巴厘岛,讨论数据库开发、使用。
  • PostgreSQL中国用户者大会,每年11月份在国内举行,主要是用户使用交流。
  • PostgreSQL Conf大会,由PostgreSQL分会举行的用户者大会,主要是用户使用交流。

完善的网站体系

合理的分工

起初在PostgreSQL开源后便有了大量的粉丝,开始贡献自己的力量。这些贡献者在一起建立了社区,与PostgreSQL共同成长,成为了多个公司的,继而大力推动PostgreSQL的发展。

代码贡献者分为核心组、主要贡献组和一般贡献组。主要贡献组以上拥有代码提交权限。

社区核心组成员为:Peter Eisentraut, Magnus Hagander, Tom Lane, Bruce Momjian, Dave Page。

主要贡献组成员为:Joe Conway, Dave Cramer, Andrew Dunstan, Andres Freund, Stephen Frost, Etsuro Fujita, Peter Geoghegan, Andrew Gierth, Devrim Gündüz, Robert Haas, Álvaro Herrera, Petr Jelinek, Stefan Kaltenbrunner, Amit Kapila, Jonathan Katz, Alexander Korotkov, Amit Langote, Guillaume Lelarge, Heikki Linnakangas, Fujii Masao, Noah Misch, Thomas Munro, Michael Paquier, Paul Ramsey, Simon Riggs, David Rowley, Greg Sabino Mullane, Teodor Sigaev, Pavel Stehule, Tomas Vondra。

还有大量的志愿者,这些志愿者担任着许多的角色,网站维护、会议组织者、赞助费管理组等等,很好的运行着社区工作。

赞助商

周期性的版本迭代

https://en.wikipedia.org/wiki/PostgreSQL

PostgreSQL目前基本为第二季度发布beta版本,知道第四季度发布release版。每个版本开发周期为1年,版本维护时间为5年。

良好的商业互动

现在和PostgreSQL保持商业互动的公司主要有用户类型,数据库服务商,数据库产品厂商,以及云厂商。

  1. 数据库厂商[3]
    1. 推一款新的商业数据库,通常都需要背书,小厂产品,谁为你背书?、
      1. 有技术的厂商,很难挑战已有数据库市场格局。
      2. 有渠道的厂商,需要抓住窗口期,快速占领市场,避免重复造轮子,需要一款可以无法律风险,二次分发的开源数据库。唯有PG。
    2. 贡献核心代码,社区所有的用户都可以为之背书
  2. 数据库服务 | DaaS服务提供商
    1. 开源产品的服务提供商,能力如何体现?
    2. 架构能力?优化能力?管理能力?FIX BUG的能力?
    3. 贡献核心代码,社区所有的用户都可以为之背书
  3. 终用户(不靠数据库赚钱)
    1. 希望社区长久,期望可以享受免费的、可持续发展的、开源的、不被任何商业公司、不被任何国家控制的企业级的数据库。去O(贵),去DB2去sybase(产品下市、无法再升级、支持)
      1. PG用到人越多,越多人背书,使用越靠谱(事实证明,比商业数据库还靠谱),
      2. 抛砖引玉,企业投入2个研发持续贡献(一年可能一两百万),实际上整个PG社区有数千人在贡献,对终用户来说,简直赚到了。
        1. 使用商业数据库,除了LICENSE等成本,依旧需要投管理、研发、外包资源,一年数千万。
        2. 公司越大,越有动力去贡献社区(事实证明)。 从趋势来看,给PG贡献代码的大客户只会越来越多。
  4. 云厂商
    1. 开源数据库纷纷改协议
    2. 数据库市场巨大、自研是必然
    3. 自研的问题:需要培养生态,需要市场背书,需要大量研发资源,可能需要重复造轮子?
    4. BASE PG, 1 免去自己培养生态,2 避免重复造轮子,3 PG 的代码基础非常不错 (开源界“O”)
    5. 防止其他厂商控制PG失去市场主导能力(AWS,google,IBM,微软 都已进入PG sponsor行列)
  5. 国内外知名PostgreSQL厂商
    1. 国外PostgreSQL厂商
      1. EnterpriseDB,目前有知名度PostgreSQL商业公司,有两位员工为PostgreSQL核心组成员,产品特色为Oracle兼容,其次具有较多的企业管理功能;
      2. 2ndQuadrant,数据库厂商,主要提供PostgreSQL服务。虽说时提供服务,但是同时也对内核改造,但改造的目的均为更好的提升PostgreSQL维护能力,先具有BDR、REPMGR等多款复制、集群管理软件;
      3. Postgres Professional,中国PGer的老朋友Oleg的公司,和EDB类似,提供很多企业级功能。公司位于俄罗斯,向社区提供了大量的功能和工具,比如JSON相关功能,分区表工具等等;
      4. Pivotal,提供OLAP的Greenplum产品。具有较高的技术含量,其产品的技术架构,尤其是他的计划分发协议做的极为。目前公司主要开发力量集中在北京、美国硅谷;
      5. Vitesse data,我的偶像田丰创建的公司,主要提供Deepgreen(基于GreenPlum)以及PostgreSQL产品。他早参与了Greenplum的开发,在其开源后创立了此公司,并且提供了利用LLVM对执行计划进行即时编译(JIT)的功能,早在2017年就开始着手将AI对PostgreSQL赋能;
      6. CitusDB,这几年炙手可热的数据库公司,获得了微软的青睐,被收购,提供PostgreSQL分布式产品。
      7. 亚马逊、谷歌、微软等云厂商,作者有幸参加过美国的多场PostgreSQL会议,几乎美国所有的云厂商都在积极推动PostgreSQL的发展。
    2. 国内厂商
      1. 阿里云,德哥所在的团队,提供PostgreSQL商业版(具有Oracle兼容性)支持与服务。具有数据库开发团队,但更多的是提供云上的技术改进。
      2. 腾讯,TBase,近刚刚开源的基于PostgreSQL-XL的分布式数据库产品,社区的阿弟、李跃森、许中清所在团队开发的。
      3. 华为云,高斯系列数据库都是基于PostgreSQL或者其衍生产品开发的。
      4. 金山云,我的小徒弟杨杰目前工作的公司,为云上提供数据库支持、服务。
      5. 瀚高基础软件股份有限公司,我的老东家,早提供Oracle服务,后来专注于PostgreSQL商业版的开发。我在这家公司工作超过7年。主要提供数据库兼容以及诸多企业级功能、工具。
      6. 成都文武科技,社区核心成员朱贤文创建的公司,提供私有云以及PostgreSQL商业版。
      7. 乘数科技,中国PostgreSQL社区主席唐成的公司,目前提供PostgreSQL集群管理工具、数据库服务。
      8. 亚信科技,提供基于PostgreSQL-XC开发的AntDB分布式数据库产品。
      9. 去哪儿、探探科技、平安科技都是PostgreSQL的使用者。
      10. 等等,众多公司在此就不一一列明了。

以上的厂商,不仅仅使用PostgreSQL,同时随着业务的深入,也会积极向社区反馈,提交想法、bug或者功能patch。形成了良好的商业互动。而且各种类型的厂商都在和社区接触,也都有较强的影响力,所以很难形成一家商业公司完全控制社区。其次在核心组的领导下,大家制定行为准则,其次进行资产托管,有效管理赞助费用,和多个国家的用户组合作,也避免被一个国家所控制。

先进技术

PostgreSQL号称是世界先进的开源数据库,那么他的先进之处在哪呢?

关于数据库基本的存储、事务、查询处理器这里就不多说了,在这里我只选择我感兴趣的几个点和大家聊一下:

JIT(Just In Time)

查询计划的即时编译,利用LLVM对查询计划进行进一步的编译,在汇编级进行优化,减少冗余指令、虚函数调用,并且提高CPU cache的利用率。

PG-STROM

调用GPU作为协处理器,提高查询计算效率。

FDW(foreign-data wrapper)

外部表,可以链接异构数据库或其他格式文件作为数据库的表进行处理,也能够把大量的查询计划下发。目前很多人使用FDW作为分布式中间件。

为什么不够流行

介绍了这么多PostgreSQL的优点,那么为什么PG在近几年才开始火呢?

作为PGer,我是非常自豪的,但是总有其他社区的过来标榜PG的用户量太少,而且确确实实无言以对。那么是什么原因造成的呢?我自己总结了以下3点:

  1. 商业化不足,相比起Oracle,力量过于分散,大家更关注数据库的研究、开发,相关的管理组件缺少。开源社区无法向一个公司一样推动它的发展。
  2. 社区响应度较慢。近期参与到社区开发中,其中一个感受就是,进度缓慢。由于全球爱好者都能参与到社区开发中,这也造成了众口难调的问题。其次,全球开发者时区跨度大,邮件回复不够及时。社区工作属于个人奉献,难以拿出全部时间。
  3. 未能赶上互联网浪潮。PostgreSQL定位为通用性数据库,丰富的特性,强大的查询处理器,能够处理复杂的查询。但相比MySQL,未能赶上互联网的快车道。MySQL的灵活性,简单查询的快速响应(不是讽刺),逻辑复制,开发的开源协议,这都非常符合早期互联网工作的特性。

但是现在随着数据库商业老大哥Oracle的一些问题,越来越多的人转到PostgreSQL,明显的例子就是亚马逊和阿里完成了去‘O’运动。其次,随着MySQL的开源协议的更改,很多人担心将来会由于协议问题导致业务停摆,转而支持PostgreSQL。尤其是国内,随着中美贸易战的问题,自主可控也成为了国家的战略目标。而PostgreSQL以其丰富的特性是好的替代产品,所以越来越多的商业公司开始研究、开发PostgreSQL。

写在后

PostgreSQL在未来会越来越流行,也会创造更多的价值。欢迎大家参与到社区的工作中,为振兴民族基础软件[4]做一份贡献。

参考

  1. ^通过一系列学术原型和商业初创公司,Stonebraker的研究和产品是许多关系数据库系统的核心。他也是许多数据库公司,包括创始人Ingres公司,的illustra,Paradigm4,StreamBase系统,的Tamr,Vertica的和VoltDB,并担任首席技术官的Informix的。他还是《数据库系统中的读物》一书的编辑。 Stonebraker的职业大致可分为两个阶段:他在加州大学伯克利分校的时候,他专注于诸如 Ingres和Postgres的关系数据库管理系统,以及在麻省理工学院(MIT)时,他开发了更多新颖的数据管理技术。作为C-Store,H-Store 和SciDB。主要奖项包括2014年的图灵奖。Stonebraker目前是加州大学伯克利分校的名誉教授,也是麻省理工学院的兼职教授。 ACM在公告中说,Stonebraker“发明了几乎所有现代数据库系统中使用的许多概念……并创立了许多公司,成功地将其开创性的数据库技术工作商业化。”
  2. ^https://www.postgresql.org/about/licence/
  3. ^摘自德哥《PostgreSQL的社会价值》
  4. ^瀚高基础软件股份有限公司使命
分享好友

分享这个小栈给你的朋友们,一起进步吧。

华山论剑
创建时间:2019-02-22 18:53:00
没了烟火气,人生就是一段孤独的旅程·····于是,在ITPUB,我们以武论英雄!
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 栈栈
    栈主
  • ?
    嘉宾

小栈成员

查看更多
  • u_9a3ed7a37f8e4a
  • daisyplay
  • boss_ch
  • Jack2k
戳我,来吐槽~