通常變更不頻繁,數據量整體變化不大,數據規模不大,不多有超過數十萬條記錄的表能夠配置成全局表,全局表具備如下特性:
1.全局表的插入、更新操做會實時在全部節點上執行,保持各個分片的數據一致性
2.全局表的查詢操做,只從一個節點獲取
3.全局表能夠跟任何一個表進行JOIN操做性能
全局表配置比較簡單,不用寫 Rule 規則,以下配置便可:設計
<table name="t_global" primaryKey="ID" type="global" dataNode="sdn$0-2" />
MyCAT 借鑑了 NewSQL 領域的新秀 Foundation DB 的設計思路,Foundation DB 創新性的提出了Table Group 的概念,其將子表的存儲位置依賴於主表,而且物理上緊鄰存放,所以完全解決了 JION 的效率和性能問題,根據這一思路,提出了基於 E-R 關係的數據分片策略,子表的記錄與所關聯的父表記錄存放在同一個數據分片上。code
#全部訂單明細數據會和主表保證在同一個分片上 <table name="tb_order" primaryKey="id" dataNode="sdn0,sdn1,sdn2" rule="mod-long"> <childTable name="tb_order_detail" joinKey="order_id" parentKey="id"/> </table>
ShareJoin 是一個簡單的跨分片 Join,基於 HBT 的方式實現。目前支持 2 個表的 join,原理就是解析 SQL 語句,拆分紅單表的 SQL 語句執行,而後把各個節點的數據聚集。io
#支持任意配置的 A,B 表如 #1.A,B 的 dataNode 相同 <table name="A" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" /> <table name="B" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" /> #2.A,B 的 dataNode 不一樣 <table name="A" dataNode="dn1,dn2 " rule="auto-sharding-long" /> <table name="B" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" /> #3.A,B 的 dataNode 不一樣 <table name="A" dataNode="dn1 " rule="auto-sharding-long" /> <table name="B" dataNode=" dn2,dn3" rule="auto-sharding-long" />