中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

教你用一條SQL搞定跨數據庫查詢難題

發布時間:2020-08-08 02:31:05 來源:ITPUB博客 閱讀:388 作者:許此一生 欄目:云計算

摘要:            數據庫拆分后,數據分布到不同的數據庫實例,可達到降低數據量,增加實例數的擴容目的。然而前途是美好的,道路是曲折的。一旦涉及拆分,就逃不開“原本在同一數據庫里的查詢,要變成跨兩個數據庫實例”的查詢問題。

導讀

日前,某電商用戶由于業務發展迅猛,訪問量極速增長,導致數據庫容量及性能遭遇瓶頸。為降低數據庫大小,提升性能,用戶決定對架構進行垂直拆分。根據不同的表來進行拆分,對應用程序的影響也更小,拆分規則也會比較簡單清晰。

該用戶按照會員、商品、訂單,將數據垂直拆分至三個數據庫,分庫后數據分布到不同的數據庫實例,以達到降低數據量,增加實例數的擴容目的。然而前途是美好的,道路是曲折的。 一旦涉及拆分,就逃不開“原本在同一數據庫里的查詢,要變成跨兩個數據庫實例”的查詢問題

單庫時,系統中很多列表和詳情頁所需數據可以簡單通過SQL join關聯表查詢;而拆庫后,拆分后的數據可能分布在不同的節點/實例上,不能跨庫使用join,此時join帶來的問題就很棘手了。

教你用一條SQL搞定跨數據庫查詢難題cdn.com/02505f6906e90ab445ad612b17858d24a9ccd226.png"> 教你用一條SQL搞定跨數據庫查詢難題
例如:業務中需要展示某個品類商品的售賣訂單量,現在訂單數據和商品數據分布在兩個獨立的數據庫實例中,業務上要怎么進行關聯查詢?

用戶首先想到的方法是,對現有業務代碼進行重構,分別從兩個數據庫查詢數據,然后在業務代碼中進行join關聯。那么問題來了,如果采用這個解決方案,業務上那么多查詢改造起來,拆分難度極大,操作起來過于復雜。跨庫join操作又沒有非常高效的辦法,需要各個分庫迭代查詢,查詢效率也會有一定影響。

是不是光想想就一個頭兩個大?別擔心,關于數據庫拆分后的業務改造難題,其實用一條SQL就可輕松搞定。具體解法如下??

解決思路

經溝通,我們發現用戶遇到的其實就是典型的跨數據庫實例查詢問題。目前,阿里云DMS已經支持跨數據庫實例SQL查詢的能力,用戶可以通過DMS,利用一條SQL即可解決上述難題。不僅能夠滿足“跨庫Join”這一核心訴求,還能極大地簡化用戶的技術方案。
教你用一條SQL搞定跨數據庫查詢難題 教你用一條SQL搞定跨數據庫查詢難題
除了開篇介紹的客戶案例,DMS跨數據庫實例的查詢功能可以解決我們業務中遇到的任意跨數據庫查詢的訴求。例如:跨線上庫及歷史庫的join查詢,快速獲取全量數據;單元化架構下,join各個單元的數據庫查詢全局數據;游戲業務,可以join MySQL中的用戶數據及MongoDB中的游戲裝備數據等。

接下來,我們通過一個快速上手的實例,來看看用戶如何寫這條SQL。

商品庫的信息

實例連接:198.12.13.1:3306 , 數據庫名:seller
商品表名:commodity
包含部分字段的表結構:

create table commondity(id BIGINT(20),  -- 商品IDname varchar(100), -- 商品名稱create_time TIMESTAMP ,  -- 商品入庫時間catogary BIGINT(30), -- 商品類目features text,  -- 商品描述param text); -- 商品屬性

訂單庫的信息

實例連接:198.12.13.2:3306 , 數據庫名:buyer
訂單表表名:order_list
包含部分字段的表結構:

create table order_list(id BIGINT(20),  -- 訂單IDbuyer_id BIGINT(30), -- 買家IDcreate_time TIMESTAMP ,  -- 訂單生成時間seller_id BIGINT(30), -- 賣家IDcommodity_id BIGINT(30), -- 商品IDstatus int(8) – 訂單狀態)

創建DBLink

在編寫查詢SQL之前,需要先在DMS中配置賣家庫和買家庫的DBLink。
教你用一條SQL搞定跨數據庫查詢難題 教你用一條SQL搞定跨數據庫查詢難題

編寫并運行跨庫查詢SQL

當DBLink配置完成后,即可開始在DMS中編寫并運行SQL,實現查詢某個商品的訂單列表的需求。

SELECT comomndity.catogary,       count(1) from buyer_db.buyer.order_list 
order,
      seller_db.seller.commondity commonditywhere order.commodity_id= commondity.idGROUP BY commondity.catogary;

這個SQL的語法完全兼容MySQL,只是在From的表名前面帶上DBLink。
所以,業務方只需要使用DMS跨數據庫查詢SQL便可輕松解決拆庫之后的跨庫查詢難題,業務基本無需改造。

什么是DMS跨數據庫查詢

SELECT * FROM oracle .dsqltest.b oracle inner join

mysql .dsqltest.a mysql on oracle.id = mysql.id
WHERE oracle.id=1

教你用一條SQL搞定跨數據庫查詢難題

DMS提供的跨數據庫實例查詢功能孵化于阿里巴巴集團,目前已服務超過5000名開發者,全面支撐阿里巴巴跨數據庫實例的所有線上查詢需求。DMS支持跨同異構數據庫的在線查詢,支持MySQL、SQLServer、PostgreSQL及Redis等數據源,為應用提供了一種數據全局查詢的能力。用戶無需通過數據匯集,即可通過標準SQL實現跨實例的交叉查詢。

立即體驗

  1. 請先登錄 DMS控制臺 。

  2. 從SQL操作中,進入跨實例SQL窗口。
    教你用一條SQL搞定跨數據庫查詢難題

  3. 參考 使用指南 ,創建DBlink,編寫并運行SQL。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

仙桃市| 买车| 故城县| 珠海市| 麻城市| 烟台市| 康定县| 延津县| 虞城县| 桐梓县| 安吉县| 南宁市| 沾益县| 和龙市| 丘北县| 新平| 崇文区| 怀宁县| 平阴县| 咸阳市| 双江| 伊金霍洛旗| 莱西市| 栖霞市| 黎川县| 临江市| 五寨县| 和政县| 册亨县| 湘潭县| 涞源县| 易门县| 邹城市| 托克托县| 桃园市| 浦北县| 泊头市| 靖西县| 清徐县| 布拖县| 油尖旺区|