百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

2015年Postgres全球开发者大会参会总结

moboyou 2025-03-03 11:10 51 浏览

一年一度的Postgres全球开发者盛会6月16-20日在加拿大渥太华举行,我也是第四年参加这个会,会上收获良多,所以决定写篇文章给国内的Postgres的爱好者分享一下大会的情况。

Postgres相关会议主要包含两类,一类是面向内核开发者(全球开发者大会),一类是面向用户(如Postgres Open、欧洲大会、日本大会、中国大会等)。其中面向内核开发者的最重要的会议是全球开发者大会Postgres Global Developer Conference,基本社区最主要的成员都会参加。

广州飞温哥华转机到渥太华,整整17个小时,晚上12点才到酒店安顿下来,在倒时差中参加了四天的大会。大会每年都在渥太华大学的校园举行,BSD的会完了就到Postgres的会,两个会都是同一个人在组织。

大会概要

大会包含几个主要环节,前两天是unconferences, 主要是自发的组织议题讨论,一般是下一个版本要开发的一些大特性,后面两天是大会的演讲环节,包括培训还有相关的话题,最后一天下午还有一个闪电演讲环节(lightning talk)主要是一些快速演讲的小题目。

大会大约有240人左右参加,与往年大约相当,主要是来自世界的Postgres开发的主要公司(EnterpriseDB、NTT、2ndQuadrant、富士通、Teradata、华为等),还有关键的用户企业(Amazon AWS、Saleforce)。主要的赞助商为EnterpriseDB及富士通。从参会的情况来看,目前社区的参与力量趋向多元化,美国、欧洲(英、德、瑞典、俄罗斯)、亚洲(日本、中国、印度)这三极力量成为社区的主要力量。日本今年发表的主题多达10个以上,是历届最多的一次,富士通也第二年成为主要赞助商,反映日本在社区的影响力逐渐上升。来自中国的华为也正式第一次作为赞助商出现在会上,是国内首家。

华为今年在会上作了两个演讲,主要是涉及提高单机性能的多核扩展(Scalable MVCC Solution for Many Core Machines)及动态编译(Go Faster with Native Compilation)。由于相关技术都是相对前沿的关键技术,整个社区对演讲非常感兴趣,社区所有核心成员及关键开发人员都到场听了两场演讲。社区领袖Josh Berkus在其博客里面用一节篇幅专门详细介绍华为的动态编译的议题。

多核扩展性成为最新版本9.5的主要驱动力

7月份Postgres的最新版9.5已经发布公测版,主要的特性包括块索引(BRIN Index)、行级别的安全控制(Row level security)、插入合并(UPSERT,类似Oracle的Merge Into)、多核的扩展性等。

多核并行执行:目前EnterpriseDB的Robert Haas在社区做的最主要的工作是多核并行执行(Parallel execution),即把一个复杂计算分解由多个进程执行,这个特性可以使得Postgres能够充分利用高性能服务器的多核计算能力,尤其对于全表扫描、排序、索引重建的性能有大大的提高。9.3及9.4主要集中在构建并行执行的基础部件,并行执行还是基于多进程来实现,其基础部件包括能够动态启动一个自定义的进程(dynamic background workers)同时还要能够支持动态分配及回收内存(dynamic shared memory),还有信息能够在多进程互相传递(shared memory message queues),这些工作在去年及前年已经完成。9.5增加了另外一些基础设施,包括错误信息在多进程间传递(error propagation)还有并行执行的上下文环境管理(parallel contexts),但原计划在9.5实现的第一个最重要的并行扫描特性(Parallel sequential scan),虽然代码已经写好,但还有一些没有解决的问题,所以需要推迟到下一个版本明年的9.6才能够完成。并行扫描特性(Parallel sequential scan)主要是在执行器里面把原来的全表扫描seqscan拆分成并行执行的算子,新增加了两个算子Funnel及Partial Seq Scan算子,funnel算子主要负责结果汇聚及协调,多个Partial Seq Scan算子进行并行扫描。

多核扩展:在9.5里面,Enterprisedb对于多核扩展性还作了优化,读的扩展性由原来的32核扩展到64核,主要是由于对于锁进行了相关优化。另外9.5引入了一个新的索引(BRIN),就是对每个块里面包含的数据的最大及最小值做一个索引,这样能够大大提高大数据量查找的效率,同时能够保持索引的代价比较小。

FPGA加速:日本NEC的员工KaiGai Kohei在9.5引入了FPGA/GPU加速相关的基础设施。硬件加速可以分担一些比较复杂的计算提高性能,例如把全表扫描或者是表结合这些比较重度的任务交给加速器,加速器执行完以后把结果返回给数据库。NEC的解决方案是引入一个调度模块PG-STORM,这个模块负责把任务发送给外部加速硬件,同时通过DMA把数据传输到加速器。同时把在Postgres 9.5里数据库的执行器的扫描算子变成可定义(custom scan),在自定义的扫描算子与PG-STORM进行交互。目前可以支持把表扫描、表结合、聚集函数、排序操作卸载到FPGA板卡上,据称在某些场景下最快的性能可以提升十倍。

插入合并(UPSERT)是9.5版本的最重要特性之一,这个特性的主要功能是在批量导入的时候,当insert记录入库,如果没有记录就直接插入,如果记录已经存在就更新,就是混合了update及insert的操作。由于Oracle本身已经有这个功能Merge INTO,在系统中大量使用,是Oracle迁移到Postgres里面缺失的最重要的功能之一。这个特性历时三年今年终于进入主版本。

开发流程反思:另外还有一个大会热议的焦点就是一个致命缺陷引发了对整个社区开发流程的反思。Postgres一直以来是代码质量最高的开源产品之一,但是在9.3的时候一个committer修正了一个bug(multixact相关),虽然修改简单,但是所涉及的代码的逻辑极为复杂,在当时检视没有发现任何问题,结果到了9.4在实际生产系统中引发一系列数据丢失的严重事故,整个社区才意识到问题的严重性,并提供了多个修复的紧急版本,但是修复的代码又引入了新的问题,由于问题过于复杂,需要大修改才能解决问题,目前仍然没有完全解决问题。在本次大会,不仅讨论了相关解决的技术细节,而且引发了缺陷如何管理等一系列组织流程上的反思,并有核心组员提出需要增加相关故障恢复的测试,是社区的一个里程碑式的事件。

Core team member Bruce Momjian wanted to know whether this was a special case, or if it shows a failure in the PostgreSQL development process, saying: "We're super-reliable, but we're so used to it that we haven't tried to focus on reliability."

性能及集群成为后续发展的主要方向

9.6预计分五个迭代开发,从7月1日到明年的3月底,大约在6月中发布Beta,10月份左右GA。

在9.6以及最新的版本里面,性能仍是最关注的焦点。

多核扩展性是一个主要方向,目前的主要工作有几个。一个是EnterpriseDB继续延续目前在并行执行Parallel execution的工作,在9.6里面完成并行表扫描的特性(Parallel sequential scan),同时优化目前锁相关的冲突提高多核的读写扩展性,另外的一个是华为在社区提出的MVCC机制的优化方案(利用CSN进行可见性判断)。

新硬件的支持是另外的一个重要方向。前面已经提到,NEC目前已经把很多基础的操作卸载到FPGA上,后续会有更多的复杂操作会在FPGA上面来去做。另外Teradata的Aster data的人员提出,未来的磁盘会向SSD及大容量廉价的叠瓦式磁盘SMR(Shingled magnetic recording) disk演进,叠瓦式磁盘的空间容量更大,后续后可能会放量发货。这种磁盘的主要特点是空间大,但重写(更新)的代价会更加高,所以Postgres目前需要在架构上避免重写(Hint Bits、Page Freeze等)。

列存储引擎:另外一个性能方面的增强是内置的列存储引擎(Native Columnar Storage),富士通提到他们研发的列存储引擎应用到富士通Postgres数据库一体机上,对于分析的性能最快的提高了13倍,社区也在讨论在Postgres内核里面如何引入内置的存储引擎。

动态编译:华为提到的利用LLVM动态编译提高数据库的性能,这个也会成为后续发展的一个重要方向。

表分区:还有日本Postgres用户企业联盟在大会上提到,他们去年针对5000家企业做了调查,目前企业认为Postgres导入到关键业务领域的时候,主要有两个特性诉求比较大,一个是表分区的特性,另外一个是目前Postgres的错误代码难以快速定位问题。表分区虽然目前社区已经有,但是在分区表数量比较大时候性能比较差,不能满足关键业务的要求。NTT Data的人员表示其9.6要做的一个工作就是重新设计高性能的表分区特性。

另外一个发展焦点是水平扩展性。

Sharding解决方案:pg_shard是目前比较活跃的分库解决方案,这个会上讨论比较多的是对于目前架构的优化,原来是使用一个主节点存储元数据信息,开发人员提到希望把元数据放到所有节点,这样就不需要主节点,但是元数据的同步需要引入Pasox协议进行同步。EnterpriseDB及NTT在会上意外的抛出了利用外部表FDW构建Postgres内置的分库(sharding)的解决方案。NTT以前是Postgres集群Postgres-XC的最主要的支持者及开发力量,NTT希望PG-XC里面的功能能够回合到社区的内核,这样才可能长远发展,而目前看来最现实的方法就是基于外部表FDW来实现分库的解决方案。这个方案包括几个技术点,一个是在外部表实现表继承(这样才能建立协调节点与分库节点的关系)这个特性在9.5已经实现,另外一个是要把下推的功能(push down)的功能在外部表实现,而这个方案的最大难点是在外部表实现分布式事务,EnterpriseDB在社区上提出其外部表其解决的方案和思路。他们提到争取在2-3年内实现这个方案。但与会的很多关键人员多这个方案持保留意见,pg_shard方的人员认为其之前已经采用过FDW的方案,但是最终放弃了,而且这个方案没有考虑可用性。

Postgres-XC/XL集群:但是,很多人表示,用外部表实现分库的方案只能解决一部分的问题,如果要实现全功能的集群仍然免不了继续在Postgres-XC或者XL上发展。目前有欧洲的2ndQuadrant、俄罗斯的团队、还有中国和日本的团队在进行开发。比较值的关注的是国内现在在这方面的开发比较活跃,日本NTT的铃木市一和我发起的旨在融合Postgres-XC/XL的github上的新项目Postgres-X2里面,铃木市一和我是项目的发起人和Owner,目前这个项目汇聚了很多中国公司,并在国内已经有几个商用的应用点,计划在7月底在杭州举行开发者大会。基于目前开发力量比较分散,俄罗斯人员呼吁所有力量团结起来,共同开发成熟的集群产品。大家建议今年在欧洲的Postgres大会一起共同商议后续的发展。

逻辑复制:集群的另外一个方向是,欧洲公司2ndQuadrant所主推的多主逻辑复制(bi-direction replication),该项目最初是受McAfee资助开发。传统的Postgres的复制只能够对整个数据库进行复制,不能对单表或者单库进行复制,同时复制是单向的,而这个项目可以对复制进行控制只复制某些特定的表或者信息,同时多个节点可以进行双向复制(需要定义冲突解决机制)。从9.3起已经有多个特性陆陆续续合入内核,计划在9.6完全融入内核,目前还在活跃开发。

自治事务:Postgres缺失的Oracle功能除了Merge INTO以外,另外一个最大的功能就是自治事务,包括2ndQuadrant的Simon Riggs及华为都提到会在社区开发这个功能。

感悟

今年是第一次给大家用文字简单分享了大会的收获,希望对大家有帮助。

每年一次去参加这个会,每次与来自世界各地的社区的老朋友相聚外,都能够感受到开源社区不仅仅是技术的纽带,还是联系朋友与友谊的纽带,每年大家聚一起除了分享各自的技术想法,还分享各自一年来的生活。这个就是开源社区的魅力吧。

国内的Postgres社区也期待大家的参与和加入。

相关推荐

Excel技巧:SHEETSNA函数一键提取所有工作表名称批量生产目录

