如何玩轉跨庫Join?跨數據庫實例查詢應用實踐

背景

隨着業務複雜程度的提升、數據規模的增加,愈來愈多的公司選擇對其在線業務數據庫進行垂直或水平拆分,甚至選擇不一樣的數據庫類型以知足其業務需求。本來在同一數據庫實例裏就能實現的SQL查詢,如今須要跨多個數據庫實例才能完成。業務的數據被「散落」在各個地方,如何方便地對這些數據進行彙總關聯查詢,已經成爲困擾用戶的一大難題。算法

針對這類問題,傳統的解決方案須要用戶提早將全部實例的數據提早聚集到同一處,而後再作離線查詢分析。爲此,用戶須要維護數據遷移鏈路,購買機器資源存儲聚集起來的數據,付出大量的資源和運維成本。不只如此,數據遷移也意味着數據延遲,剛剛產生的在線業務數據,須要「等一會」甚至「等一天」才能去作分析,沒法知足實時性需求。sql

爲了解決跨數據庫實例及時查詢的難題,阿里雲DMS(數據管理)推出了跨實例查詢服務。數據庫

什麼是跨實例查詢服務

跨實例查詢服務爲不一樣環境下的在線異構數據源,提供及時的關聯查詢服務。不論數據庫是MySQL、SQLServer、PostgreSQL仍是Redis,不論數據庫實例部署在哪一個阿里雲region,無需數據聚集,僅經過一條SQL就能實現這些數據庫實例之間的關聯查詢。緩存

不只如此,數據庫實例也能夠部署在不一樣的資源環境中,除了RDS以外,咱們也支持ECS上的自建數據庫、具備公網ip的自建數據庫、用戶本地IDC自建數據庫、甚至是部署在其餘雲廠商的數據庫。服務器

功能特性

在線數據及時查詢

目前大多數數據分析的解決方案須要將 OLTP 數據庫的數據導出至離線數據系統再進行分析,但這種方案很難知足實時性的要求,同時在數據導出至離線系統時也存在數據丟失的風險。架構

DMS的跨實例查詢服務,無需用戶遷移任務,直接編寫一條SQL,就能實現多個在線數據庫的直接關聯分析。因爲無需數據同步,下降了業務架構的複雜性,同時也大大節省用戶持有離線計算資源的預算和運維成本。less

DBLink

熟悉Oracle的人應該知道,咱們能夠在當前登陸的Oracle上,創建一個DBLink指向另外一個遠程的Oracle數據庫表。在跨實例查詢服務中,咱們從新定義了DBLink的概念,它是一個指向用戶的任意數據庫實例的虛擬鏈接,是數據庫實例的別名。例如,對於MySQL來講,DBLink和ip/port一一對應。藉助DBLink,便可實現對任意數據源的SQL訪問。
1545011106620_6727cbd6_af4a_4ed0_8add_6fb3f43bf1ab運維

支持多種關係型數據庫

目前已支持MySQL、SQLServer、PostgreSQL等多種關係型數據庫。函數

支持SQL方式訪問NoSQL

除了關係型數據庫以外,跨實例查詢還支持以SQL方式訪問Redis等NoSQL數據庫。因爲支持了SQL語法,也能夠實現RDBMS和NoSQL之間關聯查詢。是的,你沒看錯,一條SQL就能實現MySQL和Redis之間的關聯查詢。工具

支持跨地域以及混合雲查詢

企業發展到必定階段,用戶量、業務量不斷攀升,原來的單機房容量已經不能知足業務發展的需求,再結合容災、高可用等因素,一般會選擇跨region部署,也叫單元化部署。同時,很多企業也須要將業務拓展到海外,經過本地就近部署,爲國外用戶提供更好的體驗。相似這種水平拆分帶來的問題就是,如何對全局的業務數據進行統一的彙總關聯查詢。

藉助DMS跨實例查詢服務,不管您的數據庫實例部署在阿里雲的哪一個region,無需跨region的數據遷移,便可實現全部region數據的統一查詢。

除了阿里雲RDS,咱們也支持用戶部署在阿里雲ECS上的各類數據庫。不只如此,若是您的數據庫部署在本地IDC機房,甚至其餘雲廠商,均可以經過跨實例查詢服務,實現這些混合雲場景的跨實例關聯查詢。
1545013361928_836a9165_58d9_4625_940f_1dfb61869334

跨實例數據導入導出

insert into b select * from a;
衆所周知,這條SQL語句能夠將表a的數據導出到表b中,但若是a表和b表不在同一個數據庫實例上,那這條sql就無能爲力了。

跨實例查詢服務的出現,打破了實例與實例之間數據導入導出的邊界。它能夠將數據從一個MySQL實例的表導出到另一個MySQL實例的表中;也能夠將SQLServer表和PostgreSQL表關聯查詢的結果,導出到MySQL實例的表中,就是這麼靈活。
1545653840346_2beda0a0_7a3d_458e_a4de_7d9a3ea2b901

