最近数据库领域有几个比较火的事情:
第二件事是,北京云栖大会上阿里云宣布基于MySQL分支的AliSQL开源。AliSQL在MySQL社区版的基础上做了大量的性能与功能的优化改进,性能优于社区版MySQL70%左右,并且尤其适合电商、云计算以及金融等行业环境。
那么,PG和MySQL有哪些技术特性,哪个更强,带着这些问题,云栖说本期邀请了几位达人和大家讨论一番。
这几位大神可不一般,他们分别是:
第一位是来自阿里云技术专家周正中(德歌),贵为校长,在阿里云负责PG数据库架构的工作,社区也在大力做PG的推广。
第二位是阿里云高级技术专家彭立勋,主要负责Redis
for MySQL源码的研发,也是中国MySQL社区用户组主席团成员、杭州用户主席,同时在RDB社区担任reptation模块的负责人。
第三位是来自云徙科技技术总监唐成,曾写过《PG的修炼之道》。
第四位是来自阿里云技术专家罗龙九(玄惭),现在负责专家服务组,对外帮助用户更好的使用RDS。
视频回顾:
以下是精彩内容整理:
主持人:关于Uber公司宣布其数据库从PostgresSQL切换到MySQL,对此各位专家怎么看?
德歌:当得知这个消息后,也阅读了相关工程师的文章,文章中的对PostgresSQL的观点还停留在多年以前的理解下,所以我对文章中的一些观点做了一些反馈,以及深入的在源码层面写了一些东西。
唐成:我也读了那篇文章,我觉得他可能对PostgresSQL的特性认识有一些偏差,我学习过Orcale、MySQL和PostgresSQL,我觉得每一种数据库都有它的长处和短处,对PostgresSQL来说,功能强大是它的一个长处,但PostgresSQL的DBA人数较少,同时能深入了解PostgresSQL的人也比较少,这可能导致很多人对它有一些误解。
罗龙九:一个企业选择数据库时,不仅要考虑数据库的功能,也要考虑数据库的生态,它的相关的职业人员的一些储备,还要考虑它的应用框架,在上层应用上对于开发团队的使用习惯。
彭立勋:数据库没有绝对的好坏,主要看业务适合哪个数据库。
主持人:德歌的文章发表后,引起了开发者的热议讨论。那么,请德歌为我们简单介绍下这篇文章背后的故事以及PostgresSQL的一些技术特性?
德歌:PostgresSQL在很多的应用场景里都有在使用,其中,地理位置信息的应用场景是最多的。各种数据库都会对SQL的兼容性进行适配,PG在开源数据库方面做得比较好,它是基于SQL2011来做的,
这里面涉及到许多特性,比如递归查询、树查询,PG在使用树形数据结构的查询的SQL语法支持是比较好的。企业通常对多维数据分析会有一些要求,开发人员要经常修改程序去适应变化的需求,在数据库里会有支持多维分析的数据库语法,PG在这方面的支持也是比较好的。此外,PG在复杂查询这部分做的也比较好,对于企业来说,如果希望数据库帮助减轻开发工作量,PG是不错的选择。
主持人:PG在技术难题上社区都有哪些拓展的地方呢,(像垃圾清理机制、PG的MVCC以及PG的扩展能力等等)?
德歌:关于垃圾回收,很多使用PG的用户可能对于这部分的理解不是那么的深入,垃圾回收是由PG的多版本原理所导致,使用PG去更新一条记录或者去删除一条记录时,它只是对原来这行的版本做一个标记,而基于回滚段的做法是把老的技术段拷贝到回滚段,PG的标记做法到后期需要对垃圾版本做回收,PG是通过几个参数控制回收频率和回收速度。
彭立勋:PG功能完善是毫无疑问的,基本上遵循了数据库设计原理中的所有规范,包括支持所有特性,课本上真正的内容都会实现出来,但是PG这么多复杂功能能不能经过重重考验还是受大家质疑的。
唐成:PG库的很多东西,包括MVCC,是经过很多代的优化的。PG在业界是以稳定、可靠著称的,PG中添加的功能是要经过很长时间逐步优化的,而且,社区开发人员对代码是比较谨慎的,代码分隔是比较严谨的,以保证它的稳定性。
罗龙九:PG相对于MySQL来说,第一是功能通俗化,第二是功能公布后很多人在使用时一定要知道这些技术点的最佳实践是什么,在开发设计阶段怎么去规避它,希望在PG社区有更多的用户去学习,能够有更多的人带领大家更深入的了解PG的技术实践,才能发挥它的价值。
主持人:PG稳定性方面做了哪些改进和优化呢?
德歌:PG稳定性主要体现在几个点。一是崩溃性的恢复,数据库所在的主机崩溃掉,再拉起后可以恢复并且到一个一致性的状态。一是可靠性,PG会做检查点,然后对第一次变更或产生的张页对应的数据文件的配置会记录到日志中,从而在崩溃性的恢复时会从检查点拿到配置做恢复,当然,PG是在硬件可靠的前提下,在软件层做可靠性的保障。另外,在时间上,用户在非常大的压力下长时间的使用,数据库还能维持一个稳定的性能,不管是我们做大压力的测试还是在实际的应用场景中,PG表现都是非常稳定的。
主持人:请几位专家简单介绍下即将开源的AliSQL?
彭立勋:AliSQL是基于MySQL,根据我们自己的使用经验和场景做了很多优化,阿里使用MySQL已经非常久了,遇到过很多比较特殊的场景,而且阿里本身对稳定性和性能要求是比较高的,所以我们做了许多优化,可以保持高并发时依然保持高稳定性。另外,我们在监控方面做了线程类的监控,可以看到每个线程使用多少内存,这对运维是非常有好处的。安全方面,我们做了透明加密,对文件单独进行加密,即使你的文件被拷走,没有密钥也是打不开的。中间件和数据库的配合,我们可以做到透明传输,用户虽然使用中间件访问数据库,我们做了很多透明优化,使用户感觉不到中间件的存在。在各种云数据库评测中,AliSQL的Redis稳定性在云数据库中是最好的,这与其它使用官方版本的云平台有很大的差异,官方版本的基线要低很多。
罗龙九:AliSQL的前身是为阿里业务而生的,我们针对阿里的业务场景做了很多优化,比如双十一零点的库存秒杀优化,AliSQL即将开源,使用AliSQL就可以很容易复制一些技术,去快速的帮助业务发展。
主持人:怎样看待AliSQL即将开源?
唐成:阿里在使用MySQL的过程中积累了很多最佳实践,阿里对于MySQL做了很多优化补丁和提高稳定性方面的事情,阿里能把这些东西分享出来,对大家来说是喜事。
德歌:从PG社区角度来说,对AliSQL开源是非常期待的,PG对于中国互联网行业的用户数还是少的,互联网行业的用户诉求可以通过AliSQL看到。而且PG社区会更新在互联网领域的一些特性,会把AliSQL做的一些事情在PG上做一些尝试。
主持人:AliSQL在性能和稳定性方面做了哪些改进和优化?
彭立勋:MySQL的锁是非常多的,AliSQL对MySQL的锁进行了分析,缩小锁的范围或者去掉锁。云上的用户有很多用法,官方没有覆盖到的case我们是可以修复掉的。
罗龙九:MySQL在主备复制上只支持单线程、库级别的,在云上的主备复制延时对稳定性造成了很大伤害,我们在官方的基础上做了很多改进,包括并行复制等,我们从源码级别保证用户即使使用错了,我们可以帮助用户规避这些问题。依托于我们强大的源码团队,我们已经开始着手官方不支持的新功能进行开发,帮助用户在稳定性、安全性、性能上做很多事情。
主持人:PG和MySQL各自适用于哪些场景?
德歌:PG的功能非常强大,类似于开源版本的Orcale,PG在全景扫描、聚合查询上都支持CPU并行,也支持基于GPU的并行计算,这在数据库领域是走在前沿的。PG在Gis领域的地位不可撼动,比如高德、国家社会总局等都在使用。在物流方面,智能调度已经成为了物流行业非常核心的话题,PG在物流上做的非常好,围绕Gis扩展出非常多的功能,包括很多调度算法都可以直接移植到数据库中计算,解决了数据在网络上不断传输的问题。PG是类似于数据库平台的产品,已经超越了传统的数据库概念,在图像搜索上也可以把图像放到数据库中去做。我们可以扩展数据库的功能,我们可以把让数据产生价值的一些想法嫁接到数据库端做,包括基因测序、模糊查询等都可以和PG结合起来。在生态方面,国内PG的人才相对于MySQL是非常匮乏的,社区也会举办公开课带动大家了解PG,培养更多的人才。
唐成:PG是对开发人员很友好的数据库,功能很容易扩展。
罗龙九:PG比较大而全,开发人员可以做很多东西,对于初创型公司,需要这样的数据库帮助业务快速发展。MySQL是小而美,可以快速入门,开发人员有足够的能力在应用端实现,不需要数据库。这是从研发人员不同的角度不同的思维方式去看数据库的使用,针对不同的研发人员,不同的业务场景,选择不同的数据库。
彭立勋:PG希望把业务放在数据库中做,而MySQL只能把数据当成一个存储器,非计算器,MySQL对于存储过程的支持不是特别全,MySQL并不适合在数据库上做很多计算的处理。
主持人:在整个社区的生态上,未来的技术走向是?
德歌:并行计算在向前发展,现在的并行计算支持到全面扫描、聚合查询等,对于创建索引等目前还是不支持的,接下来PG会更加深入的实现并行计算。PG的接口应该会持续的开放,PG希望更多的用户一起来玩,PG中国社区把高校、企业聚合到一起,共建生态。
彭立勋:MySQL会和InnoDB做更多的绑定,Myisam会慢慢退出历史舞台。Percona社区正集中做ToKuDB,会在ToKuDB上提升性能。MariaDB会一直保持下去,只兼容新功能不会剔除旧功能,会增加一些超前功能督促MySQL官方做一些工作。中国MySQL用户组每年会举行一些会议,使MySQL爱好者在一起分享最佳实践,并且把收集到的需求带到MySQL官方,指导大家朝着需要的方向进行开发。
唐成:PG、MySQL进入非互联网行业才刚刚起步,未来几年在非互联网行业开源数据库份额会飞速增长。
罗龙九:云数据库服务趋势越来越大,对传统的企业和DBA生存会有很大的挑战。在做云服务时,要去考虑DBA的生存状态,让大家一起来做才是最好的。
脱口秀的最后,几位大神互相讨论了起来,其中玄惭对德歌的发难也是将本次座谈推向了一个小高潮:
罗龙九:对于红包场景、秒杀场景互联网已经生活化了,阿里会有秒杀补丁等解决方式,而PG是进程式的数据库,像突发的短连接、高并发连接时,对PG带来的伤害是比较大的。对此,PG是如何解决这个问题的?
德歌:PG确实是进程模式的,短连接对PG是有很大的损伤。但PG用户是可以使用连接池的,连接池有基于线程模式的,像PGBouncer等都可以解决这个问题。蜂拥而至的秒杀对单条记录会有不断的Update,关于老版本的回收利用,是由垃圾回收进程负责的,只要配置足够好,就不会有太大问题;这么多的Update,PG以巧妙的方式来解决这个问题,PG提供了一个advisory lock技术,在锁行之前去规避掉更新,传统做法是排队,更新后后面做的就是无用功,PG是在排队前告诉你没有资格排队了,代码不需要去执行到锁这条记录,省掉了代码层的执行,效率很高。通过这几项技术可以解决使用线程模式的用户在进程模式下不能解决的问题。