SQL Server數據庫分佈式解決方案

數據庫/數據表 拆分(分佈式)

  通過某種特定的條件,將存放在同一個數據庫中的數據分散存放到多個數據庫上,實現分佈存儲,通過路由規則路由訪問特定的數據庫,這樣一來每次訪問面對的就不是單臺服務器了,而是N臺服務器,這樣就可以降低單臺機器的負載壓力。提示:sqlserver 2005版本之後,可以友好的支持“表分區”。

  垂直(縱向)拆分:是指按功能模塊拆分,比如分爲訂單庫、商品庫、用戶庫...這種方式多個數據庫之間的表結構不同。

  水平(橫向)拆分:將同一個表的數據進行分塊保存到不同的數據庫中,這些數據庫中的表結構完全相同。

SQL Server:數據庫/數據表 拆分
▲(縱向拆分)

SQL Server:數據庫/數據表 拆分
▲(橫向拆分)

  1,實現原理:使用垂直拆分,主要要看應用類型是否合適這種拆分方式,如系統可以分爲,訂單系統,商品管理系統,用戶管理系統業務系統比較明的,垂直拆分能很好的起到分散數據庫壓力的作用。業務模塊不明晰,耦合(表關聯)度比較高的系統不適合使用這種拆分方式。但是垂直拆分方式並不能徹底解決所有壓力問題,例如 有一個5000w的訂單表,操作起來訂單庫的壓力仍然很大,如我們需要在這個表中增加(insert)一條新的數據,insert完畢後,數據庫會針對這張表重新建立索引,5000w行數據建立索引的系統開銷還是不容忽視的,反過來,假如我們將這個表分成100個table呢,從table_001一直到table_100,5000w行數據平均下來,每個子表裏邊就只有50萬行數據,這時候我們向一張只有50w行數據的table中insert數據後建立索引的時間就會呈數量級的下降,極大了提高了DB的運行時效率,提高了DB的併發量,這種拆分就是橫向拆分

  2,實現方法:垂直拆分,拆分方式實現起來比較簡單,根據表名訪問不同的數據庫就可以了。橫向拆分的規則很多,這裏總結前人的幾點,

  (1)順序拆分:如可以按訂單的日前按年份才分,2003年的放在db1中,2004年的db2,以此類推。當然也可以按主鍵標準拆分。

  優點:可部分遷移

  缺點:數據分佈不均,可能2003年的訂單有100W,2008年的有500W。

  (2)hash取模分: 對user_id進行hash(或者如果user_id是數值型的話直接使用user_id的值也可),然後用一個特定的數字,比如應用中需要將一個數據庫切分成4個數據庫的話,我們就用4這個數字對user_id的hash值進行取模運算,也就是user_id%4,這樣的話每次運算就有四種可能:結果爲1的時候對應DB1;結果爲2的時候對應DB2;結果爲3的時候對應DB3;結果爲0的時候對應DB4,這樣一來就非常均勻的將數據分配到4個DB中。

  優點:數據分佈均勻

  缺點:數據遷移的時候麻煩;不能按照機器性能分攤數據 。

  (3)在認證庫中保存數據庫配置

  就是建立一個DB,這個DB單獨保存user_id到DB的映射關係,每次訪問數據庫的時候都要先查詢一次這個數據庫,以得到具體的DB信息,然後才能進行我們需要的查詢操作。

  優點:靈活性強,一對一關係

  缺點:每次查詢之前都要多一次查詢,會造成一定的性能損失。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章