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

《阿里云德哥:PostgreSQL 数据库的前世今生》要点:
本文介绍了阿里云德哥:PostgreSQL 数据库的前世今生,希望对您有用。如果有疑问,可以联系我们。

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

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

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

内容摘要

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

大咖演讲视频

http://t.cn/RorS35x

PostgreSQL前世今生

我在2015年加入了阿里云,并在阿里巴巴内部推广PostgreSQL.如果你本来使用的是那种相对较弱的其他数据库,用了PostgreSQL之后你会发现,本来数据库可以可以这么强大.

PostgreSQL发展历史

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

PostgreSQL真正诞生于二十世纪八十年代,它沿用了ingres很多的思想.到了1995年,两位华人把PostgreSQL的SQL引擎改掉之后,正式社区化了.在1995年的时候它是一个“金蝉脱壳”的状态.PostgreSQL从此诞生了.


版本迭代

从最初的版本PG95到现在,基本上它每年会发一个大的版本,每三个月左右可能会出一个小版本.我们本日所看到的已经release出来的最新版本是9.6的版本.

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

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

7.2版本

PostGIS:

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

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

对于二维的类型,比如它支持点面判断、支持距离的计算等等,这种运算在数据库里面都实现.所以说它的支持比拟完备.

另外一个就是索引.对一个数据库来说,真正的支持一个数据类型,除了能够input、output,能够支持计算之外,还必要加一个索引.

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

8.4版本

窗口查询-数据透视:

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

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

递归查询-支持树形布局数据:

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

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

递归查询:优化count(distinct)

递归查询还有另外一个好处,它可以做一个收敛的查询.在数据稀疏的情况下,利用递归查询和直接count(distinct)的性能差别是非常大的.

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

并行恢复:

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

9.0版本

异步流复制:

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

快速大版本升级:

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

那么最后是要做一个统计信息的重新收集.因为大版本的升级往往是统计信息的元数据有可能会变,统计信息会在新版本里面失效,所以在新版本里就得重新去生成统计信息.生成统计信息的速度还是比拟快的.

9.1版本

同步流复制:

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

KNN查询索引支持:

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

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

FDW接口:

在一家比较大的企业里,可能会用到很多数据库的品种.现在有了FBW之后的话,对应用来说,它会更加轻松了.可以通过外部的拜访接口直接去透传到远端的数据库.

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


9.2版本

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

传统B-Tree的查询效率比拟低,而GiST可以存一个范围的数据类型,使用这个索引检索,可以达到八万TPS,性能提升非常明显.

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


JSON支持:

JSON在9.2的时候仅支持数据的存取,同时能够使用JavaScript语言处理数据类型,所以在9.2的时候JSON的支持是不完美的.

级联复制:

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

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

9.3版本

物化视图:

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

可写FDW:

FDW已经支持可写了.现在不仅仅可以读过来,还可以写过去,这也为sharding打下了一个基础.

变乱触发器:

9.3还有一个特性叫事件触发器.它其实作用非常多,比如逻辑复制里面的DDL无法复制,可能要做一些堵塞式的操作.使用事件触发器的话,操作就比拟方便.

另外它还有一个很好的作用,就是在企业里面,DBA是很难控制的.通常我们是把DBA的行为记录下来,但是不能避免它去做一些DDL的动作.那么使用事件触发器,它就能够控制.这个其实是对DBA的一种掩护.

9.4版本

JSONB:

SONB是真正一个完备的支持,现在除了IO之外,还有了OP、AM、func来支持它.

它可以做任意KEY或者value的索引支持.

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

多master复制:

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

防止雪崩:

使用缓存预热的插件可以抵御雪崩效应,响应时间保持安稳.

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

PG支持和搜索引擎一样的功能,即使前后都遮挡了,PostgreSQL也能把它查出来.


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


9.5版本

流式数据-块级索引BRIN:

在物联网里有很多传感器,这些传感器会不绝发数据上来,经常要处理和时间维度相关的数据.因此时间维度和存储数据的线性相关性是很强的,在这种情况下就可以做块级索引.

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

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

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

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

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


9.6版本

并行计算-精准营销:

加了基于CPU的并行计算之后,很多企业做报表的时候可以在PG里用上所有资源,就不必要把数据同步出去来处理.

金融级-多副本可靠性:

支持任意副本,提供了非常高的可靠性要求副本.

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


前端-任意维度勾选:

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

10版本

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

其它插件

GIS业务-最佳路径计算

图像搜索

基因测序

3D数据处理

一条SQL搞定聚类分析

线性回归例子

机器学习UDF库

一条SQL搞定流式实时处理

超轻锁-秒杀特性

数据库编程才能

估值计算

文本挖掘-相似度

物联网-旋转门压缩

PostgreSQL社区理念

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

PostgreSQL将是继ingres之后又一个改变世界的产物.

阿里云PostgreSQL内核优化

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

