MyCat Join 專題 ER 分片

2021-09-26 04:43:00 字數 3285 閱讀 6103

er join:實體關係(entity relation) join

目錄

ー:mycat 權威指南

二:er 分片實操

mycat借鑑了newsql領域的新秀foundation db的設計思路,foundation db創新性的提出了table group的概念,其將子表的儲存位置依賴於主表,並且物理上緊鄰存放,因此徹底解決了jion的效率和效能問 題,根據這一思路,提出了基於e-r 關係的資料分片策略,子表的記錄與所關聯的父表記錄存放在同乙個資料分片上。 

說白了就是將相關聯的資料,需要級聯查詢的資料放進同乙個分片中。

customer採用sharding-by-intfile這個分片策略,或者其他的分片策略,分片在dn1,dn2上,orders依賴父表進行分片,兩個 表的關聯關係為orders.customer_id = customer.id

既字表是按照父表的分片字段進行分片的,這樣的話,父表資料和字表資料的相關聯的資料都會在同乙個資料分片上。跨庫分片join變得簡單,子表可以配置多個。且可以進行巢狀查詢。

於是資料分片和儲存的示意圖如下:

這樣一來,分片dn1上的的customerdn1上的orders就可以進行區域性的join聯合,dn2上也如此,再合 並兩個節點的資料即可完成整體的join,試想一下,每個分片上orders表有100萬條,則10個分片就有1個億,基 於e-r對映的資料分片模式,基本上解決了80%以上的企業應用所面臨的問題。 配置 以上述例子為例,schema.xml中定義如下的分片配置

查詢:按邏輯來說,子表不需要單獨查詢。或者只是主表的乙個資料拓展。

子表單錶查詢:因為是按照主表的分片鍵路由的。所以只有主表的分片鍵查詢條件才會路由到正確的位置。沒有的話就全庫查詢資料集,之後合併多個資料集。

主表 + 子表 join 查詢:有分片鍵的查詢就路由到對應庫。查詢對應的join資訊,沒有的話就所有的庫進行資料的join,之後合併。

限制:經過測試,沒有表數的限制。既乙個table標籤中的所有表都可以進行join操作。此外還可以再與多個global全域性表進行join

本地測試:

邏輯庫:mydb邏輯表:

主表lsqtest子表補充表 

lsqtable_supplement

子表補充表明細 

lsqtable_supplement_items

主表動靜分離子表 

lsqtable_supplement_other

所在資料節點:

dn$1-2dn$1-2dn$1-2dn$1-2

分片鍵:

ididparent_idid

全域性表:

jointableotherjointable

所在資料節點:

dn$1-2dn$1-2

所有子表會預設繼承所屬主表的分片規則來保證相關資料都在乙個分片區之內。

查詢語句:

explain select *

from lsqtable_supplement s

left join lsqtable l on l.id = s.id

left join lsqtable_supplement_other o on l.id = o.id

left join lsqtable_supplement_items i on l.id = i.parent_id

inner join jointable j on l.id = j.id

inner join otherjointable oj on l.id = oj.id

會將查詢語句路由到其他幾個節點,每個節點執行相同語句獲取結果集。之後mycat會合併這些結果集。

該方案只適用於主表a ---> 子表b ---> 字典表這種情況

而這種主表a ---> 關係表ab ---> 主表b這種情況,兩種主表屬於不同的範疇,所以兩主表插入關係表ab的值不保證儲存在同一分片上。可以考慮冗餘關係表的方法來保證所有節點相同。但是又不符合全域性表的定義。因為是一種常變的資料。

一般情況下,er分割槽+全域性表可以滿足大部分的需求。

專題總結 二分搜尋專題

1.1從有序陣列中查詢某值 陣列長 目標值 int n,k int arr n void solve return lst 此時 fst 1 lst stl關於二分的應用 stl lower bound begin,end,key 從陣列的begin位置到end 1位置二分查詢第乙個大於或等於num...

mysql分頁er 構建高效的MySQL分頁

mysql分頁的主要目的就是提公升效率,今天我們將簡單介紹如何構建高效mysql分頁。首先看一下分頁的基本原理 limit 10000,20的意思掃瞄滿足條件的10020行,扔掉前面的10000行,返回最後的20行,問題就在這裡,如果是limit 100000,100,需要掃瞄100100行,在乙個...

dp專題 分梨

分梨 題目描述 小明非常喜歡吃梨,有一天他得到了acmclub送給他的一筐梨子。由於他比較仗義,就打算把梨子分給好朋友們吃。現在他要把m個梨子放到n個盤子裡面 我們允許有的盤子為空 你能告訴小明有多少種分法嗎?請注意,例如有三個盤子,我們將5,1,1和1,1,5,視為同一種分法 輸入 輸入包含多組測...