mysql水平拆分和垂直拆分


https://baijiahao.baidu.com/s?id=1607944199335196177&wfr=spider&for=pc
https://www.cnblogs.com/firstdream/p/6728106.html
數據拆分前其實是要首先做准備工作的,然后才是開始數據拆分,我先講拆分前需要做的事情:

  1. 采用分布式緩存redis、memcached等降低對數據庫的讀操作。
  2. 如果緩存使用過后,數據庫訪問量還是非常大,可以考慮數據庫讀、寫分離原則。
  3. 當我們使用讀寫分離、緩存后,數據庫的壓力還是很大的時候,這就需要使用到數據庫拆分了。
    數據庫拆分原則:就是指通過某種特定的條件,按照某個維度,將我們存放在同一個數據庫中的數據分散存放到多個數據庫(主機)上面以達到分散單庫(主機)負載的效果。
  • 第一步,首選垂直拆分
    一個數據庫由很多表的構成,每個表對應着不同的業務,垂直切分是指按照業務將表進行分類,分布到不同的數據庫上面,這樣也就將數據或者說壓力分擔到不同的庫上面 。
    比如淘寶中期開始的數據庫端按照業務垂直拆分:按照業務交易數據庫、用戶數據庫、商品數據庫、店鋪數據庫等進行拆分。

    • 采用垂直拆分優點:1. 拆分后業務清晰,拆分規則明確。2. 系統之間整合或擴展容易。3. 數據維護簡單。
    • 缺點:1. 部分業務表無法join,只能通過接口方式解決,提高了系統復雜度。2. 受每種業務不同的限制存在單庫性能瓶頸,不易數據擴展跟性能提高。3. 事務處理復雜。
  • 第二步:其次才是水平拆分
    水平拆分的典型場景就是大家熟知的分庫分表。

垂直拆分后遇到單機瓶頸,可以使用水平拆分。相對於垂直拆分的區別是:垂直拆分是把不同的表拆到不同的數據庫中,而水平拆分是把同一個表拆到不同的數據庫中。

相對於垂直拆分,水平拆分不是將表的數據做分類,而是按照某個字段的某種規則來分散到多個庫之中,每個表中包含一部分數據。簡單來說,我們可以將數據的水平切分理解為是按照數據行的切分,就是將表中 的某些行切分到一個數據庫,而另外的某些行又切分到其他的數據庫中

分庫分表需要涉及到對應的SQL路由規則主庫備庫等,例如:淘寶設計了一套TDDL來解決這些問題,應用端只需配置對應的規則即可,對應用端的沒有任何侵入的設計。

水平拆分,總之,一般先分庫,如果分庫后查詢仍然慢,於是按照分庫的思想開始做分表的工作數據庫采用分布式數據庫(所有節點的數據加起來才算是整體數據),文件系統采用分布式文件系統任何強大的單一服務器都滿足不了大型系統持續增長的業務需求,數據庫讀寫分離隨着業務的發展最終也將無法滿足需求,需要使用分布式數據庫及分布式文件系統來支撐。

總結,數據庫拆分原則:

1.優先考慮緩存降低對數據庫的讀操作。

2.再考慮讀寫分離,降低數據庫寫操作。

3.最后開始數據拆分,切分模式: 首先垂直(縱向)拆分、再次水平拆分。

4.首先考慮按照業務垂直拆分。

5.再考慮水平拆分:先分庫(設置數據路由規則,把數據分配到不同的庫中)

6.最后再考慮分表,單表拆分到數據1000萬以內


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM