返回 登录
3

瀚高王硕:从Oracle到PostgreSQL,细数如何一步步打造完整的PG生态链

2017年10月21日,PostgreSQL 2017中国技术大会于深圳科兴科学园国际会议中心圆满收官。拥抱开源,聆听不同,广纳业界同好,与众PGer共话PostgreSQL的前世今生,来年他日。

数据库作为最关键的基础设施,渗透技术领域的方方面面,而一个数据库的流行绝非偶然,PostgreSQL在中国历经多年磨合,面对前进途中的掣肘质疑,作为一个PostgreSQL学习中的爱好者,对此,又将怎么看?会间,瀚高基础软件股份有限公司数据库开发工程师王硕,从自己与PostgreSQL的意外结缘谈起,转而剖析PostgreSQL中国的发展困惑,多方位阐述了打造完备的PG生态链的重要意义。

以下为采访正文:

图片描述

瀚高基础软件股份有限公司产品开发中心内核开发部部长 王硕

CSDN:首先请您做一下自我介绍,包括您关注的技术领域,以及所在团队等。

王硕:我是王硕,目前就职于瀚高基础软件股份有限公司,我们公司主要从事开源数据库PostgreSQL的开源工作,包括其发行版等,而我在其中主要负责数据库开发设计相关部分。目前我们团队主要致力于在PostgreSQL的基础上,针对客户需求开发新特性,以期更好地满足客户,促进PostgreSQL的服务落地,从而达成推广数据库的目的。同时我本人目前也在中国PostgreSQL社区担任核心成员之一,积极向社区推广一些我个人关注的领域技术,积极写博客做推广,我们公司之前也做了很多关于数据库的翻译,目前大家接触到的80%以上的PostgreSQL中文文档,都来源于我们的翻译,这主要是因为我们公司内部有专人负责这一块内容,且社区人员的精力也相对有限。

目前我们团队还可以说非常年轻,这里的年轻不仅是指年龄层面上的,更多是面对于数据库这个领域而言——原本无论是在校还是工作,大家可能接触更多的是基本的软件、业务开发等,但数据库不仅仅是一个简单的应用,而是一个完整的产品,在理论、设计等各个方面都有着相关的限制,因而我们需要关注大量的内容,每个人涉及的东西非常多,因为我们的基础软件人员流动较为频繁,我们团队相对就比较年轻一些。

CSDN:就您个人而言,为什么会选择PostgreSQL作为自己的研究方向,在探索过程中是否曾遭遇瓶颈?

王硕:从严格意义上来讲,不能说是我选择了PostgreSQL。事实上,当初我们公司和学校有合作,大学期间,公司走进校园展开Oracle宣讲活动,因为我本身学的是软件方面的专业,所以对此颇有兴趣。恰好当时公司说能提供实习,我起初以为是要做Oracle,就决定抓住这个机会加入进来。但过了一段时间之后才发现,需要去做的是我们自己公司的数据库–HighGo Database。虽然和初衷有些出入,但这无疑是一个在企业中学习的好机会,便也一步步走到今天。而我真正开始接触PostgreSQL大约是在开始工作之后半年左右,那时对基础软件已经有了一个很好的把握,因此也渐渐从中琢磨出几分兴味,慢慢觉得那些数据库理论和算法等都挺有意思,加之我大学时期特别喜欢研究一些东西,也很喜欢解决问题的过程,学习PostgreSQL恰好击中我的兴趣点。

但又一段时间之后,我逐渐发现国内的基础软件氛围并不是特别活跃,也因此无论是公司还是自己都开始生发了某种基础软件情怀,发自内心地想让这一领域蓬勃起来。我大学时期学习的数据库是SQL Server,但多数课程也只是照本宣科,不见得传授太多内容,因而我对数据库一直处于一个懵懂的状态。然而数据库的重要性毋庸置疑,我们也都了解数据库在中国市场中会是一个非常大的蛋糕,却基本上都为Oracle、DB2所垄断,而且好多学生根本不了解数据库的内核到底是什么,大家只知道一味地使用,往往忽视了数据库的本质。所以很多时候,我们就会想能否由咱们中国人自己打造一款非常优秀的数据库,去替代,甚至是完全取代Oracle,这一讨论就更像是一种情怀。

目前对我而言,最大的困惑就是PostgreSQL的流行度问题——诚实地讲,它真的是还不够流行,或者说市场占比非常小。虽然我也经常去国外参加一些相关会议,总能听到大家对PostgreSQL的肯定与褒扬,但如果去关注数据库排行就不难发现,PostgreSQL一直处于第四位,但是其分数却很低,甚至还不如第一名的零头所以虽然我们一直在说我们是第四了,但其实和前位者的差距仍然非常大。那么这一差距缘何而来?我认为这里反应出了很多问题。当然,之前有很多人表示MySQL是借助互联网的风头才得以扩展开来,但为什么PostgreSQL没能做到?经过和大家的交流后,我个人认为这是一个血统问题,PG起源非常早,甚至可以追溯到1973年,起初就是为了传统企业的应用;相对的,MySQL在互联网发展时期诞生的,天然的就带有互联网的一些特性,更适合当时的互联网应用,并提供大量的相关特性。比如逻辑复制的功能,这恰是MySQL能成功的一个原因。
虽然PostgreSQL的理论非常成熟,框架也很好,但是若想要完全搞熟搞懂就需要花费极大的精力。至于Oracle,它一个非常成熟的环境,这恰恰是PostgreSQL所欠缺的,故而难以与之抗衡。鉴于这诸多阻力,怎么去更好地推广PostgreSQL就成了一个很重要的讨论课题。而对于做PostgreSQL发行版的我们团队而言,PostgreSQL良好氛围的重要意义更是不言而喻。

CSDN:您的团队在PostgreSQL应用的过程中,在安全性以及稳定性问题方面采取了哪些措施?

王硕:针对这一问题,在我们最新的产品中在安全等性能方面都有体现,主要有两个关注点:一是数据全加密,这一定程度上和我们的客户方向有关,就像此次技术大会上,我们可以看到参会嘉宾大多来自互联网公司,而我们更多要面对的是传统企业和政府客户,他们对数据安全性的要求非常高,尤其是在磁盘安全性和内部安全性方面。对此,我们采取了一些数据库加密措施,以防遭窃数据可以被还原。

此外,我们也对误操作问题进行了防范——开源了一个叫做Xlogminer的数据库工具。这是一款日志挖掘工具,因为每个数据库都会写WAL日志,这里我们就是对WAL日志进行分析,能很好地还原数据库所有操作,从而了解什么时间做哪些操作,即可针对性地还原某些误操作的内容。当然,也可以开启数据库log,但是经过测试开启log会大大降低数据库性能,而且WAL日志本身已经将操作记录下来了,所以通过分析WAL日志来还原数据库操作是一种最优的方式。

CSDN:您在上一个问题中有提到本次大会的参会方主要都是互联网公司,那么相较而言,瀚高团队作为与会嘉宾有什么样的特色?

王硕:这主要还是一个方向问题,因为互联网公司追求的更多是性能和数据分析的能力,而我们面对的则更倾向于客户的数据安全性问题。

谈到安全性话题,上面漏掉了一点,就是高可用层面的探讨,而对于PostgreSQL而言,高可用恰恰是它的一个弱项,或者说是失分项。对此我们还做了一个新的架构,叫做SDS的架构,其类似于Oracle的REC。会间也有很多人问我,“为什么你们团队会想要做这个SDS模式”?而不是一些现在大家普遍追求的方向,像是MPP等互联网快速并发的东西。对于这个疑问,归根结底还是定位差异,我们的客户更加看重数据安全性、高可用,需要在某个节点发生损坏时能快速切换过去。而且我们面对的数据没有互联网公司那么巨量,我们的节点可能无法支持几十台乃至上百台的规模,但从某种程度上看我们的性价比会更高一些,这也是我们的一个特色。

CSDN:本次技术大会是由我们国内的PostgreSQL社区主导的,您之前也有提到一些海外活动,那么能否请您结合国内外社区情况,谈谈PostgreSQL在国内外的发展态势?

王硕:最近我刚从美国的PostgreSQL Open大会回来,包括之前的几次参会经历中,其实我们能感受到大家对PostgreSQL的热情还是非常高的,不管教育、金融,还是医疗等各行各业,都能看到PostgreSQL的身影。实际上在国外,特别是美国地区,对于PostgreSQL的认可度非常高,每次去美国参会就会发现呼声特别高,回国就会发现一个落差,而且分数也依旧不高,这是一个直观的现象。

再者是一个上云的问题,目前亚马逊云是全球第一的云厂商,其对PostgreSQL也非常支持,而PostgreSQL现在在国外整体走势就是上云——如何上云是现在PostgreSQL一个最大的发展方向,这相对国内也是一个不同点。诚然,国内在云领域,阿里等云厂商,都在大力推行云技术,但从PostgreSQL的角度来看,其上云进程远没有国外那么快速,这与生态链也有一定的关系,故而相对缓慢一些。

此外,由于接触的时间长短不同,国外社区在峰会等活动划分的情况也要相对更细一些,主要有以下几种类型:

  • PG Open大会:面向诸多厂商,主要由一些厂商去介绍自己的产品,以及PostgreSQL之于其产品的特性等;
  • PG Conference:主要指的是用户大会,由广大PGer互动交流,分享各自的数据库使用心得体会、技术分享;
  • PG Vision:是由一些EnterpriseDB公司引导的一个商业探讨会议。

除了这三类之外,还有一个经常在加拿大举行的全球开发者大会,主要是介绍数据库目前的方向、开发的态势,以及每年数据库的一些新特性等。而国内现阶段其实仅有一个Conference大会,这也是国内外社区发展的一大区别。

CSDN:面对这些发展落差,尤其对初学者而言,技术选型时,在了解了PostgreSQL国内外市场占比差异之后,未免会对其持疑惑态度,那么您如何看待打造中国的PG生态这一问题?

王硕:这其实正是我们公司一直在试图努力的方向,就像我们做产品也是想提升PostgreSQL的市场占有率,这里就涉及到PostgreSQL的一块明显的短板——虽然其扩展性非常优秀,可谓什么功能都有,基本上用户想要的性能都可以找到相应的插件来实现,但真的在实际应用时,就会发现需要去学、去看、去改的东西极其多,很难找到一个非常好的整合。因此我们团队的下一步目标,就是在PostgreSQL的易用性上做出一定的优化:不管是在监控、关联工具,还是一些插件,我们都能够积极地放到数据库上让用户得以直接使用,尽量透明化,让用户无需再考虑太多技术问题,从而把重心落在业务上,促进业务快速发展。

CSDN:从技术渗透的角度来看,您在学习PostgreSQL的过程当中,还进行了哪些知识技能储备?

王硕:因为我是做数据库开发的,所以在开始研究PostgreSQL之后就需要学习了解很多东西,包括源码等内容,书越看越厚,每看到一些新东西就会发现自己还有所欠缺。因为数据库本身你需要了解,同时与数据库结合的操作系统你也需要深入了解,甚至于其和硬件的配合也需要懂一些,比如我最近关注的GPU相关技术——如何用显卡提升数据库计算效率。这是我一直颇为关注的一个技术方向,因为GPU的性价比较之CPU要高很多,CPU毕竟是通用的,而GPU主要是用来做计算的,所以我更想利想GPU去做计算。

再谈SSD,或者说大内存,数据库如何更好地与其适配,我们对一些参数有所调整。SSD和机械硬盘是不一样的,这个问题的处理其实要花费大量工夫来研究,或者需要一定的时间来测试。

此外,我们公司此前还推出了一个新特性——利用LLVM对数据库查询进行加速,我们团队花了很多精力去调研相关领域知识。而我们现在能够实现某些应用常见下,在不更改数据库原有源码的情况下,使原有查询效率提高10倍。当前列式存储、分布式以及SSD的迅猛发展,带来的I/O瓶颈慢慢削弱,CPU的瓶颈日益凸显,而LLVM正好能解决这个问题。

CSDN:您能否分析一下PostgreSQL在哪些应用场景下比较占优势?

王硕:在我看来,PostgreSQL的优势在于较之MySQL,其更适合一些重要级的分析型业务,以及交易性较强的业务,因为其执行计划、查询计划器都写得非常好,能够对极其复杂的查询做出很好的优化。在这一点上,我觉得PostgreSQL要比MySQL略胜一筹,当然这里并不是说MySQL不好,而是说MySQL在某些场景下并不是特别适用,像是某些互联网场景就更适合于MySQL,因为他们更多是简单查询,不需要太多复杂的程序。但换个角度分析,数据量一旦达到某个高度,复杂查询效率就会变慢,这就又触及了PostgreSQL不甚擅长的部分,而现在也推出了很多类似于PostgreSQL-XL、Greenplum等基于PostgreSQL的新的产品,恰好能解决这一问题。

此外我还想补充一点,就是我非常推荐高校展开PostgreSQL的学习,因为其代码非常规范,不管注释,还是文档及构建函数标的准都很棒。通过了解其代码,可以进而深入数据库内核知识,这对高校学生而言无疑是颇有裨益,能助其对数据库的本质有一个清晰的认知,不至于直至毕业对数据库的概念都停留在“存放数据”这样的表层理解,而是更多了解存取的原理,以及如何优化等细节问题,代码就是我们最好的老师。

CSDN:上面的问题中您也有提到一些近来学习的新内容,那么能否总结介绍以下您最近会关注的一些新的技术方向?

王硕:前面我有简单提到一些,包括利用GPU、LLVM技术来解决一些问题。此外,最近我还会关注一些人工智能(AI)相关的话题,其实这也与数据库有千丝万缕的联系,包括我们此次技术大会对此也会有所覆盖,例如如何利用AI去更好地优化我们数据库SQL以及数据库结构,这也是我们未来发展一个比较好的方向。因为和机器相比,人的精力是有限的,而若将这部分内容交由机器来完成,只要其算法足够完备,便能够替代很大一部分人工的工作,减少人力工作也会是AI的一大突出贡献。

CSDN:您平时也会写一些博客文章等来对一段时间的学习内容做一个总结,那么这里是否有什么亲测有效的学习经验可以同大家分享?

王硕:事实上,我最近也一直在考虑构建学习计划的事情,考虑到我是从数据库开发起步的,所以可能和一些DBA不太一样,以PostgreSQL的学习为例,我认为不管是做开发还是做DBA,都需要对代码有一个比较好的了解。如果是DBA,可能更需要去了解其功能代码,以便在问题发生时准确定位,清楚问题出在哪里,这时若能力去更改自然更好,否则提交社区即可。我之前有看过一个人的博客,他是个DBA,懂技术、懂代码,但他就可以在不更改代码的基础上改变数据库的一个特性,这就很令人佩服。所以说这是一个极佳的学习途径,因为在你足够了解代码之后,就可以很好地利用这个规则去完成原本数据库不让你去做甚至不能达到功能,从而得以更好地对数据库进行维护优化。

CSDN:最后,您还想和我们的读者分享些什么?

王硕:长期以来,我们公司给自己定位是“开源数据库软件的先行者”,为什么这么说呢?我觉得是主要包含以下几个方面:

首先,我们的数据库完全自主可控,毕竟PostgreSQL本身无论是开源协议,还是开源代码,都可以下载去做发行版,我们对代码熟悉之后,也就不存在一些所谓后门的情况,我们掌握自己的代码,也可以对代码进行一些更改。虽然这个过程可能挺痛苦,但是我们也因此占据了一些优势,就是可以和现在很多的国产CPU,或国产操作系统进行很好的适配。我们专注于推进PostgreSQL,以及打造国产数据库,主要通过以下几种手段:

  1. 和一些ISV服务厂商进行合作捆绑,从而更好地改变一些开发人员的习惯,因为很多时候大家已经习惯了Oracle、Java这类非常便捷的选择,一时间可能很难去换一种数据库或语言,因为这无疑是一个痛苦的过程。当然这一现象也很好理解,因为如果你突然让一个用户换个数据库,势必要做出很多更改,也可能会出现一些不可预知的问题,他们完全被Oracle绑定了,脱离起来很是困难,所以我们想通过一些方式改变开发者的习惯,从而更好地推广PG;

  2. 我们也积极地同云厂商开展一些合作,因为现在毕竟是云的天下,所以我们也针对这一点推出了云上的数据库服务,这也是我们目前点关注的一个方向;

  3. 我们同高校间也有很多合作,第一我们会有一些定期的校园行活动,为大学生宣讲一些数据库知识,其中也包括PostgreSQL相关课题,帮助大家了解PostgreSQL,从学生这一代开始普及对于PostgreSQL的认知,让他们能够渐渐用起来,将来在考虑工作等选择时,也有机会将PostgreSQL纳入考量,而不是只考虑Oracle等。

  4. 我们同国内外PostgrSQL社区建立了非常紧密的联系,我们如今在北美也建立了一个研发中心,主要负责海外事务的对接工作,毕竟PostgreSQL这一数据库本身源于美国,我们如果能更好地同国际接轨,无疑将对我们数据库的产品拉力起到很大的帮助。我们的美国研发中心负责人周宝峰在那边负责整体的研发方向,接触到一些国际上更好的公司,从而将这些更好的技术融合到我们自身的产品当中,这样继而助力我们的数据库在国内的发展。

最后,我认为打造完整的生态链这一点尤为重要。现在为什么大家不常用PostgreSQL功能?很大一部分原因就是用起来比较费劲儿——大家左找右找,非常困难。这就要求我们利用一切手段,包括中间件、管理工具、数据库底层,甚至硬件等方式,合力将整个PostgreSQL的生态链打造好,同时做好推广工作,让用户用起来更方便,提升PostgreSQL的认可度与它接受度,让PostgreSQL越来越好。

评论