如何找对业务G点, 体验酸爽?PostgreSQL使用指南

如何找对业务G点, 体验酸爽?PostgreSQL使用指南,第1张

概述介绍《如何找对业务G点, 体验酸爽?PostgreSQL使用指南》开发教程,希望对您有用。

《如何找对业务G点,体验酸爽?Postgresql使用指南》要点:
本文介绍了如何找对业务G点,体验酸爽?Postgresql使用指南,希望对您有用。如果有疑问,可以联系我们。

通用数据库就像带装修的房子一样,如果按数据库的功能划分,可以分为豪华装修、精装、简装.

Postgresql从sql兼容性、功能、性能、稳定性等方面综合评价的话,绝对算得上豪华装修级其余,用户拎包入住就可以.

不过通用的毕竟是通用的,如果G点不对的话,再豪华的装修你也爽不起来,这是很多通用数据库的弊病,但是本日Postgresql数据库会彻底颠覆你对通用数据库的看法.

基于Postgresql打造最好用的私人订制数据库

花了2个彻夜,写了一份Postgresql内核扩展指南,时间有限,内容以入门为主.

希望更多人对Postgresql内核扩展有个初步的了解,内核扩展并不需要对数据库内核有非常深的了解,用户只要把重点放在业务上,利用Postgresql开放的API实现对数据库内核能力的扩展,打造属于本身的数据库.

为什么要扩展数据库功能?

在回答这个问题前,我们先回答这个问题.

数据库是不是存数据就可以了?所有的运算都交给应用法式来?

在数据大集中、硬件本钱高的年代.在较为general的硬件条件下,为了避免数据库的计算成为瓶颈你可能会这样做,把数据库用得尽量简单,几乎不做任何的运算,只做简单的增删改查.

随着数据库技术的发展,水平分库被越来越多的得到应用.同时硬件也在赓续的发展,cpu核数、内存带宽、块设备的带宽和IOPS的发展都很迅猛.甚至GPU辅助运算也开始逐渐成为加速的焦点.

数据库的所依托的硬件运算才能已经非常强大,这种情况下只把数据库用作简单的数据存取会带来什么问题呢?

我之前写过一篇《论云数据库编程才能的重要性》,可以读一下,也许能找到以上问题的灵感.

https://yq.aliyun.com/articles/38377

随同硬件的飞速发展,叠加数据库的分片技术的发展,现如今使用general硬件的数据库也不再是瓶颈.

对于olTP的query,数据库往往可以做到us级响应,而在网络层可能要花上毫秒级的时间.业务逻辑越复杂,与数据库交互的次数越多,网络RT会成倍的放大,影响用户的体验.

逻辑更复杂一些的场景,需要将数据取到应用端,在应用端处理,这会涉及到move data,也会较大程度的放大网络RT.move data的模式正在逐渐成为影响用户体验、效率,浪费本钱的罪魁祸首.

如果能把数据库打造成为同事具备数据存储、管理与处理才能为一体的产品.在数据库硬件资源充足的情况下,把一些数据库能处理的逻辑交给数据库处理,将极大的降低延迟,在高并发低延迟的应用场景非常有效.

这考验的便是数据库的扩展能力.

为什么Postgresql特别适合做内核扩展?

我提炼了3点适合做内核扩展的理由,有遗漏的话尽量来弥补啊,谢谢.

接 口 丰 富

Postgresql有哪些开放接口?

UDF(可以扩展 聚合、窗口以及普通 的函数)

https://www.postgresql.org/docs/9.5/static/xfunc-c.HTML

GiST,SP-GiST,GIN,BRIN 通用索引接口,允许针对任意类型自定义索引

https://www.postgresql.org/docs/9.5/static/gist.HTML

... ...

允许自定义扩展索引接口 (bloom例子)

https://www.postgresql.org/docs/9.6/static/bloom.HTML

https://www.postgresql.org/docs/9.6/static/xindex.HTML

*** 作符,允许针对类型,创立对应的 *** 作符

https://www.postgresql.org/docs/9.5/static/sql-createoperator.HTML

自定义数据类型

https://www.postgresql.org/docs/9.5/static/sql-createtype.HTML

FDW,外部数据源接口,可以把外部数据源当成当地表使用

https://www.postgresql.org/docs/9.5/static/fDWhandler.HTML

函数语言 handler,可以集成任意高级语言,作为数据库服务端的函数语言(例如java,python,swift,lua,......)

