在使用資料庫中介軟體之前,我就想到分庫分表的操作對於聯表操作可能會顯得非常複雜。因為如果資料是分片儲存的,如果主表的資料在1分片,從表對應的資料在2分片,那麼這一次聯表查詢就需要跨節點,如果業務再複雜一點,顯然會造成不必要的效能損耗。今天在研究mycat文件的時候看到mycat很巧妙的解決了這個問題:
」mycat借鑑了newsql領域的新秀foundation db的設計思路,foundation db創新性的提出了table group的概念,其將子表的儲存位置依賴於主表,並且物理上緊鄰存放,因此徹底解決了jion的效率和效能問題,根據這一思路,提出了基於e-r關係的資料分片策略,子表的記錄與所關聯的父表記錄存放在同乙個資料分片上。「
目前有兩個表:tab_user(id,name) 和 tab_orders(id,user_id), tab_user中的id作為orders中的外來鍵。
在schema.xml進行配置:
<table
name
="tab_user"
datanode
="dn1,dn2"
rule
="mod-long"
>
<
childtable
name
="tab_orders"
joinkey
="user_id"
parentkey
="id"
/>
table
>
這段配置**,告訴了mycat將tab_orders的user_id和tab_user的id關聯起來,在對orders表進行插入操作時,將會判斷插入資料的user_id處於哪乙個分片,然後將資料插入該分片,這樣便實現了將關聯資料存放在乙個分片的目的。當然,如果關聯了更多的表,就繼續在childtable下面配置childtable.
關於SQL聯表查詢
一 natural join 自然連線 兩張表通過natural join連線的時候,相當於有個隱含的where子句,對兩張表中同名的對應列相比較看是否相等。二 cross join 建立笛卡爾積 對兩張表通過交叉聯合產生第三張返回結果集的表。相當於普通的連線。三 inner join 內連線 內連...
mycat是什麼 MYCAT學習2
1.mycat的使用 rule 1 的作用是什麼?指定使用的分片演算法 2 中name屬性的作用是什麼?name 屬性指定唯一的名字,用於標識不同的分片規則。內嵌的 rule 標籤則指定對物理表中的哪一列進行拆分和使用什麼分演算法 3 中columns屬性的作用是什麼?指定要拆分的列名字 4 中al...
zf聯表查詢
zf支援聯表查詢,並且會經常遇到聯表查詢,具體 寫法如下 select this select select from this name,array id name select distinct select joinleft jobname,jobname.enterprise id this...