PostgreSQL 数据库的前世此生


编辑:IT大咖说
阅读字数: 2976    用时: 10分钟

本文内容来源于Digoal(德哥)PostgreSQL2016中国用户大会(大象会)上的主题演讲,IT大咖说为PostgreSQL 中国社区合做的视频知识分享平台。前端


内容摘要

PostgreSQL是以加州大学伯克利分校计算机系开发的 Posrgres,如今已经改名为PostgreSQL。它是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。PostgreSQL 中国社区发起人之一Digoal为咱们带来PostgreSQL 前世此生、社区理念以及阿里云PostgreSQL内核优化。程序员

嘉宾分享视频地址:t.cn/RorS35x数据库


PostgreSQL前世此生编程


我在2015年加入了阿里云,并在阿里巴巴内部推广PostgreSQL。若是你原来使用的是那种相对较弱的其余数据库,用了PostgreSQL以后你会发现,原来数据库能够能够这么强大。
缓存


PostgreSQL发展历史服务器

PostgreSQL在1973年还处于一个浑沌初开的年代,在那个年代你们并不了解数据库。很不幸的是,在1982年的时候ingres就闭源了,走上了商业化的道路。网络


PostgreSQL真正诞生于二十世纪八十年代,它沿用了ingres不少的思想。到了1995年,两位华人把PostgreSQL的SQL引擎改掉以后,正式社区化了。在1995年的时候它是一个“金蝉脱壳”的状态。PostgreSQL今后诞生了。
数据结构


版本迭代机器学习

从最初的版本PG95到如今,基本上它每一年会发一个大的版本,每三个月左右可能会出一个小版本。咱们今天所看到的已经release出来的最新版本是9.6的版本。异步




我会将整个PostgreSQL从诞生到9.6中间这些过程里的一些里程碑和你们分享一下。


7.2版本

PostGIS:

穿越回2002年,从这个版本开始就出现不少平常使用中会接触到的一些特性。好比在02年的时候它已经支持GIS,到如今GIS在民用里已经很是普遍了。这里用得最多的是二维或是根据经纬度作一些距离的搜索。

但PG和其余诞生于互联网的数据库的地理位置信息处理不太同样,它还作了像raster这种数据类型的处理,在军工、科研的领域要求就比较高。

对于二维的类型,好比它支持点面判断、支持距离的计算等等,这种运算在数据库里面都实现。因此说它的支持比较完备。


另一个就是索引。对一个数据库来讲,真正的支持一个数据类型,除了可以input、output,可以支持计算以外,还须要加一个索引。

最后就是函数。能使用本身编写的UDF或者内置的UDF去处理数据类型,这样对一个数据库来讲才可以真正称得上支持这个数据类型。所以PostGIS在PostgreSQL里面真正作到了一个对数据类型的支持。


8.4版本

窗口查询-数据透视:

从2002年飞越到2009年,发布8.4版本的时候就已经支持窗口查询。

好比根据学生的学号在不一样窗口里查它数据的属性。要查省里排名第一的人,以及跟第一的人名次分值差异是多少。另外还有一个窗口,好比这个城市或者学校里又会有和那个窗口里第一名的差距。若是说没有语法支持的话,得跟数据库交互不少次才可以知足业务上的需求。跟数据库交互有很大开销,因此在这一块有窗口查询功能是比较好的。


递归查询-支持树形结构数据:

另一个就是递归查询。好比要根据数据结构从某一个节点往上或往下推出来它对应的节点,使用递归查询就能够很方便的来完成这个需求。



递归查询:优化count(distinct)

递归查询还有另一个好处,它能够作一个收敛的查询。在数据稀疏的状况下,利用递归查询和直接count(distinct)的性能差别是很是大的。



并行恢复:

当时支持了逻辑层面的并行恢复。


9.0版本

异步流复制:

在9.0的时候支持了异步流复制,基本上能够作到毫秒级的延迟,跟网络环境固然也是息息相关的。同时它支持一组多备、支持备库的read only。并且备库的read only不会影响redo。最重要的一点是这种方式它是物理一致的,不是逻辑一致。由于逻辑上保证一致性仍是有比较大的风险,比较容易出现主备不一致的问题。可是物理上基本上就不会有这样的问题。


快速大版本升级:

把一个数据库分为两个数据的种类。一个是这个元数据,另一个就是数据文件。大版本的升级实际上只须要把元数据拷贝到新的版本里去,数据文件不用拷过去,因此这个升级是很快的。

那么最后是要作一个统计信息的从新收集。由于大版本的升级每每是统计信息的元数据有可能会变,统计信息会在新版本里面失效,因此在新版本里就得从新去生成统计信息。生成统计信息的速度仍是比较快的。