https://www.postgresql.org/docs/9.5/static/plhandler.HTML

动态fork 进程,动态创立共享内存段.

https://www.postgresql.org/docs/9.5/static/bgworker.HTML

table sampling method,可以自定义数据采样办法,例如创建测试环境,根据用户的需求定义采样办法.

https://www.postgresql.org/docs/9.5/static/tablesample-method.HTML

custom scan provIDer,允许自定义扫描方法,扩展原有的全表扫描,索引扫描等.(例如GPU计算单元可以通过DMA直接拜访块设备,绕过USER SPACE,极大的提高传输吞吐率)

https://www.postgresql.org/docs/9.5/static/custom-scan.HTML

自定义REDO日志encode,decode接口,例如可以用它打造黑洞数据库

https://www.postgresql.org/docs/9.6/static/generic-wal.HTML

用户可以利用这些接口,打造适合业务的私人订制的数据库.来适配各种特殊场景的需求.

关键是你不必要了解数据库内部的实现,只必要使用这些扩展接口就可以了.

全球使用最广泛的地理位置信息管理系统PostGIS便是通过这种接口扩展的Postgresql插件.

(集自定义的数据类型,自定义的 *** 作符,以及在GIN、GiST、SP-GiST、B-tree上开发的索引与一身的插件)

Postgresql是进程模式

进程模式也是优势? 必需的.

相比线程模式,多进程相对来讲稳定性较好,一个进程挂掉,重新拉起来就好,但是一个线程crash会导致整个进程都crash.

你肯定不希望给数据库加个功能就把数据库搞挂吧,如果是线程模式,扩展数据库的功能就必要非常谨慎.

而Postgresql提供的接口已经有非常多年的历史,通过这些接口开发的插件也是不可胜数,接口非常稳定,再加上进程模式,你可以大胆的扩展Postgresql的功能. 后面我会给大家看看有哪些不可胜数的插件.

BSD 许可

擦,BSD许可也是优势? 必需的.

如果你要把你加过功能的Postgresql包装成产物售卖,你就会发现BSD的好. 它允许你任意形式分发.

内核扩展指南

Postgresql内核概貌

如何阐发数据库代码的瓶颈

如何自定义UDF

C类型和sql类型的对应关系

用户获取sql参数的宏

用户返回成果给sql函数的宏

C UDF例子,sql输入为composite类型

如何编译C FUNC、创立sql FUNC

C函数是扩展中最基本的用法,必需掌握.

聚合、窗口、数据类型、 *** 作符、索引,FDW等,都是围绕或者直接基于C FUNC的.

后面你就会理解了,特别是看了语法后,会有更深刻的理解.

聚合函数原理

希望理解好迭代函数,迭代函数的输入参数,初始迭代值,迭代中间结果,以及闭幕函数,和闭幕类型.

自定义聚合函数

自定义窗口函数

自定义数据类型

数据类型最基本的是输入和输出函数,分别将sql的text输入转换成C的输入,将C的输出转换成sql的text.

文本是必要依赖字符编码的,所以PG还支持基于二进制的输入和输出函数,通常可以用来实现数据的逻辑复制,而不必要关心编码的转换问题,所见即所得.

自定义 *** 作符

*** 作符其实也是函数的抽象,包含 *** 作符的元, *** 作符的 *** 作数的类型,以及 *** 作符的等价 *** 作符以及反转 *** 作符的定义(被query rewrite用来重写sql,以适用更多的执行计划选择)

例如: a<>1 等价于 not (a=1),这样的,都是可以互换的.

与 *** 作符相关的,还有优化器相关的OPTION以及JOIN的选择性因子.

自定义 *** 作符例子

自定义索引语法

自定义索引也非常简单,需要实现索引办法中必须的support函数,同时将 *** 作符添加到索引的op class即可.

这些OP就可以用这个索引.

GIN索引接口介绍

GiST索引接口介绍

SP-GiST 索引接口介绍

BRIN,BTREE,hash索引接口介绍

gin,gist,sp-gist,brin索引接口的strategy是不固定的,用户可以自行根据索引功能的形态增加.

btree和hash索引接口的strategy是固定的.

自定义GIN索引例子

取自contrib

Postgresql 内核扩展接口总结

如何打包与发布Postgresql 插件

GPU、FPGA如何与Postgresql深度整合

PG-Strom介绍

PG-Strom原理介绍

