阿里云德哥:PostgreSQL 数据库的前世今生

待兔 等级 358 0 0

内容摘要

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

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

嘉宾演讲视频回顾及PPT:http://t.cn/RQ9S2aa

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,实现冷热分离和多实例数据共享。未来将与其他更多云端组件进行衔接。

今天的分享就到这里,谢谢大家!

收藏
评论区

相关推荐

阿里云德哥:PostgreSQL 数据库的前世今生
内容摘要 PostgreSQL是以加州大学伯克利分校计算机系开发的 Posrgres,现在已经更名为PostgreSQL。它是一个自由的对象关系数据库服务器(数据库管理系统),它在灵活的 BSD风格许可证下发行。PostgreSQL 中国社区发起人之一Digoal为我们带来PostgreSQL 前世今生、社区理念以及阿里云Postgr
postgresql和mysql哪个好
postgresql和mysql都是免费且功能强大的开源数据库,很多用户面对这两个库都会有一个问题,那就是哪一个才是最好的开源数据库,MySQL还是PostgreSQL呢?该选择哪一个开源数据库呢? postgresql和mysql哪个好 一.PostgreSQL相对于MySQL的优势 1、在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨;
[DB]PostgreSQL 与 MySQL 相比,优势何在?
PostgreSQL 与 MySQL 相比,优势何在? 数据库 知乎 Pg 没有 MySQL 的各种坑 MySQL 的各种 text 字段有不同的限制, 要手动区分 small text, middle text, large text... Pg 没有这个限制, text 能支持各种大小. 按照 SQL 标准, 做 null 判断不能用
PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库
最近准备下PostgreSQL数据库开发的相关知识,本文把总结的PPT内容通过博客记录分享,本随笔的主要内容是介绍PostgreSQL数据库的基础信息,以及如何在我们的开发框架中使用PostgreSQL数据库,希望大家多多提意见。 1、PostgreSQL数据库介绍 PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更
【译】为什么传统的PostgreSQL又流行起来了
本文译自 《Why oldschool PostgreSQL is so hip again》(https://www.infoworld.com/article/3240064/sql/whyoldschoolpostgresqlissohipagain.html) by Matt Asay(https://www.infoworl
PostgreSQL语法、连接
1.语法 1.插入数据(INSERT语句) 在PostgreSQL中,INSERT 查询用于在表中插入新行。 可以一次插入单行或多行到表中。 语法: INSERT INTO TABLE_NAME (column1, column2, column3,...columnN) VALUES (value1, value2, v
运维监控系统——Zabbix简介
前言对于运维人员来说,监控是非常重要的,因为如果想要保证线上业务整体能够稳定运行,那么我们则需要实时关注与其相关的各项指标是否正常,而一个业务系统的背后,往往存在着很多的服务器、网络设备等硬件资源,如果我们想要能够更加方便的、集中的监
Kubernetes部署高可用PostgreSQL集群
PostgreSQL 是一个功能强大的开源关系数据库,它使用和扩展了 SQL 语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能。PostgreSQL 的起源可以追溯到 1986 年,作为加利福尼亚大学伯克利分校 POSTGRES 项目的一部分,与 Linux 内核相似,PostgreSQL 是由社区驱动的开源项目,由全世界贡献者所维护。Postgre
IoT基础架构的演进 — Kuiper
EMQ X Kuiper 是映云科技开源的轻量级物联网边缘数据分析和流式处理软件, Kuiper 设计的一个主要目标就是将在云端运行的实时流式计算框架(如 Apache Spark,Apache Storm 和 Apache Flink 等)迁移到边缘端。Kuiper 参考了云端流式处理项目的架构与实现,结合边缘流式数据处理的特点,采用了编写基于源 (Sou
IoT基础架构的演进 — 边云自定义消息传输
边缘计算不仅仅是将应用部署在边缘,并对其进行自动化的监控和运维。在许多应用场景里,边缘和云上应用需要进行特定的消息传输、数据交换等,以完成边云协同的业务处理。例如,用户需要从云端发送命令至边缘的应用来触发特定的业务,或者边缘设备需要将采集的业务信息上传至云端处理。KubeEdge v1.6 版本增加了自定义边云消息传输的支持,用户可以根据场景,借助 Rule
运维安全-信息安全
本文转自 ,如有侵权,请联系删除。
MySQL8与PG10:新版本下的较量谁更胜一筹?
既然MySQL 8和PostgreSQL 10已经发布了,现在是时候回顾一下这两大开源关系型数据库是如何彼此竞争的。在这些版本之前,人们普遍认为,PostgreSQL在功能集表现更出色,也因其“学院派”风格而备受称赞,MySQL则更善长大规模并发读/写。但是随着它们最新版本的发布,两者之间的差距明显变小了。特性比较首先来看看我们都喜欢谈论的“时髦”功能。过去
数据库运维做些什么?
一. 数据库生命周期 结合软件生命周期、项目的开展,数据库的生命周期大致可分为这么几个阶段。 (https://imghelloworld.osscnbeijing.aliyuncs.com/8552b8c2942bb8ce23
PostgreSQL简史
现在被称为PostgreSQL的对象关系型数据库管理系统是从加州大学伯克利分校写的POSTGRES软件包发展而来的。经过二十多年的发展,PostgreSQL是世界上可以获得的最先进的开源数据库。 2.1. 伯克利的POSTGRES项目由Michael Stonebraker教授领导的POSTGRES项目是由防务高级研究项目局(DARPA)、陆军研究办公室(A
openGauss——VMware安装
写在前面 本教程适用于 0 基础小白,里面的很多命令、技术细节没有进行解释,因为那样要增补的内容太多了,都是一些 Linux 的相关知识,还有一些 openGauss 官方手册里面的内容,太过于啰嗦 学校上的数据库,安排的数据库的实验说要用华为这款开源的数据库,(估计是学校近些年一直跟华为合作),内核是拿 PostgreSQL 写的,老师给的教程是拿 Vir