为什么PostgreSQL是最先进的开源数据库
背景
打开PostgreSQL网站,你会看到这样的flag。
The world’s most advanced open source database.
那么它从何而来呢?
从个人对数据库的角度,在几个方面来分析一下
一、功能方面
1 数据处理能力 - 高级SQL特性
1、窗口查询
2、聚合查询,支持WITHIN GROUP、grouping sets, rollup, cube等
4、merge,upsert (on conflict)语法
5、继承
6、重写规则
7、物化视图
8、异步消息
2 数据处理能力 - 丰富类型
除了常见类型还包括扩展类型
3、字符串
4、货币
5、字节流
6、布尔
7、枚举
8、几何
9、网络
10、比特流
11、全文检索
12、UUID
13、XML
14、JSON
15、数组
16、复合
17、范围
18、大对象
19、K-V类型
20、多维类型
21、树类型
22、加密类型
23、模糊查询加速类型
24、扩展类型,见扩展章节
3 数据处理能力 - 丰富函数
5、字节流处理函数
6、比特流处理函数
8、全文检索处理函数
https://www.postgresql.org/docs/10/static/functions-net.html
https://www.postgresql.org/docs/10/static/functions-xml.html
11、序列
12、数组处理函数(是否相交、包含、不包含、差集、交集、等)
13、范围类型处理函数(是否相交、包含、不包含、差集、交集、等)
14、条件表达式
15、子查询
16、行、数组构造器
17、聚合函数
18、窗口函数
19、触发器
20、事件触发器
4 数据快速检索能力 - 先进索引
1、函数、表达式索引
2、多列索引
4、部分索引
6、hash 索引
7、GIN 倒排索引
10、BRIN 块级索引
11、RUM 增强全文索引
12、BLOOM 布隆过滤索引
16、《PostgreSQL 10.0 preview 功能增强 - 唯一约束+附加字段组合功能索引》
17、《PostgreSQL 10.0 preview 优化器改进 - 不完整索引支持复合排序》
18、《PostgreSQL 10.0 preview 性能增强 - 间接索引(secondary index)》
5 数据处理能力 - 高级编程特性
3、sql存储过程
4、tcl存储过程
5、perl存储过程
7、CUDA存储过程](https://github.com/pg-strom/devel)
8、R存储过程
9、C嵌入式编程
11、还支持众多语言:ruby, sh, java, php, xslt等等
6 复制能力
1、逻辑流式订阅
2、物理流式复制
3、时间线逆转
7 高级内部特性
2、TOP SQL
3、锁
《PostgreSQL 锁等待监控 珍藏级SQL - 谁堵塞了谁》
4、进程进度报告
5、探针
6、扩展探针
7、buffer内窥
8、数据文件内窥
9、REDO内窥
10、钩子
11、流复制控制函数
12、事务快照接口
13、系统管理函数
15、大版本原地升级
16、plan hint
二、安全、可靠性方面
1、认证模式
2、行安全策略
3、视图栅栏
5、时间点恢复
6、块级增量备份
https://github.com/postgrespro/pg_probackup
7、流式备份
8、异地容灾
三、性能方面
1 多核并行计算
https://www.postgresql.org/docs/10/static/parallel-query.html
2 多机并行计算
fdw + inherit + append parallel
https://www.postgresql.org/docs/10/static/postgres-fdw.html
https://www.postgresql.org/docs/10/static/tutorial-inheritance.html
3 黑科技
1、llvm
《PostgreSQL 10.0 preview 性能增强 - 推出JIT开发框架(朝着HTAP迈进)》
2、向量计算
《PostgreSQL 向量化执行插件(瓦片式实现) 10x提速OLAP》
3、列存储
《分析加速引擎黑科技 - LLVM、列存、多核并行、算子复用 大联姻 - 一起来开启PostgreSQL的百宝箱》
4 优化器
1、成本因子接口
2、统计信息
3、自定义统计信息
4、遗传算法
6、支持 plain, sorted, hashed, mixed 聚合策略
src/backend/commands/explain.c
7、39种NODE类型
src/backend/commands/explain.c
Agg:
Append:
BitmapAnd:
BitmapHeapScan:
BitmapIndexScan:
BitmapOr:
CteScan:
CustomScan:
ForeignScan:
FunctionScan:
Gather:
GatherMerge:
Group:
Hash:
HashJoin:
IndexOnlyScan:
IndexScan:
Limit:
LockRows:
Material:
MergeAppend:
MergeJoin:
ModifyTable:
NamedTuplestoreScan:
NestLoop:
ProjectSet:
RecursiveUnion:
Result:
SampleScan:
SeqScan:
SetOp:
Sort:
SubqueryScan:
TableFuncScan:
TidScan:
Unique:
ValuesScan:
WindowAgg:
WorkTableScan:
8、支持并行sort(merge sort)
四、SQL兼容性方面
1、SQL:2011
160/179项 SQL:2011 的实现,覆盖率达到 89.4%,另外还有大量扩展。
五、扩展接口方面
1、扩展函数
2、扩展聚合
3、扩展类型
4、扩展操作符
5、扩展索引
6、扩展全文检索词典
7、扩展编程语言
https://wiki.postgresql.org/wiki/PL_Matrix
8、扩展外部数据源
https://wiki.postgresql.org/wiki/Fdw
9、扩展数据采样接口
https://github.com/pg-strom/devel
11、扩展WAL接口
12、扩展GiST索引
13、扩展SP-GiST索引
14、扩展GIN索引
15、扩展BRIN索引
六、横向生态 - 插件
PostgreSQL 的扩展接口丰富,使得在开源、商业生态中有非常多PostgreSQL的扩展插件。
1、内置插件
2、pgxn
4、github
5、独立插件生态:
商业数据库、数据库支持服务公司、用户、个人、高校、应用软件开发商、其他开源社区。
例如 PostGIS, pgrouting, pipelinedb流计算插件, timescaledb时序插件, rdkit化学插件, madlib机器学习插件, plr R语言插件, postbis DNA插件, imgsmlr图像特征插件, pgfingerprint指纹特征插件 等.
七、生态方面
1、内核生态
2、高校生态
PostgreSQL起源伯克利大学,与高校有非常深的渊源,也被业界贴上了学院派数据库的标签。同时PG社区趋于遵从行业标准设计,代码严谨、工整,许多高校将PG用于数据库教学。
3、开发者生态
http://cn.bing.com/search?q=postgresql+user+group&qs=n&form=QBLH&sp=-1&pq=postgresql+user+group&sc=0-21&sk=&cvid=A865739EF479477EB27A3A8DB9895CC1
5、技术支持服务生态
全球有很多技术支持服务商业公司,其中不乏PostgreSQL社区的核心贡献者。
5.1、EDB
5.2、2ND
5.4、PGEXPERT
5.5、河马(tom lane)
5.6、cybertec
5.7、阿里云
5.8、stackoverflow
6、全球主要贡献者
八、业务场景
1、功能强大,支持非常多业务场景
2、HTAP发展方向
九、其他
功能强大,同时简单易用