教你用一条SQL搞定跨数据库查询难题
導讀
日前,某電商用戶由于業(yè)務發(fā)展迅猛,訪問量極速增長,導致數據庫容量及性能遭遇瓶頸。為降低數據庫大小,提升性能,用戶決定對架構進行垂直拆分。根據不同的表來進行拆分,對應用程序的影響也更小,拆分規(guī)則也會比較簡單清晰。
該用戶按照會員、商品、訂單,將數據垂直拆分至三個數據庫,分庫后數據分布到不同的數據庫實例,以達到降低數據量,增加實例數的擴容目的。然而前途是美好的,道路是曲折的。一旦涉及拆分,就逃不開“原本在同一數據庫里的查詢,要變成跨兩個數據庫實例”的查詢問題。
單庫時,系統(tǒng)中很多列表和詳情頁所需數據可以簡單通過SQL join關聯表查詢;而拆庫后,拆分后的數據可能分布在不同的節(jié)點/實例上,不能跨庫使用join,此時join帶來的問題就很棘手了。
例如:業(yè)務中需要展示某個品類商品的售賣訂單量,現在訂單數據和商品數據分布在兩個獨立的數據庫實例中,業(yè)務上要怎么進行關聯查詢?
用戶首先想到的方法是,對現有業(yè)務代碼進行重構,分別從兩個數據庫查詢數據,然后在業(yè)務代碼中進行join關聯。那么問題來了,如果采用這個解決方案,業(yè)務上那么多查詢改造起來,拆分難度極大,操作起來過于復雜。跨庫join操作又沒有非常高效的辦法,需要各個分庫迭代查詢,查詢效率也會有一定影響。
是不是光想想就一個頭兩個大?別擔心,關于數據庫拆分后的業(yè)務改造難題,其實用一條SQL就可輕松搞定。具體解法如下??
解決思路
經溝通,我們發(fā)現用戶遇到的其實就是典型的跨數據庫實例查詢問題。目前,阿里云DMS已經支持跨數據庫實例SQL查詢的能力,用戶可以通過DMS,利用一條SQL即可解決上述難題。不僅能夠滿足“跨庫Join”這一核心訴求,還能極大地簡化用戶的技術方案。
除了開篇介紹的客戶案例,DMS跨數據庫實例的查詢功能可以解決我們業(yè)務中遇到的任意跨數據庫查詢的訴求。例如:跨線上庫及歷史庫的join查詢,快速獲取全量數據;單元化架構下,join各個單元的數據庫查詢全局數據;游戲業(yè)務,可以join MySQL中的用戶數據及MongoDB中的游戲裝備數據等。
接下來,我們通過一個快速上手的實例,來看看用戶如何寫這條SQL。
商品庫的信息
實例連接:198.12.13.1:3306 , 數據庫名:seller
商品表名:commodity
包含部分字段的表結構:
訂單庫的信息
實例連接:198.12.13.2:3306 , 數據庫名:buyer
訂單表表名:order_list
包含部分字段的表結構:單態(tài))
創(chuàng)建DBLink
在編寫查詢SQL之前,需要先在DMS中配置賣家?guī)旌唾I家?guī)斓腄BLink。
編寫并運行跨庫查詢SQL
當DBLink配置完成后,即可開始在DMS中編寫并運行SQL,實現查詢某個商品的訂單列表的需求。
SELECT comomndity.catogary,count(1)from buyer_db.buyer.order_list order,seller_db.seller.commondity commondity where order.commodity_id= commondity.id GROUP BY commondity.catogary;這個SQL的語法完全兼容MySQL,只是在From的表名前面帶上DBLink。
所以,業(yè)務方只需要使用DMS跨數據庫查詢SQL便可輕松解決拆庫之后的跨庫查詢難題,業(yè)務基本無需改造。
什么是DMS跨數據庫查詢
?
SELECT * FROM?oracle.dsqltest.b oracle inner join
mysql.dsqltest.a mysql on oracle.id = mysql.id?
WHERE oracle.id=1
DMS提供的跨數據庫實例查詢功能孵化于阿里巴巴集團,目前已服務超過5000名開發(fā)者,全面支撐阿里巴巴跨數據庫實例的所有線上查詢需求。DMS支持跨同異構數據庫的在線查詢,支持MySQL、SQLServer、PostgreSQL及Redis等數據源,為應用提供了一種數據全局查詢的能力。用戶無需通過數據匯集,即可通過標準SQL實現跨實例的交叉查詢。
立即體驗
阿里云雙十一1折拼團活動:滿6人,就是最低折扣了!
【滿6人】1核2G云服務器99.5元一年298.5元三年 2核4G云服務器545元一年 1227元三年
【滿6人】1核1G MySQL數據庫 119.5元一年
【滿6人】3000條國內短信包 60元每6月
參團地址:http://click.aliyun.com/m/1000020293/
原文鏈接
本文為云棲社區(qū)原創(chuàng)內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的教你用一条SQL搞定跨数据库查询难题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【双11】阿里云边缘节点ENS助力淘宝构
- 下一篇: 工程师如何“神还原”用户问题?闲鱼回放技