9.1版本

同步流复制:

9.1在流复制这一块加了一个同步的功能,用户能够根据事务可靠性要求,选择本事务是否须要同步复制。


KNN查询索引支持:

针对近邻查询作了一个索引的支持。好比要根据经纬度去查询最近的用户,或者根据数值查询最相邻数值,以及根据文本类似度查询最类似文本。

像探探、陌陌这种应用里一个最核心的诉求,就是根据距离查询用户。


FDW接口:

在一家比较大的企业里,可能会用到不少数据库的品种。如今有了FBW以后的话,对应用来讲,它会更加轻松了。能够经过外部的访问接口直接去透传到远端的数据库。



9.2版本

GiST取代B-Tree用于范围匹配查询:

传统B-Tree的查询效率比较低,而GiST能够存一个范围的数据类型,使用这个索引检索,能够达到八万TPS,性能提高很是明显。



JSON支持:

JSON在9.2的时候仅支持数据的存取,同时可以使用JavaScript语言处理数据类型,因此在9.2的时候JSON的支持是不完美的。


级联复制:

在9.2的时候还推出了级联复制。它的好处是提升了效率,减轻了负担。



9.3版本

物化视图:

9.3支持了物化视图。假如要频繁查询某一份大数据里某些维度的数据,而且要带上一些比较奇怪的条件。以往可能要在全范围的数据里面去作检索,如今能够把它作成一个物化视图,以后去这个物化视图里查询数据。


可写FDW:

FDW已经支持可写了。如今不只仅能够读过来,还能够写过去,这也为sharding打下了一个基础。


事件触发器:

9.3还有一个特性叫事件触发器。它其实做用很是多,好比逻辑复制里面的DDL没法复制,可能要作一些堵塞式的操做。使用事件触发器的话,操做就比较方便。

另外它还有一个很好的做用,就是在企业里面,DBA是很难控制的。一般咱们是把DBA的行为记录下来,可是不能避免它去作一些DDL的动做。那么使用事件触发器,它就可以控制。这个实际上是对DBA的一种保护。


9.4版本

JSONB:

JSONB是真正一个完备的支持,如今除了IO以外,还有了OP、AM、func来支持它。

它能够作任意KEY或者value的索引支持。

在value里它支持numeric、string、time、array等,包括经常使用的JSON类型查询、构造符都支持。


多master复制:

多Master基于redo的逻辑复制,是9.4的一个新特性。


防止雪崩:

使用缓存预热的插件能够抵御雪崩效应,响应时间保持平稳。

高效(秒、毫秒级)模糊检索、分词:

PG支持和搜索引擎同样的功能,即便先后都遮挡了,PostgreSQL也能把它查出来。




9.5版本

流式数据-块级索引BRIN:

在物联网里有不少传感器,这些传感器会不停发数据上来,常常要处理和时间维度相关的数据。所以时间维度和存储数据的线性相关性是很强的,在这种状况下就能够作块级索引。


GIS数据结合窗口、多维分析:

避免了冗余扫描和计算,每一个大范围的数据只须要扫一次;解决灵活多变的多维透视需求。

同时也解放了程序员的双手,一次性统计出全部可能产生的维度。

9.6版本

并行计算-精准营销:

加了基于CPU的并行计算以后,不少企业作报表的时候能够在PG里用上全部资源,就不须要把数据同步出去来处理。


金融级-多副本可靠性:

支持任意副本,提供了很是高的可靠性要求副本。

前端-任意维度勾选:

Bloom,gin,任意索引bitmap合并等技术解决任意列组合查询的效率和弹性问题。


10版本

10版本预计2017金秋全新发布,敬请期待…


其它插件

GIS业务-最佳路径计算

图像搜索

基因测序

3D数据处理

一条SQL搞定聚类分析

线性回归例子

机器学习UDF库

一条SQL搞定流式实时处理

超轻锁-秒杀特性

数据库编程能力

估值计算

文本挖掘-类似度

物联网-旋转门压缩


PostgreSQL社区理念


PostgreSQL将是继ingres以后又一个改变世界的产品。


阿里云PostgreSQL内核优化


阿里云ApsaraDB for PostgreSQL正在努力将数据库与其余云产品实现更好的衔接和配合。经过oss_fdw插件,使得PostgreSQL能够和云端对象存储配合使用,将冷数据存入oss,实现冷热分离和多实例数据共享。将来将与其余更多云端组件进行衔接。


点击www.itdks.com进入干货密道

相关文章
相关标签/搜索