全局表
全局表的作用
在分片的情況下,當業務表因為規模而進行分片以后,業務表與這些附屬的字典表之間的關聯,就成了比較棘手的問題,考慮到字典表具有以下幾個特性:
- 變動不頻繁
- 數據量總體變化不大
- 數據規模不大,很少有超過數十萬條記錄。
鑒於此,MyCAT 定義了一種特殊的表,稱之為“全局表”,全局表具有以下特性:
- 全局表的插入、更新操作會實時在所有節點上執行,保持各個分片的數據一致性
- 全局表的查詢操作,只從一個節點獲取
- 全局表可以跟任何一個表進行 JOIN 操作
全局表配置(配置所有可能用到節點)
<table name="TBL_LOG" primaryKey="ID" type="global" dataNode="dn1,dn2" />
全局表說明
1、准對Select操作,mycat會隨機現在一個節點輸出結果內容;
2、准對Insert-Update-Delete操作,Mycat會操作所有節點
E-R分片表
也稱為父子表,主外鍵關聯表;處理存在2種請求對應關系。
1、父表的分片字段是子表的外鍵字段:
這種情況下,父表通過分片字段查詢能很快定位到數據庫的位置提高查詢性能;子表通過父表ID也能很快定位到分片服務器數據庫地址;
<table name="ORDER1" primaryKey="ID" dataNode="dn1,dn2" rule="mod-long"> <childTable name="ORDER_DETAIL" primaryKey="ID" joinKey="ORDER_ID" parentKey="ID" /> </table>
2、父表的分片字段不是子表的外鍵字段:
這種情況下,父表通過分片字段查詢能很快定位到數據庫的位置提高查詢性能;子表通過父表ID查詢時,Mycat將遍歷所有節點數據,實現數據查詢;
<table name="ORDER2" primaryKey="ID" dataNode="dn1,dn2" rule="province-str"> <childTable name="ORDER_DETAIL2" primaryKey="ID" joinKey="ORDER_ID" parentKey="ID" /> </table>