mycat學習日記:關於聯表查詢


  在使用數據庫中間件之前,我就想到分庫分表的操作對於聯表操作可能會顯得非常復雜。因為如果數據是分片存儲的,如果主表的數據在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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM