資料庫優化-水平拆分 垂直拆分
資料庫優化-水平拆分 垂直拆分
在某種特定的條件,將存放在同一個資料庫中的資料分散存放到多個資料庫上,實現分佈儲存,通過路由規則路由訪問特定的資料庫,這樣一來每次訪問面對的就不是單臺伺服器了,而是N臺伺服器,這樣就可以降低單臺機器的負載壓力。
- 分割槽型別 :
- 垂直(縱向)拆分:是指按功能模組拆分,比如分為訂單庫、商品庫、使用者庫…這種方式多個資料庫之間的表結構不同。
▲(縱向拆分) - 水平(橫向)拆分:將同一個表的資料進行分塊儲存到不同的資料庫中,這些資料庫中的表結構完全相同
▲(橫向拆分)
- 實現原理:使用垂直拆分,主要要看應用型別是否合適這種拆分方式,如系統可以分為,訂單系統,商品管理系統,使用者管理系統業務系統比較明的,垂直拆分能很好的起到分散資料庫壓力的作用。業務模組不明晰,耦合(表關聯)度比較高的系統不適合使用這種拆分方式。但是垂直拆分方式並不能徹底解決所有壓力問題,例如 有一個5000w的訂單表,操作起來訂單庫的壓力仍然很大,如我們需要在這個表中增加(insert)一條新的資料,insert完畢後,資料庫會針對這張表重新建立索引,5000w行資料建立索引的系統開銷還是不容忽視的,反過來,假如我們將這個表分成100個table呢,從table_001一直到table_100,5000w行資料平均下來,每個子表裡邊就只有50萬行資料,這時候我們向一張只有50w行資料的table中insert資料後建立索引的時間就會呈數量級的下降,極大了提高了DB的執行時效率,提高了DB的併發量,這種拆分就是橫向拆分
實現方法: 垂直拆分,拆分實現起來比較簡單,根據表名訪問不同的資料庫就可以了。
橫向拆分的規則很多,這裡總結前人的幾點,
(1)順序拆分:如可以按訂單的日前按年份才分,2003年的放在db1中,2004年的db2,
以此類推。當然也可以按主鍵標準拆分。
優點:可部分遷移
缺點:資料分佈不均,可能2003年的訂單有100W,2008年的有500W。(2)hash取模分:對user_id進行hash(或者如果user_id是數值型的話直接使用user_id的值
也可),然後用一個特定的數字,比如應用中需要將一個資料庫切
分成4個資料庫的話,我們就用4這個數字對user_id的hash值進行
結果為1的時候對應DB1;結果為2的時候對應DB2;
結果為3的時候對應DB3;結果為0的時候對應DB4,這樣一來就非常
均勻的將資料分配到4個DB中。
優點:資料分佈均勻
缺點:資料遷移的時候麻煩;不能按照機器效能分攤資料 。
(3)在認證庫中儲存資料庫配置
就是建立一個DB,這個DB單獨儲存user_id到DB的對映關係,每次訪問資料
庫的時候都要先查詢一次這個資料庫,以得到具體的DB資訊,然後才能進行
我們需要的查詢操作。
優點:靈活性強,一對一關係
缺點:每次查詢之前都要多一次查詢,會造成一定的效能損失。
相關文章
- MySQL專題:資料庫垂直、水平拆分MySql資料庫
- MySQL垂直拆分和水平拆分的優缺點和共同點總結MySql
- mysql表水平拆分和分割槽分表MySql
- 單一資料庫拆分成幾十個資料庫的意義資料庫
- MySQL 常見資料拆分辦法MySql
- 資料檔案合併與拆分
- sqlserver 拆分SQLServer
- SAP系統如何進行資料拆分?
- 漫談“資料拆分層次對比”
- 庫存拆分計劃-備份
- MyCat分片:水平拆分例項解析和程式碼實現!
- pandas資料處理清洗案例:中文地址拆分
- 拆分密碼密碼
- IP塊拆分
- 單詞拆分
- python拆分中英文混合字串 - 按中文拆分Python字串
- 【前端優化之拆分CSS】前端三劍客的分分合合前端優化CSS
- 徹底搞清分庫分表(垂直分庫,垂直分表,水平分庫,水平分表)
- 【Mongodb】 對 shard 進行大量資料拆分測試MongoDB
- 徹底搞清MySQL分庫分表(垂直分庫,垂直分表,水平分庫,水平分表)MySql
- 前端程式碼拆分前端
- OGG拆分程式
- Vuex下Store的模組化拆分實踐Vue
- 35面試常問:談談為什麼要拆分資料庫?有哪些方法?面試資料庫
- Oracle以逗號分隔的字串拆分為多行資料Oracle字串
- Redis叢集資料沒法拆分時的搭建策略Redis
- 4.Flink實時專案之資料拆分
- 海量資料拆分到nosql系統的一種方案SQL
- 資料庫優化 - SQL優化資料庫優化SQL
- 【DevCloud · 敏捷智庫】如何拆分使用者故事devCloud敏捷
- 分庫分表系列: 到底該怎麼拆分?
- 資料庫表分割技術淺析(水平分割/垂直分割/庫表雜湊)資料庫
- 資料庫優化資料庫優化
- webpack之程式碼拆分Web
- python如何拆分listPython
- Git拆分commit提交GitMIT
- Python技法-序列拆分Python
- Redux 入門 -- 拆分 reducerRedux