欢迎参与《阿里云德哥:PostgreSQL 数据库的前世今生》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读601次。Oracle的数据导入导出是一项基本的技能,但是对于懂数据库却不熟悉Oracle的同学可能会有一定的障碍。正好在最近的一个项目中碰到了这样一个任务,于是研究了一下Oracle的数据导入导出,在这里跟大家分享一下。......_oracle 迁移方法 对比
文章浏览阅读553次。开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共700多人左右 1 + 2)。最近我们在使用MYSQL 8 的情况下(8.025)在数据库运行中出现一个问题 参数prefer_order_i..._mysql prefer_ordering_index
文章浏览阅读3.5k次,点赞3次,收藏7次。折腾了两个小时多才成功连上,在这分享一下我的经验,也仅仅是经验分享,有不足的地方欢迎大家在评论区补充交流。_navicat连接opengauss
文章浏览阅读2.7k次。JSON 代表 JavaScript Object Notation。它是一种开放标准格式,将数据组织成中详述的键/值对和数组。_postgresql json
文章浏览阅读2.9k次,点赞2次,收藏6次。navicat 连接postgresql 注:navicat老版本可能报错。1.在springboot中引入我们需要的依赖以及相应版本。用代码生成器生成代码后,即可进行增删改查(略)安装好postgresql 略。更改配置信息(注释中有)_mybatisplus postgresql
文章浏览阅读1.4k次。postgre进阶sql,包含分组排序、JSON解析、修改、删除、更新、强制踢出数据库所有使用用户、连表更新与删除、获取今年第一天、获取近12个月的年月、锁表处理、系统表使用(查询所有表和字段及注释、查询表占用空间)、指定数据库查找模式search_path、postgre备份及还原_pgsql分组取每组第一条
文章浏览阅读3.3k次。上一篇我们学习了日志清理,日志清理虽然解决了日志膨胀的问题,但就无法再恢复检查点之前的一致性状态。因此,我们还需要日志归档,pg的日志归档原理和Oracle类似,不过归档命令需要自己配置。以下代码在postmaster.c除了开启归档外,还需要保证wal_level不能是MINIMAL状态(因为该状态下有些操作不会记录日志)。在db启动时,会同时检查archive_mode和wal_level。以下代码也在postmaster.c(PostmasterMain函数)。......_postgresql archive_mode
文章浏览阅读3k次。系统:ubuntu22.04.3目的:利用向日葵实现windows远程控制ubuntu。_csdn局域网桌面控制ubuntu
文章浏览阅读1.6k次。表分区是解决一些因单表过大引用的性能问题的方式,比如某张表过大就会造成查询变慢,可能分区是一种解决方案。一般建议当单表大小超过内存就可以考虑表分区了。1,继承式分区,分为触发器(trigger)和规则(rule)两种方式触发器的方式1)创建表CREATE TABLE "public"."track_info_trigger_partition" ( "id" serial, "object_type" int2 NOT NULL DEFAULT 0, "object_name..._pg数据表分区的实现
文章浏览阅读3.3k次。物联网平台开源的有几个,就我晓得的有、、thingskit、JetLink、DG-iot(还有其他开源的,欢迎在评论区留言哦!),然后重点分析了下ThingsBoard、ThingsPanel和JetLink,ThingsBoard和Jetlinks是工程师思维产品,可以更多的通过配置去实现开发的目的,ThingsPanel是业务人员思路产品,或者开发或者用,避免了复杂的配置带来的较高学习门槛。ThingsBoard和Jetlinks是Java技术体系的,ThingsPanel是PHP开发的。_jetlinks和thingsboard
文章浏览阅读3.8k次。PostgreSQL 数据类型转换_pgsql数字转字符串
文章浏览阅读7k次,点赞3次,收藏14次。在做数据统计页面时,总会遇到统计某段时间内,每天、每月、每年的数据视图(柱状图、折线图等)。这些统计数据一眼看过去也简单呀,不就是按照时间周期(天、月、年)对统计数据进行分个组就完了嘛?但是会有一个问题,简单的写个sql对周期分组,获取到的统计数据是缺失的,即没有数据的那天,整条记录也都没有了。如下图需求:以当前月份(2023年2月)为起点,往后倒推一年,查询之前一年里每个月的统计数据。可见图中的数据其实是缺少的,这条sql只查询到了有数据的月份(23年的1月、2月,22年的12月)_如何用一条sql查出按年按月按天的汇总
文章浏览阅读3.8k次,点赞66次,收藏51次。PostgreSQL全球开发小组与2022年10月13日,宣布发布PostgreSQL15,这是世界上最先进的开源数据库的最新版本_mysql8 postgresql15
文章浏览阅读1.3k次。上文介绍了磁盘管理器中VFD的实现原理,本篇将从上层角度讲解磁盘管理器的工作细节。_smgrrelationdata
文章浏览阅读1.1k次。PostgreSQL设置中文语言界面和局域网访问_postgressql汉化
文章浏览阅读4.2k次。PostgreSQL 修改数据存储路径_如何设置postgresql 数据目录
文章浏览阅读4.7k次。在项目中用到了多数据源,在连接postgres数据库时,项目启动报错,说数据库连接错误,说dual不存在,网上好多教程都是说数据库查询的时候的大小写问题,而这个仅仅是连接,咋鞥却处理方法是修改application-dev.yml中的配置文件.项目中的druid参数是这样的:确实在配置文件中有个查询语句。_relation "dual" does not exist
文章浏览阅读4.9k次。PostgreSQL是一款强大的关系型数据库,但在实际使用过程中,许多用户经常会遇到慢SQL的问题。这些问题不仅会降低数据库性能,还会直接影响业务流程和用户体验。因此,本文将会深入分析PostgreSQL慢SQL的原因和优化方案,帮助用户更好地利用这个优秀的数据库系统。无论你是初学者还是专业开发者,本文都将为你提供实用的技巧和方法,让你的PostgreSQL数据库始终保持高效快速。_postgresql数据库优化
文章浏览阅读1.6k次。Linux配置postgresql开机自启_linux 启动pgsql
文章浏览阅读2k次。本篇介绍如何在centos7系统搭建一个postgresql主备集群实现最近的HA(高可用)架构。后续更高级的HA模式都是基于这个最基本的主备搭建。_postgresql主备