:-: pgsql調研報告
--: 時間:2018.09.12
作者:Darren.liu
* * * * *
### 業務場景需求:
能不能找一款數據庫,同時具有MySQL結構化數據存儲,及MongoDB非結構化數據存儲的結合體?!
### pgsql一句概括:
pgsql是最強大的開源數據庫,且號稱最先進的數據庫。它有強大的擴展功能;本身的多線程架構,支持必行處理;它的流式同步復制,可以保證數據的零丟失。
### 自身特性:
1.MySQL不支持MPP(大規模并行處理),但支持支持SMP(對稱多處理器),但是如果每個處理器超過4或8個核(core)時,Mysql的擴展性表現較差。而PostgreSQL是類似Oracle數據庫的架構,是多進程的架構,而不像MySQL是多線程的架構,所以能支持MPP(大規模并行處理)。
2.擴張性能好,Postgres天生就是為擴展而生的,除了支持sql語句編寫函數,你可以在PG中用Python、C、Perl、TCL、PLSQL等語言來擴展功能函數。
### 數據類型:
1.pgsql支持的數據類型遠優于MySQL,除了共有的數據類型,它還包括位串、幾何、數組、json、range、復合、還包括自定義及引用,它每一種數據類型都對應著自己的運算符和函數操作,所以支持的業務場景多,運算能力強大。
2.Mysql查詢優化器對于子查詢、復制查詢如多表關聯、外關聯的支持等較弱,特別是在關聯時對于三大join技術:hash join、merge join、nestloop join的支持方面,Mysql只支持最后一種nestloop join(據說未來會支持hash join),而多個大表關聯分析時hash join是必備的利器,缺少這些關鍵功能非常致命。pgsql在這方面的能力就非常突出。
### 優化性能:
1.pgsql支持對同一字段建立不同的索引類型,規劃器會自己選擇最合適的索引類型應用。
2.pgsql靈活易用的專有sql,使語句更加簡潔且功能強大,如ditinct on,ilike等。
3.Pgsql在常用的參數優化數量上,并沒有MySQL那么多且復雜。(個人認為主要是存儲引擎單一)
### 維護管理:
1.pgsql在用戶管理和權限上他支持繼承的特性,MySQL是沒有的。
2.Pgsql在庫創建的時候,是復制模板template1,所以完全可以根據業務場景不同封裝特有的庫。
3.Pgsql管理工具pgadmin,它是由官方開發維護的,他的強大之處是你所有的管理操作都可以通過界面化實現,而且支持內存,io的監控等(強大吧)
### 主從應用:
最后他的復制,由最初的預寫日志復制到后來的流式復制,大大提高了復制的性能和響應速度,同樣支持同步復制,異步復制。自身就支持重新選主特性,不需要手動切換,這是MySQL做不到的。
### pgsql缺點:
暫不支持json數據類型的批量更新,與我們場景使用不符合。
### 壓力測試結果:
環境配置
CentOS 7-CPU 1core-RAM 1G-SATA 20G
PG 10.5
Vmware 10
1)//1個session 5個事物 1個線程
./pgbench -c 1 -t 5 -j 1 -r postgre
latency average = 2.607 ms
tps = 383.564565 (including connections establishing)
tps = 494.973495 (excluding connections establishing)
2)//150個session 5個事物 1個線程
./pgbench -c 150 -t 5 -j 1 -r postgre
latency average = 697.466 ms
tps = 215.064125 (including connections establishing)
tps = 215.523529 (excluding connections establishing)
3)150個session 5個事物,調整線程數量8 、16線程測試信息如下
8線程
latency average = 340.330 ms
tps = 440.748272 (including connections establishing)
tps = 446.363146 (excluding connections establishing)
16線程
latency average = 325.124 ms
tps = 461.362132 (including connections establishing)
tps = 475.233399 (excluding connections establishing)
***綜上所述,在我們用戶連接數不斷增加情況下,數據庫tps性能是有所下降的,但是增加線程并發,數據庫的新能得到很大提升。
由于環境設備有限,只采取了基礎測試,僅供參考。***