614
技術社區[雲棲]
為什麼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、開發者生態
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發展方向
九、其他
功能強大,同時簡單易用
最後更新:2017-06-13 02:31:56