pg-strom利用了planner的hook,在生成执行计划时,使用自定义的执行计划生成器,打造属于本身的执行计划.

同时通过custom scan provIDer,用户可以使用GPU计算单元使用DMA的方式直接拜访块设备,绕过了buffer cache,提升拜访吞吐率.

同时自定义计算节点,包含JOIN,排序,分组,计算等,都可以交给GPU来处理.

这样就实现了GPU加速的目的.

GPU加速方向

BulK数据计算.

例如:

动态路径规划.

基于BIT运算的人物、人群、企业、小区、城市画像等.

大量数据的文天职析和学习.

动态路径规划

bit逻辑运算

PostGIS点面判断

(笔误,这可能不是gpu的强项,GPU的强项是BulK计算,对延迟没要求,但是对处理才能有要求的场景.)

(点面判断属于olTP的场景,不必要用到GPU)

除了GPU加速,其实LLVM也是BulK计算的加速方式之一,并且性能非常的棒.

Deepgreen,VitesseDB,Redshift都在使用LLVM技术,加速BulK 计算的场景.

【参考材料】

【扩展举例】

Postgresql非常适合内核功能扩展,空口无凭.

我给大家列举一些例子.

基因测序插件

https://colab.mpi-bremen.de/wiki/display/pbis/PostBIS

化学类型插件

http://rdkit.org/

指纹类型插件

地理位置信息管理插件

http://postgis.org/

K-V插件: hstore,Json

流式数据处置插件

http://www.pipelinedb.com/

时间序列插件

https://github.com/tgres/tgres

近似度匹配: pg_trgm

ES插件

https://github.com/Mikulas/pg-es-fDW

R语言插件

http://www.joeconway.com/plr/

分布式插件

https://github.com/citusdata/citus

列存储插件

https://github.com/citusdata/cstore_fDW

内存表插件

https://github.com/knizhnik/imcs

外部数据源插件

https://wiki.postgresql.org/wiki/FDW

hll,bloom,等插件

数据挖掘插件

http://madlib.incubator.apache.org/

中文分词插件

https://github.com/jaiminpan/pg_jIEba

https://github.com/jaiminpan/pg_scws

cassandra插件

https://github.com/jaiminpan/cassandra2_fDW

阿里云的对象存储插件 oss_fDW

https://yq.aliyun.com/articles/51199

... ...

可以找到开源Postgresql插件的处所

https://git.postgresql.org/gitweb/

http://pgxn.org/

http://pgfoundry.org/

https://github.com/

http://postgis.org/

http://pgrouting.org/

https://github.com/pgpointcloud/pointcloud

https://github.com/postgrespro

... ...

以上都是Postgresql非常适合内核扩展的见证.

想像一下可以扩展的行业

图像辨认

基于地理位置,O2O的任务调度

电路板检测

脚模

路径规划

透明的冷热数据分离

物联网行业

金融行业

... ...

Postgresql几乎任何领域都可以深入进去.

【小结】

.1. Postgresql 的 进程模式,为内核扩展提供了非常靠谱的保障.

.2. 你 不必要了解PG内核 是如何编写的,你只必要了解业务,同时使用PG提供的API接口,扩展PG的功能.

.3. 几乎所有扩展都是基于 C FUNC 的,所以你务需要掌握好Postgresql C FUNC的用法.

.4. Postgresql有 BSD许可 的优势,在其他开源许可吃过亏的大型企业,现在都非常重视开源许可了.(如果你现在不重视,难道等着养肥了被杀^-^?)

.5. Postgresql的扩展才能是它的 核心竞争力 之一,好好的利用吧.

一起来打造属于本身的数据库,发挥Postgresql的真正实力,开启一个新的数据库时代吧.

欢迎参加阿里云!

Postgresql、Greenplum、MysqL、Redis、mongoDB、Hadoop、Spark、sql Server、SAP、... ... 只要是你见过的数据库,都有可能在阿里云上相遇.

技术提高生产力,一起为社会发明价值.

《如何找对业务G点,体验酸爽?Postgresql使用指南》是否对您有启发,欢迎查看更多与《如何找对业务G点,体验酸爽?Postgresql使用指南》相关教程,学精学透。内存溢出PHP学院为您提供精彩教程。

总结

以上是内存溢出为你收集整理的如何找对业务G点, 体验酸爽?PostgreSQL使用指南全部内容,希望文章能够帮你解决如何找对业务G点, 体验酸爽?PostgreSQL使用指南所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1182772.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存