最近几年,我已经帮助几个团队把他们的主力关系型数据库从其他xxSQL切换到PostgreSQL(以下简称PG)。可以这么说,用过PG的小伙伴们,几乎都不愿意换回之前的关系型数据库了。那么PG到底有什么魔力,能得到大家的一致好评?我会通过一系列文章,好好介绍一下这款备受好评的明星级产品。

本篇是这个系列的第一篇,着重讲讲PG背景知识和国际、国内的应用地位。如果你的团队或者项目还没有使用过PG,希望这篇文章能消除你的顾虑,大胆在项目中尝试一下,PG一定不会让你失望。

The World's Most Advanced Open Source Relational Database

这是PG官网对自己的介绍,是的,你没有看错,“世界上最先进的开源关系型数据库”。一段严重违反我国广告法的话,上一个敢那么叫嚣的技术是PHP,“世界上最好的语言”,然后这句话就成了码农界最广为人知的梗,存在于各种笑料中。不过PG并没有因为这样明目张胆地自吹自擂而遭到什么抨击或调侃,事实上,无论在务实的码农界,抑或是讲究章法的学术界,人们对PG都是赞许有加,PG是完全当得起这句话的。

感兴趣的小伙伴现在也可以打开MySQL的官网,那里也有一句违反我国广告法的话。

在讨论PG的强大功能之前,我们先了解一下开源协议相关的背景知识。

Open≠Free开源不等于免费,这是个老生常谈的问题了,无奈有些公司还没有意识到。这里转一张老图:

图中最令人闻风丧胆(非贬义)的协议就是GPL,一种传染协议,也就是要求你动了源码或者仅仅只是做了静态连接(Static Link)就必须也是用GPL协议开源出来。采用这个协议的典型代表就是Linux 内核,当年小米公司被国外开发大神硬怼,也就是受这个协议的影响,感兴趣的小伙伴可以搜搜小米 GPL 指责。关于开源协议的条条框框和经典案例足够出一本书了。这里大家知道一点就好,GPL是一种非商业友好协议,如果你要在商业项目上选择开源框架或者其他什么工具,一定要留意避开GPL以免带来不必要的麻烦。

为什么说这么多协议的事情呢?其实就是想提醒一下大家。目前业内使用量最多的开源数据库MySQL数据库,大家都是免费用的吧?而这个免费用的MySQL社区版,恰恰就是GPL协议的。这个在官网写得明明白白:

虽然说数据库这种东西,跟大家的软件项目是松耦合运行的。通常来说,我们编写的软件项目也不会被MySQLGPL协议传染,但是随着数据库的使用深入,当MySQL的原始功能满足不了现有的场景,当你打算在MySQL的源码上动刀子的时候,情况就变得很微妙了。

还有一个问题这两年也日益凸显,就是说起我国因技术被卡脖子的事情,不管是政府还是民间,大家现在普遍对国外的技术,尤其是被美国技术寡头掌控的关键技术持有谨慎的态度。所以着眼未来的话,如果还选择由Oracle公司控制着的MySQL,我觉得是有一定风险的。

当我们回过头来看看PG,之前的顾虑都可以一扫而光。

首先PG的开源协议是一种类BSD的自有协议——PostgreSQL License,事实上早期的PG就是采用的BSD协议,后续换成自有协议并没有多少改变,依然属于最为友好的协议类型。不论是自用还是商用,都是完全没有问题,修改代码并且用来盈利也是毫无商业风险的。

其次,PG事实上不被任何一家公司所掌控,它背后的控制机构——PostgreSQL全球开发小组,是一个松散的组织。其核心成员来自全球各地的不同公司,如果你感兴趣,可以在PG官网查询到这个组织的成员列表。可以这么说,没有任何一个公司享有对PG的绝对控制权,PG永远是属于社区的。

那么是什么造就了今天的PG呢,咱们稍微回顾一下历史,感受一下开源的力量。PG源于UC Berkeley大学1977年的Ingress计划,这个项目由Michael Stonebraker领导。平平无奇的一句话,透露出三个信息:

  1. 1977,相当有年头的事情了,估计此刻正在阅读本文的你,在那时还未呱呱坠地😃。
  2. UC Berkeley,可以搜一下,世界最知名的7所大学之一,美国最好的公立大学。
  3. Michael Stonebraker,2015年图灵奖获得者,绝对的大佬。

用咱们中国老话说,天时、地利、人和正好应对以上三条。可见PG一出生就不同凡响。

时间推移到1994年,UC Berkeley大学两个研究生Andrew YuJolly ChenPG增加了SQL语言解释器,建立了Postgres95,随后的1996年,正式重命名为PostgreSQL,从此开启了PG辉煌的二十余年。

仔细留意一下上面两个研究生的名字,是不是看着很亲切?我特意搜了下这俩哥们的照片,放出来给大家看看:

