資料庫優化 水平拆分 垂直拆分

2021-07-24 22:58:36 字數 1570 閱讀 4149

通過某種特定的條件,將存放在同乙個資料庫中的資料分散存放到多個資料庫上,實現分布儲存。

通過路由規則路由訪問特定的資料庫,這樣一來每次訪問面對的就不是單台

伺服器了,而是n臺

伺服器,這樣就可以降低單台機器的負載壓力。

垂直(縱向)拆分:是指按功能模組拆分,比如分為訂單庫、商品庫、使用者庫...這種方式多個資料庫之間的表結構不同。

水平(橫向)拆分:將【同乙個表】的資料進行分塊儲存到不同的資料庫中,這些資料庫中的表結構完全相同。

▲(縱向拆分)

▲(橫向拆分)

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

2,實現方法:垂直拆分,拆分方式實現起來比較簡單,根據表名訪問不同的資料庫就可以了。

橫向拆分的規則很多,這裡總結前人的幾點:

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

優點:可部分遷移

缺點:資料分布不均,可能2023年的訂單有100w,2023年的有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資訊,然後才能進行我們需要的查詢操作。

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

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

資料庫優化 水平拆分 垂直拆分

垂直 縱向 拆分 是指按功能模組拆分,比如分為訂單庫 商品庫 使用者庫.這種方式多個資料庫之間的表結構不同。水平 橫向 拆分 將同乙個表的資料進行分塊儲存到不同的資料庫中,這些資料庫中的表結構完全相同。縱向拆分 橫向拆分 1,實現原理 使用垂直拆分,主要要看應用型別是否合適這種拆分方式,如系統可以分...

資料庫優化 水平拆分 垂直拆分

垂直 縱向 拆分 是指按功能模組拆分,比如分為訂單庫 商品庫 使用者庫.這種方式多個資料庫之間的表結構不同。水平 橫向 拆分 將同乙個表的資料進行分塊儲存到不同的資料庫中,這些資料庫中的表結構完全相同。縱向拆分 橫向拆分 1,實現原理 使用垂直拆分,主要要看應用型別是否合適這種拆分方式,如系統可以分...

資料庫優化 水平拆分 垂直拆分

在某種特定的條件,將存放在同乙個資料庫中的資料分散存放到多個資料庫上,實現分布儲存,通過路由規則路由訪問特定的資料庫,這樣一來每次訪問面對的就不是單台伺服器了,而是n臺伺服器,這樣就可以降低單台機器的負載壓力。分割槽型別 垂直 縱向 拆分 是指按功能模組拆分,比如分為訂單庫 商品庫 使用者庫 這種方...