多案分库分表带来的问题-跨库关联查询
比如查詢在合同信息的時候要關聯客戶數據,由于是合同數據和客戶數據是在不同的數據庫,那么我們肯定不能直接使用join 的這種方式去做關聯查詢。
我們有幾種主要的解決方案:
1、字段冗余
比如我們查詢合同庫的合同表的時候需要關聯客戶庫的客戶表,我們可以直接把一些經常關聯查詢的客戶字段放到合同表,通過這種方式避免跨庫關聯查詢的問題。
2、數據同步:比如商戶系統要查詢產品系統的產品表,我們干脆在商戶系統創建一張產品表,通過ETL 或者其他方式定時同步產品數據。
3、全局表(廣播表) 比如行名行號信息被很多業務系統用到,如果我們放在核心系統,每個系統都要去關聯查詢,這個時候我們可以在所有的數據庫都存儲相同的基礎數據。
4、ER 表(綁定表)
我們有些表的數據是存在邏輯的主外鍵關系的,比如訂單表order_info,存的是匯總的商品數,商品金額;訂單明細表order_detail,是每個商品的價格,個數等等。或者叫做從屬關系,父表和子表的關系。他們之間會經常有關聯查詢的操作,如果父表的數據和子表的數據分別存儲在不同的數據庫,跨庫關聯查詢也比較麻煩。所以我們能不能把父表和數據和從屬于父表的數據落到一個節點上呢?
比如order_id=1001 的數據在node1 , 它所有的明細數據也放到node1 ;order_id=1002 的數據在node2,它所有的明細數據都放到node2,這樣在關聯查詢的時候依然是在一個數據庫。
上面的思路都是通過合理的數據分布避免跨庫關聯查詢,實際上在我們的業務中,也是盡量不要用跨庫關聯查詢,如果出現了這種情況,就要分析一下業務或者數據拆分是不是合理。如果還是出現了需要跨庫關聯的情況,那我們就只能用最后一種辦法。
5、系統層組裝
在不同的數據庫節點把符合條件數據的數據查詢出來,然后重新組裝,返回給客戶端。
?
總結
以上是生活随笔為你收集整理的多案分库分表带来的问题-跨库关联查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 水平切分
- 下一篇: 多案分库分表带来的问题-分布式事务