PostgreSQL 到底比其他的强了在哪里了
2020-01-15阅读 1650

1.jpg

最近听到一个说法,传统的关系型数据库分为两种,PostgreSQL 和Others,听上去有些刺耳,但为什么会有这么个说法,是吹牛皮吹大了,还是别的数据库,真的是别的数据库。


提出这个说法的一个依据就是 extension APIS, 学过POSTGRESQL 的一开始都会被他的 extension 弄了乱七八糟,但在进去后,发现extension 真xx的是一个好东西,数据库有了这东西,等同于玩游戏开了外挂,只要你有需求,各种外挂都能挂上。这在别的数据库还真是没有,如果以此来说,倒也有几分道理。或者嗓门在大一点,可以说这彻底改变了玩数据库的方式。

Extension 主要的工作就是将一个外部的软件的功能添加到postgresql,以类似函数的方式,每个extension 绑定了一个相关的object,这是从postgresql 9.1 开始的提供的官方的API去扩展任何数据库模块的标准做法。


这与MYSQL 的plugin 不一样的地方是,postgresql 是动态的加载这些objects 到postgres 的系统空间中。(当然有些需要加载库,注:库不是数据库,而是程序方面的一个概念)


那到底你可以extend点什么到postgres 中


1 type system and operators

2 user defined functions and aggregates

3 storage system and index

4 write ahead logging and relication

5 transaction engine

6 background worker processes

7 background workder processes

8 query planner and query executor 

9 configuration and database metadata


看完上面的几个点,你有几个想法,我的第一个想法就是POSTGRESQL 实际上真是一个“开源”数据库。可以看看上边的list 只要你愿意,你有开发的天赋,你完全可以开发一些适合你公司自己的业务需求的数据库功能。即使同为开源的其他数据库,也是不大可能让你这么干的。开源如果仅仅等于省钱,那和安装盗版数据库除了法律上的不同,我想也就那么回事。而POSTGRESQL 的开源,不等同于免费,而是彻底的开放,只要你有能耐。如同去成年人的玩具店,你是愿意买个乐高,还是买个电子玩具车。Postgresql 是乐高毋庸置疑,我想没有几个人会愿意抱怨乐高最后拼装的东西差劲,因为那样貌似在说自己的创造力和构造力不行。


举例通过extension postgresql 对非结构化的数据的支持,算是传统数据库里面的优等生,XML ,FULL-TEST SEARCH , JSON, JSONB 等都是没有问题

2.jpg

因为可以更方便的处理非结构数据,POSTGRESQL 和 MONGODB 之间也有些不大好的新闻,例如某国外大媒体,直接用 Postgresql 替换mongodb的“传闻”。

同时,例如HLL的extension 创造了一种新的数据类型hll,即HyperLogLog数据结构。HyperLogLog是一种固定大小、类似于集合的结构,用于具有可调精度的不同值计数。例如,在1280字节中,hll可以估计数百亿个不同值的计数,只有几个百分比的错误,


当然extension 的能量也不仅仅如此,postgresql 为什么也能承担地理方面的专业处理功能,不还是插件 PostGIS.  更关键的是,插件就可以扩展功能的思路,和其他数据库,等待版本更新,或者安装plug-in,或者直接给你一个功能包。这不是功能上的差别,这是整体软件架构思路的不同。(参见25000行某数据库的吐槽)


更有意思的是通过fdw系列的插件,POSTGRESQL 可以从任意的数据库上读取数据,目前读取ORACLE, SQL SERVER , MYSQL, MONGODB 等等都不是问题,当然除此以外还有类似cstore_fdw 它是一个postgres扩展,它可以智能地将数据和查询分布在多个节点上,这样就可以扩展数据库并提高查询速度。


各种插件的功能导致POSTGRESQL 貌似没有不行的,包含 模糊查询走索引的插件,包含查看数据库底层数据库存储的插件,监控语句的执行效率的插件,太多的插件导致没有什么人能全部知晓或掌握。


最后虽对最上边的说法觉得有点“意思”,因为做人还是要谦虚点,但你要说他那么说,也有些道理。

3.jpg