Mycat垂直拆分與水平拆分


垂直拆分:
       垂直拆分是根據數據庫里面的數據表的業務進行拆分,比如:一個數據庫里面既存在用戶數據,又存在訂單數據,那么垂直拆分可以把用戶數據放入到用戶庫,把訂單數據放到訂單庫。垂直分表是對數據表進行垂直拆分的一種方式,常見是把一個多字段的大表按常用字段和非常用字段進行拆分,每個表里面的數據記錄數一般情況下是相同的,只是字段不一樣,使用主鍵關聯。

比如原始用戶表是:

 

垂直拆分后的表是:

 

 

 

垂直拆分的優點是:

  1. 可以使得數據變小,一個數據塊(block)就能存放更多的數據,在查詢時就會減少I/O次數(每次查詢時讀取的Block就少)

  2. 可以達到最大化利用Cache的目的,具體在垂直拆分的時候可以將不常變的字段放一起,將經常改變的放一起

  3. 數據維護簡單

 缺點是:

  1. 主鍵出現冗余,需要管理冗余例

  2.  會引起表連接JOIN操作(增加CPU開銷)可以通過在業務服務器上進行join來減少數據庫壓力

  3.  依然存在單表數據量過大的問題(需要水平拆分)

  4. 事務處理復雜

 

水平拆分
概述

水平拆分是通過某種策略將數據分片來存儲,分庫內分表和分庫兩部分,每片數據會分散到不同的MySQL表或庫,達到分布式的效果,能夠支持非常大的數據量。前面的表分區本質上也是一種特殊的庫內分表

庫內分表,僅僅是單純的解決了單一表數據過大的問題,由於沒有把表的數據分布到不同的機器上,因此對於減輕MySQL服務器的壓力來說,並沒有太大的作用,大家還是競爭同一個物理機上的IO、CPU、網絡,這個就要通過分庫來解決

水平拆分表如下:

 

 

 

實際情況中往往會是垂直拆分和水平拆分的結合,即將Users_A_M和Users_N_Z再拆成Users和UserExtras,這樣一共四張表

水平拆分的優點是:

不存在單庫大數據和高並發的性能瓶頸
應用端改造較少
提高了系統的穩定性和負載能力
缺點是:

分片事務一致性難以解決
跨節點Join性能差,邏輯復雜
數據多次擴展難度跟維護量極大

 

Mycat垂直切分與水平切分詳細配置請參考博文:

https://www.jianshu.com/p/e97cee4611f4


免責聲明!

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



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