垂直拆分:
垂直拆分是根據數據庫裏面的數據表的業務進行拆分,好比:一個數據庫裏面既存在用戶數據,又存在訂單數據,那麼垂直拆分能夠把用戶數據放入到用戶庫,把訂單數據放到訂單庫。垂直分表是對數據表進行垂直拆分的一種方式,常見是把一個多字段的大表按經常使用字段和很是用字段進行拆分,每一個表裏面的數據記錄數通常狀況下是相同的,只是字段不同,使用主鍵關聯。數據庫
好比原始用戶表是:服務器
垂直拆分後的表是:網絡
垂直拆分的優勢是:併發
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垂直切分與水平切分詳細配置請參考博文: