分庫分表_Mycat



Mycat官網

1、數據切分

 將放在同一個數據庫中的數據分散存放到多個數據庫主機上,以達到分散單台設備負載的效果。數據切分可分為垂直切分和水平切分:

1.1、垂直切分

 適用范圍:垂直切分規則簡單,適合業務邏輯簡單,清晰,耦合度低,多表之間關聯查詢較少的場景;
 a、根據業務模塊切分,如系統中存在資產、產品、風控、交易四個模塊,都在一個數據庫中,現在為了提升單庫的性能瓶頸,根據業務模塊拆分為4個數據庫;
 b、單張表字段數據過多切分,將一張表的幾十上百個字段根據關聯型 提取為幾塊,分割為幾張數據庫表;

  優點:拆分后業務清晰、拆分規則明確;
       系統之間整合或擴展容易;
       數據維護簡單; 
  缺點:部分業務表無法join、只能通過接口方式解決、提高了系統的復雜性;
       受每種業務不同的限制存在單庫性能瓶頸、不易數據擴展和性能提高;
       業務處理復雜;
       垂直切分是按照業務模塊來划分的,仍會存在單庫的讀寫與存儲瓶頸,此時需要水平切分;

 阿里開發規范:500w數據量,分表;3年內達不到這個量,系統初建時不要考慮分庫分表;

1.2、水平切分

 單張表數據量過大,將數據按照某種條件拆分到多台數據庫主機上面;
 如當天表、30天內的數據表、歷史表;或者根據id取模分布到對應數據庫上;

  優點: 不存在單庫的讀寫和性能瓶頸;
	拆分規則合理的話、不影響單庫join查詢;
	提高了系統的穩定性跟負載能力;
  缺點:拆分規則難以抽象;
	分片事務一致性問題;
	數據多次擴展難度和維護量極大;
	跨庫join性能差; 

兩種數據切分方式的共同缺點:

  分布式事務的問題;
  跨節點join難度;
  跨節點數據合並、排序問題;
  多數據源管理問題;

 由於數據切分后關聯查詢的復雜度會大大提升,Mycat中提及一下幾點需要謹記:

  第一原則:能不切分盡量不要切分
  第二原則:如果要切分一定要選擇合適的切分規則,提前規划好
  第三原則:數據切分盡量通過數據冗余或表分組(Table group)來降低跨庫join的可能性
  第四原則:由於數據庫中間件對數據Join實現的優劣難以把握,而且實現高性能難度極大,業務讀取盡量少使用多表Join;

2、Mycat中的一些概念

2.1、Mycat

  數據庫中間件,介於應用和真實數據庫之間,進行數據處理與交互的中間服務。
  以前是應用直接連接數據庫,現在是應用先連接到Mycat,Mycat根據查詢sql條件分配到不同節點數據庫查詢數據,然后組裝返回給應用;

2.2、邏輯庫

  可以看做一個或多個集群構成的數據庫集合

2.3、邏輯表

  真實的表,可以是數據切分后的每個分片表,也可以是單一的一張表;

2.3.1、分片表

  單張表數據量過大,會切分成多張表,每張分片表持有一部分數據,多張分片表合起來是完整的數據;

2.3.2、非分片表

  單張表數據量不大,並不需要分片存儲的表

2.3.3、ER表

  關系型數據庫是基於實體關系模型(Entity-Relationship Model)之上,通過其描述了真實世界中事物與關系,Mycat 中的 ER 表即是來源於此;
  數據量過大時進行分片,子表的數據和父表的數據都需要分片存儲,將子表和父表所關聯的數據分在同一個節點數據庫上,保證數據進行Join操作的業務復雜度最低;

2.3.4、全局表

  類似於字典表的一類表,數據量不大,處理各種業務邏輯也經常會關聯到的,進行數據冗余操作,所有節點都存儲一份這樣的表,降低關聯查詢復雜度;

2.4、分片節點

  dataNode、最小單位

2.5、節點主機

  一台機器可能會放多個分片節點,這台機器就是節點主機

2.6、分片規則

  rule、數據切分時,一張大表中的數據需要切分為多張分片表,一定要提前設計好分片規則;

2.7、全局序列號

  sequence、保證存儲在多個節點的數據ID唯一;


免責聲明!

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



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