數據去中心化的場景與流程

規範化數據模型是傳統關係型數據庫設計的核心,它爲如何管理關係型數據提供了最佳設計理念,但同時也限制了數據查詢的靈活性和高效率。

在雲計算、大數據等新技術的帶動下,愈來愈多的企業須要對結構化的數據進行查詢、分析、處理和更新。同時,隨着創新業務的不斷增長,業務的複雜及龐大的體量必然會產生錯綜複雜且規模巨大的結構化數據,這些都必然迫使企業對數據庫的需求指向大規模、高可靠、高擴展及高性能。數據庫

什麼是數據去中心化

數據去中心化過程也就是數據拆分的過程。依據服務劃分數據,將數據從主體數據剝離出來。架構

爲何須要數據去中心化

規範化數據模型是傳統關係型數據庫設計的核心,即經過三大範式實現數據的有效存儲,併爲開發人員提供一整套對數據的操做方式。規範化數據模型有利有弊,它爲如何管理關係型數據提供了最佳的設計理念,但同時也限制了數據查詢的靈活性和高效性,特別是當查詢涉及多關聯場景時,會致使查詢性能嚴重低下。數據庫設計

規範化數據模型的另外一個問題在於中心化思想,即把數據統一存儲在一箇中央數據庫中。當大量數據存在於同一個數據庫時會容易形成數據庫訪問瓶頸,從而影響數據訪問性能,併爲系統可用性埋下隱患。微服務

數據去中心化場景

跨表查詢場景

單庫跨表查詢相對於來講場景比較簡單,不一樣業務共享幾張數據表,經過關聯查詢獲取須要是數據。應對這種查詢是將關聯查詢拆分爲多個單表查詢,而後將結果數據進行動態重組,從而造成業務所須要的數據。工具

跨庫查詢場景

跨庫查詢說明不一樣數據庫之間的表也存在着鏈接查詢操做。針對該場景,基本的解決思路有兩種:性能

靜態數據

針對一些修改頻率不高、相對靜態的數據而言,能夠採起數據複製的方式達到同一份數據在兩個數據庫中同時存在的效果,從而將跨庫查詢轉變爲同一庫中的表查詢。大數據

動態數據

對實時性要求比較高的數據,能夠經過開放接口的方式實現兩個數據庫之間的數據集成效果。雲計算

技術耦合場景

技術耦合場景表如今使用了特定某種數據存儲容器相關的技術體系。對於關係型數據庫而言,存儲過程、觸發器等就是典型的數據庫工具級別的特有技術。因爲每種數據存儲容器對這些具體技術的實現和支持方式都有所不一樣,因此在原則上咱們的業務功能都不該該使用這些技術進行數據處理。若是有,那就堅定去掉。採用的方式也是將這些存儲過程、觸發器中所涉及的業務邏輯所有用代碼從新實現一遍便可。設計

數據去中心化流程

數據去中心化的步驟:3d

代碼分離

想要對數據庫進行拆分,首先要把操做數據庫的代碼拆分出來。即把本來在單塊系統中的代碼拆分紅幾個組成部分。

 

重複數據庫模式

代碼拆分完以後,對數據的訪問會造成兩種模式。一種是數據可以隨着代碼完成拆分,即這些數據不存在多個系統共同訪問的狀況,那簡單把數據遷移出去供單個系統訪問便可。可是不少狀況下,代碼中充斥着跨表查詢,跨庫查詢和技術耦合場景,不能簡單進行數據拆分,因此做爲一個過渡環節,咱們能夠把幾個系統公用的數據進行冗餘處理。

遷移數據讀寫操做

完成數據冗餘以後,將針對數據庫寫入和讀取操做作單獨抽離。通常寫入操做比較好抽離,由於插入只涉及單表。難度最大的爲讀取的抽離,在沒有專門的數據拆分以前,同一份數據可能經過各類方式被不少業務所共享,會出現大量跨表查詢、跨庫查詢和技術耦合場景。

抽取服務化接口

在完成數據讀寫操做的遷移、去除數據定時同步機制以後,咱們就能夠對單塊系統中的代碼進行拆分,從而實現服務化。全部的數據訪問經過服務化的接口進行。

參考資料

微服務設計原理與架構 鄭天民/著(本文部份內容摘錄此書,分享知識,尊重做者)

Scott W Ambler, Pramod J Sadalage. 數據庫重構[M]. 王海鵬等譯 

相關文章
相關標籤/搜索