背景數據庫
咱們知道,當數據庫中的數據量愈來愈大時,不管是讀仍是寫,壓力都會變得愈來愈大。採用MySQL Replication多mater多salve方案,在上層作負載均衡,雖然可以必定程度上緩解壓力。可是當一張表中的數據變得很是龐大時,壓力仍是很是大的。試想,若是一張表中的數據量達到了千萬甚至上億級別的時候,不論是建索引,優化緩存等,都會面臨巨大的性能壓力。緩存
定義負載均衡
數據sharding,也稱做數據切分,或分區。是經過某種條件,把同一個數據庫中的數據分散到多個數據庫或者多臺機器上,以減少單臺機器壓力。性能
分類優化
數據分區根據切分規則,能夠分爲兩類:ui
1.垂直切分.net
數據的垂直切分,也能夠稱之爲 縱向切分。將數據庫想象成爲由不少個一大塊一大塊的「數據塊」(表)組成,咱們垂直的將這些「數據塊」切開,而後將他們分散到多臺數據庫主機上面。這樣的切分方法就是一個垂直(縱向)的數據切分。以表爲單位,把不一樣的表分散到不一樣的數據庫或者主機上。規則簡單,實施方便,適合業務之間耦合度低的系統。blog
垂直切分的優勢:
索引
(1) 數據庫的拆分簡單明瞭,拆分規則明確;
事務
(2)應用程序模塊清晰明確,整合容易;
(3)數據維護方便易行,容易定位;
垂直切分的缺點:
(1)部分表關聯沒法在數據庫級別完成,須要在程序中完成;
(2)對於訪問極其頻繁且數據量大的表仍然存在性能瓶頸,不必定能知足要求;
(3)業務處理相對更爲複雜;
(4)切分達到必定程度以後,擴展性會遇到限制;
(5)過分切分可能會帶來系統過分複雜而難以維護。
2.水平切分
通常來講,簡單的水平切分主要是將某個訪問極其頻繁的表再按照某個字段的某種規則來分散到多個表之中,每一個表中包含一部分數據。以行爲單位,將同一個表中的數據按照某種條件拆分到不一樣的數據庫或者主機上。相對複雜,適合單表巨大的系統。
水平切分的優勢:
(1)表關聯基本可以在數據庫端所有完成;
(2)不會存在某些超大型數據量和高負載的表遇到瓶頸的問題;
(3)應用程度端總體構架改動相對較少;
(4)事務處理相對簡單;
(5)只要切分規則可以定義好,基本上較難遇到擴展性限制;
水平切分的缺點:
(1)切分規則相對更爲複雜,很難抽象出一個可以知足整個數據庫的切分規則;
(2)後期數據的維護難度有所增長,人爲手工定位數據更困難;
(3)應用系統各模塊耦合度較高,可能會對後期數據的遷移拆分形成必定的困難。
3.聯合拆分
實際的應用場景中,除了那些負載並非太大,業務邏輯也相對簡單的系統能夠經過上面兩種切分方法之一來解決擴展性問題以外,恐怕其餘大部分業務邏輯稍微複雜一點,系統負載大一些的系統,都沒法經過上面任何一個數據的切分方法來實現更好的擴展性,而須要將上述兩種切分方法結合使用,不一樣的場景使用不一樣的切分方法。
聯合拆分的優勢:
(1)能夠充分利用垂直拆分和水平切分各自的優點而避免各自的缺陷;
(2)讓系統擴展性獲得最大化提高;
聯合切分的缺點:
(1)數據庫系統構架比較複雜,維護難度更大;
(2)應用程序構架也相對更復雜;
實現方案
http://blog.csdn.net/michael_kong_nju/article/details/47147403
參考文章: