Mycat垂直拆分與水平拆分

垂直拆分:
       垂直拆分是根據數據庫裏面的數據表的業務進行拆分,好比:一個數據庫裏面既存在用戶數據,又存在訂單數據,那麼垂直拆分能夠把用戶數據放入到用戶庫,把訂單數據放到訂單庫。垂直分表是對數據表進行垂直拆分的一種方式,常見是把一個多字段的大表按經常使用字段和很是用字段進行拆分,每一個表裏面的數據記錄數通常狀況下是相同的,只是字段不同,使用主鍵關聯。數據庫

好比原始用戶表是:
服務器

 

垂直拆分後的表是:網絡

 

 

 

垂直拆分的優勢是:併發

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

  2. 能夠達到最大化利用Cache的目的,具體在垂直拆分的時候能夠將不常變的字段放一塊兒,將常常改變的放一塊兒高併發

  3. 數據維護簡單性能

 缺點是:大數據

  1. 主鍵出現冗餘,須要管理冗餘例3d

  2.  會引發錶鏈接JOIN操做(增長CPU開銷)能夠經過在業務服務器上進行join來減小數據庫壓力blog

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

  4. 事務處理複雜

 

水平拆分
概述

水平拆分是經過某種策略將數據分片來存儲,分庫內分表和分庫兩部分,每片數據會分散到不一樣的MySQL表或庫,達到分佈式的效果,可以支持很是大的數據量。前面的表分區本質上也是一種特殊的庫內分表

庫內分表,僅僅是單純的解決了單一表數據過大的問題,因爲沒有把表的數據分佈到不一樣的機器上,所以對於減輕MySQL服務器的壓力來講,並無太大的做用,你們仍是競爭同一個物理機上的IO、CPU、網絡,這個就要經過分庫來解決

水平拆分表以下:

 

 

 

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

水平拆分的優勢是:

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

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

 

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

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

相關文章
相關標籤/搜索