讀書筆記-Mycat權威指南-08-Mycat中的Join
Join
Join 絕對是關系型數據庫中最常用一個特性,然而在分布式環境中,跨分片的 join 確是最復雜的,最難解決一 個問題。
Join:inner ,left,right,full,cross
盡量避免使用 Left join 或 Right join,而用 Inner join。
在使用 Left join 或 Right join 時,ON 會優先執行,where 條件在最後執行,所以在使用過程中,條件盡 可能的在 ON 語句中判斷,減少 where 的執行少用子查詢,而用 join。
Mycat 目前版本支持跨分片的 join,主要實現的方式有四種:全局表,ER 分片,catletT(人工智能)和 ShareJoin
全局表
各個分片冗余存儲
ER分片
將子表的存儲位置依賴於主表,並且物理上緊鄰存放,因此徹底解決了 JION 的效率和性能問題。
根據這一思路,提出了基於 E-R 關系的數據分片策略,子表的記錄與所關聯的父表記錄存放在同一個數據分 片上。
Share Join
ShareJoin 是一個簡單的跨分片 Join,基於 HBT 的方式實現。 原理就是解析 SQL 語句,拆分成單表的 SQL 語句執行,然後把各個節點的數據匯 集。
catlet(人工智能)
解決跨分片的 SQL JOIN 的問題,遠比想象的復雜,而且往往無法實現高效的處理。
既然如此,就依靠人工 的智力,去編程解決業務系統中特定幾個必須跨分片的 SQL 的 JOIN 邏輯。
MyCAT 提供特定的 API 供程序員調用,這就是 MyCAT 創新性的思路——人工智能。
以一個跨節點的 SQL 為例。 Select a.id,a.name,b.title from a,b where a.id=b.id 其中 a 在分片 1,2,3 上,b 在 4,5,6 上,需要把數據全部拉到本地(MyCAT 服務器),執行 JOIN 邏輯。
讀書筆記-Mycat權威指南-08-Mycat中的Join