pgsql处理文档类型数据_【干货总结】:可能是史上最全的MySQL和PGSQL对比材料
關于SQL特性支持情況的對比,可以參考:http://www.sql-workbench.net/dbms_comparison.html
9. 主從復制安全性
PGSQL
同步流復制、強同步(remote apply)、高安全,不會丟數據
PGSQL同步流復制:所有從庫宕機,主庫會罷工,主庫無法自動切換為異步流復制(異步模式),需要通過增加從庫數量來解決,一般生產環境至少有兩個從庫
手動解決:在PG主庫修改參數synchronous_standby_names ='',并執行命令:?pgctl reload?,把主庫切換為異步模式
主從數據完全一致是高可用切換的第一前提,所以PGSQL選擇主庫罷工也是可以理解
MySQL
增強半同步復制 ,mysql5.7版本增強半同步才能保證主從復制時候不丟數據
mysql5.7半同步復制相關參數:
參數rpl_semi_sync_master_wait_for_slave_count 等待至少多少個從庫接收到binlog,主庫才提交事務,一般設置為1,性能最高
參數rpl_semi_sync_master_timeout 等待多少毫秒,從庫無回應自動切換為異步模式,一般設置為無限大,不讓主庫自動切換為異步模式
所有從庫宕機,主庫會罷工,因為無法收到任何從庫的應答包
手動解決:在MySQL主庫修改參數rpl_semi_sync_master_wait_for_slave_count=0
10. 多字段統計信息
PGSQL
支持多字段統計信息
MySQL
不支持多字段統計信息
11. 索引類型
PGSQL
多種索引類型(btree , hash , gin , gist , sp-gist , brin , bloom , rum , zombodb , bitmap,部分索引,表達式索引)
MySQL
btree 索引,全文索引(低效),表達式索引(需要建虛擬列),hash 索引只在內存表
12. 物理表連接算法
PGSQL
支持? nested-loop join 、hash join 、merge join
MySQL
只支持? nested-loop join
13. 子查詢和視圖性能
PGSQL
子查詢,視圖優化,性能比較高
MySQL
視圖謂詞條件下推限制多,子查詢上拉限制多
14. 執行計劃即時編譯
PGSQL
支持JIT ?? 執行計劃即時編譯,使用LLVM編譯器
MySQL
不支持執行計劃即時編譯
15. 并行查詢
PGSQL
并行查詢(多種并行查詢優化方法),并行查詢一般多見于商業數據庫,是重量級功能
MySQL
有限,只支持主鍵并行查詢
16. 物化視圖
PGSQL
支持物化視圖
MySQL
不支持物化視圖
17. 插件功能
PGSQL
支持插件功能,可以豐富PGSQL的功能,GIS地理插件,時序數據庫插件, 向量化執行插件等等
MySQL
不支持插件功能
18. check約束
PGSQL
支持check約束
MySQL
不支持check約束,可以寫check約束,但存儲引擎會忽略它的作用,因此check約束并不起作用(mariadb 支持)
19. gpu 加速SQL
PGSQL
可以使用gpu 加速SQL的執行速度
MySQL
不支持gpu 加速SQL 的執行速度
20. 數據類型
PGSQL
數據類型豐富,如 ltree,hstore,數組類型,ip類型,text類型,有了text類型不再需要varchar,text類型字段最大存儲1GB
MySQL
數據類型不夠豐富
21. 跨庫查詢
PGSQL
不支持跨庫查詢,這個跟Oracle 12C以前一樣
MySQL
可以跨庫查詢
22. 備份還原
PGSQL
備份還原非常簡單,時點還原操作比SQL Server還要簡單,完整備份+wal歸檔備份(增量)
假如有一個三節點的PGSQL主從集群,可以隨便在其中一個節點做完整備份和wal歸檔備份
MySQL
備份還原相對不太簡單,完整備份+binlog備份(增量)
完整備份需要percona的XtraBackup工具做物理備份,MySQL本身不支持物理備份
時點還原操作步驟繁瑣復雜
23. 性能視圖
PGSQL
需要安裝pg_stat_statements插件,pg_stat_statements插件提供了豐富的性能視圖:如:等待事件,系統統計信息等
不好的地方是,安裝插件需要重啟數據庫,并且需要收集性能信息的數據庫需要執行一個命令:create extension pg_stat_statements命令
否則不會收集任何性能信息,比較麻煩
MySQL
自帶PS庫,默認很多功能沒有打開,而且打開PS庫的性能視圖功能對性能有影響(如:內存占用導致OOM bug)
24. 安裝方式
PGSQL
有各個平臺的包rpm包,deb包等等,相比MySQL缺少了二進制包,一般用源碼編譯安裝,安裝時間會長一些,執行命令多一些
MySQL
有各個平臺的包rpm包,deb包等等,源碼編譯安裝、二進制包安裝,一般用二進制包安裝,方便快捷
25. DDL操作
PGSQL
加字段、可變長字段類型長度改大不會鎖表,所有的DDL操作都不需要借助第三方工具
MySQL
由于大部分DDL操作都會鎖表,例如加字段、可變長字段類型長度改大,所以需要借助percona-toolkit里面的pt-online-schema-change工具去完成操作
將影響減少到最低,特別是對大表進行DDL操作
26. 大版本發布速度
PGSQL
PGSQL每年一個大版本發布,大版本發布的第二年就可以上生產環境,版本迭代速度很快
PGSQL 10正式版推出時間:2017年
PGSQL 11正式版推出時間:2018年
PGSQL 12正式版推出時間:2019年
MySQL
MySQL的大版本發布一般是2年~3年,一般大版本發布后的第二年才可以上生產環境,避免有坑,版本發布速度比較慢
MySQL5.6正式版推出時間:2013年
MySQL5.7正式版推出時間:2015年
MySQL8.0正式版推出時間:2018年
27. returning語法
PGSQL
支持returning語法,returning clause 支持 DML 返回 Resultset,減少一次 Client DB Server 交互
MySQL
不支持returning語法
28. 內部架構
PGSQL
多進程架構,并發連接數不能太多,跟Oracle一樣,既然跟Oracle一樣,那么很多優化方法也是相通的,例如:開啟大頁內存
MySQL
多線程架構,雖然多線程架構,但是官方有限制連接數,原因是系統的并發度是有限的,線程數太多,反而系統的處理能力下降,隨著連接數上升,反而性能下降
一般同時只能處理200 ~300個數據庫連接
29. 聚集索引
PGSQL
不支持聚集索引,PGSQL本身的MVCC的實現機制所導致
MySQL
支持聚集索引
30. 空閑事務終結功能
PGSQL
通過設置 idle_in_transaction_session_timeout參數來終止空閑事務,比如:應用代碼中忘記關閉已開啟的事務,PGSQL會自動查殺這種類型的會話事務
MySQL
不支持終止空閑事務功能
31. 應付超大數據量
PGSQL
不能應付超大數據量,由于PGSQL本身的MVCC設計問題,需要垃圾回收,只能期待后面的大版本做優化
MySQL
不能應付超大數據量,MySQL自身架構的問題
32. 分布式演進
PGSQL
HTAP數據庫:cockroachDB、騰訊Tbase
分片集群:? Postgres-XC、Postgres-XL
MySQL
HTAP數據庫:TiDB
分片集群: 各種各樣的中間件,不一一列舉
小結
上面的對比表還不是很完善,只有一些本人認為比較關鍵的特性拿出來對比
總的來說,MySQL因為需要支持更換存儲引擎,所以某些功能都要受制于存儲引擎層,例如:物理復制
而PGSQL不支持更換存儲引擎(在PGSQL V12開始也支持可插撥的表存取接口),而且一直由官方統一開發和維護,所以相對比較穩定,功能也比較完善,對得上它的稱號:《世界上功能最為強大的開源數據庫》
PGSQL V12 支持可插撥的表存取接口之后,有可能由第三方存儲引擎來改進PGSQL本身的MVCC實現機制,而不需要等待官方去解決,聚集索引、undo表空間這些都不再是問題
如有不對的地方,歡迎大家拍磚o(∩_∩)o
本文版權歸作者所有,未經作者同意不得轉載。
總結
以上是生活随笔為你收集整理的pgsql处理文档类型数据_【干货总结】:可能是史上最全的MySQL和PGSQL对比材料的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言布尔类型赋值给整型,C语言的布尔类
- 下一篇: mysql嵌套选择代码_关于mysql: