實戰課堂|DMS企業版教你用一條SQL搞定跨例項查詢

背景

資料管理DMS企業版提供了安全、高效地管理大規模資料庫的服務。面對多元的資料庫例項,為了更方便地查詢被“散落”在各個地方的業務資料,我們在DMS企業版中提供了跨資料庫例項查詢服務。

什麼是跨例項查詢

跨例項查詢服務支援透過標準SQL進行跨同異構資料庫的實時查詢。

對於您在企業版中的例項,無論它們是關係型資料庫MySQL、PolarDB、DRDS、SQLServer、PostgreSQL,還是非關係型資料庫Redis,您都可以透過一條SQL輕鬆完成跨資料庫例項的查詢。

實戰課堂|DMS企業版教你用一條SQL搞定跨例項查詢

如何進行跨例項查詢

每當您在企業版中註冊一個跨庫查詢支援的例項,系統就將自動為其建立DBLink,您可以為其命名。您可以將DBLink名稱認為是該資料庫例項的別名。

對於您在企業版中已有的例項或者您批次匯入的例項,系統將自動為其命名,您後續可以對該名字進行修改。

有了DBLink名稱,您就可以用DBLink名稱指代您希望進行查詢的例項。透過DBLinkName。DatabaseName。TableName的格式,您就可以進行跨庫查詢操作了。

應用案例

案例1 垂直拆分後的跨資料庫查詢

DMS企業版的使用者某電商公司由於業務發展迅猛,訪問量極速增長,導致資料庫容量及效能遭遇瓶頸,因此使用者決定將會員、商品、訂單資料分別存放在三個資料庫例項中。使用者將訂單庫所在的例項A取名為buyer_db,訂單所在的庫為buyer,訂單表為order_list,將商品庫所在的例項B取名為seller_db,商品所在的庫為commodity,商品表為commodity。此時,公司的資料分析人員想要獲取某個品類商品的實時售賣訂單量,需要變成跨兩個資料庫例項A和B的查詢,怎麼辦?

有了跨庫查詢,無需資料遷移、資料彙集、ETL,即可直接完成多個線上資料庫之間的關聯查詢。

一條SQL,使用者即可解決上述難題:

實戰課堂|DMS企業版教你用一條SQL搞定跨例項查詢

案例2 水平拆分後的跨資料庫查詢

DMS企業版的使用者某酒店在多個城市都有對應的門店,其資料庫在每個城市也會單獨部署一套,業務上有對多個城市全域性資料查詢的訴求。同樣,現在越來越多的網際網路行業開始引入單元化架構,在每個城市會單獨部署機房和資料庫,進行多單元資料彙總查詢的需求也越來越強。為了滿足雲上這些跨單元、跨region的資料庫查詢需求,跨庫查詢服務打通region之間的屏障,使用者透過一條SQL就能實現這些需求。

實戰課堂|DMS企業版教你用一條SQL搞定跨例項查詢

案例3 異構資料庫的關聯查詢

DMS企業版的使用者某公司考慮成本和未來可擴充套件性,正在將業務資料從SQLServer遷移到MySQL上。在這期間,必然存在某些業務子系統仍然在SQLServer上,另外一些業務子系統已經全部遷移到MySQL上,這時兩個子系統之間的聯合查詢,就可以藉助跨庫查詢實現。不僅如此,在遷移過程中,還可以透過DSQL,來校驗SQLServer和MySQL上的資料是否一致。

案例4 混合雲場景的關聯查詢

DMS企業版的使用者某遊戲公司,由於各種原因,在DMS企業版中同時保有阿里雲、騰訊、UCloud、AWS等環境的資料庫例項,同時在自己自建的IDC也部署了部分資料庫。業務的資料如此分散,單是統計一下當前遊戲線上使用者數,都要分別到各個環境去查詢一遍再做彙總。藉助跨庫查詢服務,一條SQL就能實現跨雲廠商和IDC之間的關聯查詢。

實戰課堂|DMS企業版教你用一條SQL搞定跨例項查詢

案例5 關係型與非關係型資料庫的關聯查詢

DMS企業版的使用者某遊戲客戶將使用者積分排行榜儲存在redis zset中,而將使用者元資訊維護在MySQL user表中。使用者希望在遊戲APP中能實時重新整理使用者的積分排行榜,透過跨庫查詢服務,就可以實現跨MySQL及Redis查詢的需求。

使用者在Redis Score Set中儲存使用者積分情況、使用者ID及score。key的名稱為user_score, value為使用者ID, score為使用者積分。

樣例資料如下表:

實戰課堂|DMS企業版教你用一條SQL搞定跨例項查詢

使用者在MySQL User表中儲存使用者的基本資訊,包括user_id, user_name, province, city, gmt_create等。

樣例資料如下表:

實戰課堂|DMS企業版教你用一條SQL搞定跨例項查詢

使用者只需要一條SQL,將redis中的使用者ID跟MySQL中的user_id進行關聯,就可以方便地查詢使用者的積分排行榜。

實戰課堂|DMS企業版教你用一條SQL搞定跨例項查詢

小結

跨庫查詢服務為您提供了您在DMS企業版中的多個例項之間的關聯查詢。