首先介绍一下此函数:SHEETSNAME函数用于获取工作表的名称,有三个可选参数。语法:=SHEETSNAME([参照区域],[结果方向],[工作表范围])(参照区域,可选。给出参照,只返回参照单元格...

Excel HOUR函数:“小时”提取器_excel+hour函数提取器怎么用

一、函数概述HOUR函数是Excel中用于提取时间值小时部分的日期时间函数,返回0(12:00AM)到23(11:00PM)之间的整数。该函数在时间数据分析、考勤统计、日程安排等场景中应用广泛。语...

Filter+Search信息管理不再难|多条件|模糊查找|Excel函数应用

原创版权所有介绍一个信息管理系统,要求可以实现:多条件、模糊查找,手动输入的内容能去空格。先看效果,如下图动画演示这样的一个效果要怎样实现呢?本文所用函数有Filter和Search。先用filter...

FILTER函数介绍及经典用法12:FILTER+切片器的应用

EXCEL函数技巧:FILTER经典用法12。FILTER+切片器制作筛选按钮。FILTER的函数的经典用法12是用FILTER的函数和切片器制作一个筛选按钮。像左边的原始数据,右边想要制作一...

office办公应用网站推荐_office办公软件大全

以下是针对Office办公应用(Word/Excel/PPT等)的免费学习网站推荐,涵盖官方教程、综合平台及垂直领域资源,适合不同学习需求:一、官方权威资源1.微软Office官方培训...

WPS/Excel职场办公最常用的60个函数大全(含卡片),效率翻倍!

办公最常用的60个函数大全:从入门到精通,效率翻倍!在职场中,WPS/Excel几乎是每个人都离不开的工具,而函数则是其灵魂。掌握常用的函数,不仅能大幅提升工作效率,还能让你在数据处理、报表分析、自动...

收藏|查找神器Xlookup全集|一篇就够|Excel函数|图解教程

原创版权所有全程图解,方便阅读,内容比较多,请先收藏!Xlookup是Vlookup的升级函数,解决了Vlookup的所有缺点,可以完全取代Vlookup,学完本文后你将可以应对所有的查找难题,内容...

批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数

批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数在电商运营、物流对账等工作中,经常需要统计快递“揽收到签收”的耗时——比如判断某快递公司是否符合“3天内送达”的服务承...

Excel函数公式教程(490个实例详解)

Excel函数公式教程(490个实例详解)管理层的财务人员为什么那么厉害?就是因为他们精通excel技能!财务人员在日常工作中,经常会用到Excel财务函数公式,比如财务报表分析、工资核算、库存管理等...

Excel(WPS表格)Tocol函数应用技巧案例解读,建议收藏备用!

工作中,经常需要从多个单元格区域中提取唯一值,如体育赛事报名信息中提取唯一的参赛者信息等,此时如果复制粘贴然后去重,效率就会很低。如果能合理利用Tocol函数,将会极大地提高工作效率。一、功能及语法结...

Excel中的SCAN函数公式,把计算过程理清,你就会了

Excel新版本里面,除了出现非常好用的xlookup,Filter公式之外,还更新一批自定义函数,可以像写代码一样写公式其中SCAN函数公式,也非常强大,它是一个循环函数,今天来了解这个函数公式的计...

Excel(WPS表格)中多列去重就用Tocol+Unique组合函数,简单高效

在数据的分析和处理中,“去重”一直是绕不开的话题,如果单列去重,可以使用Unique函数完成,如果多列去重,如下图:从数据信息中可以看到,每位参赛者参加了多项运动,如果想知道去重后的参赛者有多少人,该...

Excel(WPS表格)函数Groupby,聚合统计,快速提高效率!

在前期的内容中,我们讲了很多的统计函数,如Sum系列、Average系列、Count系列、Rank系列等等……但如果用一个函数实现类似数据透视表的功能,就必须用Groupby函数,按指定字段进行聚合汇...

Excel新版本,IFS函数公式,太强大了!

我们举一个工作实例,现在需要计算业务员的奖励数据,右边是公司的奖励标准:在新版本的函数公式出来之前,我们需要使用IF函数公式来解决1、IF函数公式IF函数公式由三个参数组成,IF(判断条件,对的时候返...

Excel不用函数公式数据透视表,1秒完成多列项目汇总统计

如何将这里的多组数据进行汇总统计?每组数据当中一列是不同菜品,另一列就是该菜品的销售数量。如何进行汇总统计得到所有的菜品销售数量的求和、技术、平均、最大、最小值等数据?不用函数公式和数据透视表,一秒就...