多年開發和維護某些業務系統的經驗,讓人真正理解了什么叫“數據庫設計良好,系統就成功了一半”,尤其是那些面向多商戶或多租戶的基礎服務平台、公共服務平台、開放服務平台、或者由它們組合而成的綜合服務平台。數據庫設計之初,必須對業務系統DB的隔離和共享模式的優缺有充分的調研,平衡好業務系統的邊界,合理設計使用必要的冗余,以適應系統后續的不斷變化,否則后期開發人員將陷入無盡的煩惱和痛苦之中,這絕不是危言聳聽,只有開發和維護過平台類產品的人才能深刻體會。下面就介紹三種業務系統中最常見的數據庫設計的隔離和共享模式:
一、共享Database,共享Schema
很多開發人員最熟悉的一種模式,沒錯,很可能你在大學的時候寫的第一個MIS就是用的這種模式。
某些家伙認為這種模式沒啥技術含量,但是,如果你的業務系統要兼容很多業務端的需求,當你選擇這種模式的時候,用好了並不容易,尤其是當業務數據量非常大而且需求還在不斷變化的時候,會有各種各樣的問題暴露出來。
下面分析這種共享模式的主要優缺點:
1、優點
a.前期開發相對容易,單庫單表的增刪改查,喜聞樂見,注意,我這里說的是前期開發較容易
b.較容易做讀寫分離、備份和還原
c.能最大化利用DB服務器資源
d.DBA監控和運維管理也非常簡單
2、缺點
a.后期開發和維護會非常痛苦,各種復雜業務共享數據庫,不同商戶業務邏輯的差異很容易引發開發上的BUG,尤其是牽一發而動全身的公共服務系統
b.單庫的容量終究有限,不能適應業務數據量的快速增長
c.多商戶業務邏輯不一致,表設計時字段冗余不可避免
d.不利於自定義數據模型,可伸縮性受限制
e.無法對業務層進行橫向擴展,某些場景下想通過一個庫單張表搞定所有業務邏輯,開發人員只能呵呵了
二、獨立Database
這個也很常見,直接理解就是為每個業務端獨立使用各自的數據庫,互不干擾。它的優缺點非常明顯。
下面分析這種獨立模式的主要優缺點:
1、優點
a.和特定商戶業務系統聯系更緊密
b.前后期開發和維護都很容易
c.利於業務系統拆分和整合
d.各商戶業務數據相對獨立,各子系統對其他商戶業務系統無影響
e.分流業務系統數據,間接實現了集中數據的分片和縱向擴展
f.性能可能更好,只是可能
2、缺點
a.軟硬件成本增加
b.不可避免的重復,主要有重復的數據庫設計和業務邏輯,還有獨立的后台業務支持系統,總結起來就是一句話,重復的勞動需要更多的人力資源投入
c.DBA管理壓力增大,更多的庫更多的表需要監控和運維
三、共享Database獨立Schema
這種模式是一種設計上的平衡,兼有共享和獨立模式的各自主要優點。
下面分析這種兼有共享和獨立特性的模式的主要優缺點:
1、優點
a.雖然是單庫,但根據不同商戶進行了特殊業務的拆分,減少了冗余的數據庫和數據表的設計和開發,性價比更高
b.縱向擴展非常容易,業務拆分更簡單,只要將多商戶共享和單個商戶特定使用的表獨立出去就行
2、缺點
a.表設計要求更高,要設計和平衡好有限擴展和無限擴展的可能,否則后續維護會發現還不如完全共享或者完全獨立模式來的容易
b.業務數據集中,但表設計分散,后台系統如配置管理系統、統計分析系統很難做到共享模式的便利
總結:上面是最常見的業務系統數據庫模式,共享和獨立並不矛盾,各有自己特定的優缺點,它們依然屬於集中式數據設計和管理的范疇,要按照業務系統的現狀來選擇模式。當然,后期業務系統的不斷發展,數據量日益龐大,集中式的數據模式就會爆發很多問題(天花板效應),橫向擴展只是一個時間問題,從數據庫設計的角度,將DB由集中式改造為分布式(橫向擴展)才是永恆的難題。