天天看點

論雲資料庫程式設計能力的重要性

雲為我們提供了便利,降低了開發和運維的成本。

但是也必須思考一個問題,我們的雲元件之間的的網絡延遲?

(相比較區域網路的伺服器和伺服器之間)

你可以用各種方法測試驗證一下。

以往我們把資料放在資料庫,資料庫隻提供簡單的增删改查,大部分的業務邏輯放在應用伺服器來完成。

但是在雲時代,如果我們還這樣的話,應用伺服器和資料庫間如果多次互動,會浪費大量的時間。

我們應該充分利用資料庫的程式設計能力,例如postgresql,是一個功能非常強大的資料庫,我們完全可以把業務邏輯放在資料庫處理,

例如使用plv8, plpython, plpgsql, plperl, pltcl等函數語言,

資料類型支援也非常的豐富,例如jsonb, gis, text, 異構類型,key-value類型...等,

索引支援btree, hash, gin , gist, spgist, brin等索引類型,

sql文法層面支援 視窗查詢,遞歸查詢,grouping set, 等進階文法。

join方面,支援hash join , merge join , nestloop join ,

優化器方面,支援自定義成本因子, cbo , 遺傳算法等。

另外postgresql更強大之處,可以利用gpu加速運算,包括隐式加速,也可以顯示加速。

隐式指資料庫自身提供的custom scan provider程式設計接口,已經有實作了的插件。

顯式,指的是過程語言和cuda的結合,例如pycuda。

還可以用julia來友善的實作并行程式設計。

postgresql完全可以滿足大多數業務的需求。

功能如此強大的資料庫,隻用來做增删改查,是不是有點浪費呢,充分利用它的功能,當網絡是瓶頸的時候,讓業務邏輯和資料靠近,可以大大提升效率,降低rt,提升業務系統的使用者體驗。

關于雲端網絡延遲,可以參考我在前幾天寫的幾篇文檔。

postgresql 網絡延遲定量分析

<a href="https://yq.aliyun.com/articles/35176">https://yq.aliyun.com/articles/35176</a>

使用sysbench測試阿裡雲rds postgresql性能

(内容中包含了如何測試雲資料庫的網絡延遲)

<a href="https://yq.aliyun.com/articles/35517">https://yq.aliyun.com/articles/35517</a>

本文還會利用sysbench來佐證一下,使用資料庫服務端程式設計後,帶來的性能提升是多麼明顯。

測試環境依舊是阿裡雲rds postgresql,ecs是32核的機器,與rds pg在同一機房。

步驟

購買rds pg資料庫執行個體

建立資料庫使用者

購買同機房,與rds pg同vpc網絡ecs或者同經典網絡的ecs

在ecs端安裝postgresql用戶端

安裝sysbench(from github)

并行初始化測試資料

初始化256張表,每張表100萬資料。

表結構和資料樣本如下

測試包含sql如下,其中第一條sql執行10次 :

首先 測試不使用服務端程式設計時的性能, 分别測試16并發和256并發

測試結果

16并發

tps 248.27

qps 4717.13

256并發

tps 1243.61

qps 23628.59

然後 測試使用服務端程式設計時的性能, 分别測試16并發和256并發

tps 1533.44

qps 29135.36

tps 1684.45

qps 32004.55

從測試資料可以非常明顯的看到,rt對小事務的影響非常大(單個連接配接tps隻有 15.56,互動次數越多tps越低)。

使用服務端程式設計,可以大大的規避網絡問題,對于互動較多的高并發小事務起到的效果非常棒。

在所有的關系資料庫中,postgresql支援的服務端程式設計語言應該是最豐富的,例如c,python,java,javascript, lua, perl, tcl, perl, ......。

論雲資料庫程式設計能力的重要性