全局表python
若是你的業務中有些數據相似於數據字典,好比配置文件的配置,經常使用業務的配置或者數據量不大不多變更的表,這些表每每不是特別大,並且大部分的業務場景都會用到,那麼這種表適合於 Mycat 全局表,無須對數據進行切分,只要在全部的分片上保存一份數據便可,Mycat 在 Join操做中,業務表與全局表進行 Join 聚合會優先選擇相同分片內的全局表 join,避免跨庫 Join,在進行數據插入操做時,mycat 將把數據分發到全局表對應的全部分片執行,在進行數據讀取時候將會隨機獲取一個節點讀取數據。
目前 Mycat 沒有作全局表的數據一致性檢查,後續版本 1.4 以後可能會提供全局表一致性檢查,檢查每一個分片的數據一致性。spa<table name="t_area" primaryKey="id" type="global" dataNode="dn1,dn2" />
ER 分片表code
有一類業務,例如訂單(order)跟訂單明細(order_detail),明細表會依賴於訂單,也就是說會存在表的主從關係,這相似業務的切分能夠抽象出合適的切分規則,好比根據用戶 ID 切分,其餘相關的表都依賴於用戶 ID,再或者根據訂單 ID 切分,總之部分業務總會能夠抽象出父子關係的表。這類表適用於 ER 分片表,子表的記錄與所關聯的父表記錄存放在同一個數據分片上,避免數據 Join 跨庫操做。
以 order 與 order_detail 例子爲例,schema.xml 中定義以下的分片配置,order,order_detail 根據 order_id進行數據切分,保證相同 order_id 的數據分到同一個分片上,在進行數據插入操做時,Mycat 會獲取 order 所在的分片,而後將 order_detail 也插入到 order 所在的分片。xml<table name="order" dataNode="dn$1-32" rule="mod-long"> <childTable name="order_detail" primaryKey="id" joinKey="order_id" parentKey="order_id" /> </table>