1. 程式人生 > >讀書筆記-Mycat權威指南-08-Mycat中的Join

讀書筆記-Mycat權威指南-08-Mycat中的Join

存儲位置 優先 讀書筆記 思路 執行 徹底 cat 條件 ash

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

,ShareJoin 在開發版中支持,前面三種方式 1.3.0.1 支 持。

全局表

各個分片冗余存儲

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