兼容標準SQL

經過標準的SQL語句,便可實現跨實例查詢。同時跨實例查詢服務高度兼容MySQL,支持MySQL協議,以及各類經常使用函數和語法。您可經過JDBC/ODBC驅動鏈接到跨實例查詢服務;也可使用各類MySQL GUI工具來管理各類數據源;固然,您也能夠在DMS跨實例查詢控制檯上直接使用。

Serverless架構

跨實例查詢是無服務器化的在線數據庫關聯查詢服務。用戶無需預購計算資源、無需維護資源、沒有運維和升級成本,隨時隨地使用。

高性能低延遲

跨實例查詢服務底層基於強大的MPP計算引擎,持續不斷地對SQL查詢進行優化,包括pushdown、join算法、執行計劃緩存、Meta緩存、本地調度、鏈接池等技術。目前單表查詢以及跨實例的多表關聯查詢,都能在毫秒級完成。

技術架構

1545655510892_d3921ee5_bcc7_4003_9ecc_f30c60d28638

用戶能夠在應用程序中,直接使用MySQL JDBC驅動鏈接跨實例查詢服務,進行跨實例查詢。固然,咱們也提供了控制檯頁面,直接輸入SQL便可執行。

應用場景

垂直拆分後的跨數據庫查詢

某電商公司原先將會員、訂單、商品等數據都存放在一個數據庫實例中,但業務發展迅猛,訪問量極速增加,致使數據庫容量及性能遭遇瓶頸,所以用戶決定對架構進行垂直拆分,將會員、商品、訂單數據垂直拆分至三個數據庫實例中。此時業務上須要展現某個品類商品的售賣訂單量,本來在同一數據庫裏的查詢,要變成跨兩個數據庫實例的查詢。業務上要怎麼進行關聯查詢?

用戶首先想到的方法是,對現有業務代碼進行重構,分別從兩個數據庫查詢數據,而後在業務代碼中進行join關聯。那麼問題來了,若是採用這個解決方案,業務上那麼多查詢改造起來,拆分難度極大,操做起來過於複雜。跨庫join操做又沒有很是高效的辦法,須要從各個業務庫迭代查詢,查詢效率也會有必定影響。
_1

咱們發現用戶遇到的其實就是典型的跨實例查詢問題。目前,

阿里雲DMS跨實例查詢服務
已經支持跨多個數據庫實例的SQL查詢的能力,用戶利用一條SQL便可解決上述難題。不只可以知足「跨庫Join」這一核心訴求,還能極大地簡化用戶的技術方案。
_2

水平拆分後的跨數據庫查詢

某酒店在多個城市都有對應的門店,其數據庫在每一個城市也會單獨部署一套,業務上有對多個城市全局數據查詢的訴求。一樣,如今愈來愈多的互聯網行業開始引入單元化架構,在每一個城市會單獨部署機房和數據庫,進行多單元數據彙總查詢的需求也愈來愈強。

爲了知足雲上這些跨單元、跨region的數據庫查詢需求,跨實例查詢服務打通region之間的屏障,用戶經過一條SQL就能實現這些需求。
1545027728543_4aeb15e9_8f4f_4ba5_854d_9b9661b1a3ef

異構數據庫的關聯查詢

某公司考慮成本和將來可擴展性,正在將業務數據從SQLServer遷移到MySQL上。在這期間,必然存在某些業務子系統仍然在SQLServer上,另一些業務子系統已經所有遷移到MySQL上,這時兩個子系統之間的聯合查詢,就能夠藉助阿里雲的跨實例查詢服務實現。不只如此,在遷移過程當中,還能夠經過跨實例查詢服務,來校驗SQLServer和MySQL上的數據是否一致。

混合雲場景的關聯查詢

某遊戲公司,因爲各類緣由,同時保有阿里雲、騰訊、UCloud、AWS等環境的數據庫實例,同時在本身自建的IDC也部署了部分數據庫。業務的數據如此分散,單是統計一下當前遊戲在線用戶數,都要分別到各個環境去查詢一遍再作彙總。

藉助阿里雲跨實例查詢服務,一條SQL就能實現跨雲廠商和IDC之間的關聯查詢

1545030088537_047c07ea_b8c0_4011_a451_1741b1d2b4a1

小結

阿里雲DMS(數據管理)跨實例查詢服務,不只覆蓋了異構數據源關聯查詢的場景,還解決了跨region、跨雲的數據庫關聯查詢的難題。不只如此,咱們對查詢性能進行了大幅優化,使得大部分查詢能在毫秒級完成。

用戶無需經過數據聚集,便可經過標準的SQL實現跨實例的交叉查詢
相關文章
相關標籤/搜索