截屏2020-12-03 下午4.18.48

看了照片感觉更亲切,这俩兄弟是哪国人,不言自明了吧:)

往后的事,有意思也很多,但是限于篇幅,咱们不能一直扯。这里就讲一点,估计也是大家最为关心的一点,既然PG历史这么悠久,如果它真的如宣传所说,这么强的话,为什么现在大家都在用MySQL而不是PG呢?

说实话,这个问题,同样困扰了我很久,我也向一些前辈请教过,至今也没有权威的答案。这里就谈谈我自己的思路,两个原因:

  1. PG支持Windows太晚了。有多晚呢?直到2005年,才原生支持Windows2005年啊,比PG支持SQL晚了十年,比互联网在中国兴起、繁荣、泡沫戳破也晚了好几年。想想最重要的2000年前后,多少懵懂的站长都在使用WindowsPG错过了Windows就错过了最重要的一批在互联网上尝到甜头的人,从此一步错步步错(这个“错”不是“错误”的意思,而是“错过”的意思)。
  2. LAMP的崛起,继续将PG边缘化。现在很少有人提LAMP这个缩写了,最早它是Linux/Apache/MySQL/PHP的意思。我第一次听到这个缩写是08年,那年我还在读大二。可以想象一下这个缩写有多火,连一个大二的学生都听过,而且那年我还无数次的给同学们安利这套技术,因为它看起来真的很时髦。而直到我参加工作的几年后,才第一次听说PG,等在项目中正式使用PG,已是2015年之后的事了。(一不小心,又是十年)

时也,命也,怎不令人唏嘘?

扯远了,让我们说回现在。

最近两年数据库国产化的呼声也很高。应该说咱们也取得了一些成果,比如华为的openGauss,腾讯的Tbase,老牌的达梦,风头正盛的TiDB,阿里的OceanBase,还有百度的BaikalDB等等等等,可谓是百花齐放。

这里咱单说前面那哥俩,华为的openGuauss,腾讯的Tbase都是跟PG颇有渊源的数据库。如果你查看它们的官网,或许不会看到Postgres的字样,但是如果你去GitHub看看它们的源码及说明,就会发现离不开PG的影子,用大白话说,它俩都是在PG上衍生出来的。当然这也不是什么秘密,不重复造轮子乃是业界共识,事实上无论是华为还是腾讯,都在PG上做了不少工作,也为我国PG社区的繁荣出过很多力。

我举这个例子主要是想说明一个问题,PG的开源协议非常友好,你甚至可以把它拿来改头换面,说成是自己的数据库,也没有什么法律风险。

当然大部分小伙伴也就是把PG拿来用在项目上,我想你们肯定关心,都有哪些公司已经在使用PG了呢?这里我也准备了一张老图,几年前的了:

怎么样?还可以吧?可以看出PG在各行各业都扮演了重要的角色,这还是几年前的图。有些大公司也没给列出来,像中国移动、平安科技、摩拜单车、探探科技、苏宁云商,也都在使用PG哦。

有了这么多大公司对PG的认可,PG在整个数据库领域的热度也是与日俱增。这里有一张最近几年循环洗脑的图,估计大家也在各种场合见过:

截屏2020-12-03 下午5.53.57

可以看出PG在一众数据库中披荆斩棘,绝对是众多关系型数据库中最靓的仔😉。

当然DB-Engines的排名也不能太当回事,我觉得远不如直接做问卷调查更有说服力,只要样本够大就能说明一些问题。还好Stack Overflow作为世界上最大的开发者问答社区,在今年二月做了一份问卷调查,共收集到65000份样本,整理了一份非常有价值的报告。如果你还没有看过,那我强烈建议你看一看。

现在我带大家简单看一下关于数据库方便的调查结果。首先是最受欢迎的数据库:

第一名是Redis,人见人爱的数据库,并不意外。紧随其后的就是咱们的PG了,并且与第一名的差距非常小,也就是说PG是最受欢迎的关系型数据,怎么样,这样的结果是不是有点猛呢?

还有一个统计数据也很能说明问题,就是受调查者正在使用的数据库的情况:

可以看到PG虽然落后MySQL一个身位,暂居第二,但是这已经比DB-Engines中的第四的排名提高了不少。可以这么理解,在活跃于社区的开发者中,采纳PG的比重还是比较高的,至少比Oracle高不少,即使跟Microsoft Sql Server比较也丝毫不逊色。

总结

本篇是关于PostgreSQL系列中的第一篇。本文中用了不少笔墨介绍了PG的过去和现在,我想你应该对这门存在了几十年的技术有点兴趣了吧。下一篇,我会用更加技术流的方式介绍下PG到底牛在哪里,有什么让人大呼过瘾的特色。

PG从不让人失望,我们下一篇再见。

推荐阅读本系列的其他文章: