數據的拆分(Sharding)根據其拆分分規則的類型,可以分為兩種拆分模式。一種是按照不同的表(或者Schema)來切分到不同的數據庫(主機)之上,這種切可以稱之為數據的垂直(縱向)拆分;
另外一種則是根據表中的數據的邏輯關系,將同一個表中的數據按照某種條件拆分到多台數據庫(主機)上面,這種切分稱之為數據的水平(橫向)拆分。
垂直拆分的優點:
拆分后業務清晰,拆分規則明確
系統之間進行整合或擴展很容易
按照成本、應用的等級、應用的類型等將表放到不同的機器上便於管理
方便實現動靜分離,冷熱分離的數據庫表的設計模式
數據維護相對簡單
垂直拆分的缺點:
部分業務表無法Join,只能通過接口方式解決,提高了系統的復雜度
受每種業務的不同限制,存在單庫性能瓶頸,不易進行數據擴展和提升性能
事務處理復雜
水平拆分的優點:
單庫單表的數據能保持在一定的量級,有助於性能的提高。
切分的表結構相同,應用層改造較少,只需要增加路由規則即可。
提高了系統的穩定性和負載能力。
水平拆分的缺點:
切分后,數據是分散的,跨庫join操作難和性能差
拆分規則難以抽象
分片事務的一致性難以解決
數據擴容的難度和維護量極大
綜上所述,垂直拆分和水平拆分的共同點為:
存在分布式事務的問題
存在跨節點Join問題
存在跨節點合並排序和分頁問題
存在多數據源管理的問題