如何玩转跨库Join?跨数据库实例查询应用实践
背景
隨著業(yè)務(wù)復(fù)雜程度的提高、數(shù)據(jù)規(guī)模的增長(zhǎng),越來(lái)越多的公司選擇對(duì)其在線業(yè)務(wù)數(shù)據(jù)庫(kù)進(jìn)行垂直或水平拆分,甚至選擇不同的數(shù)據(jù)庫(kù)類型以滿足其業(yè)務(wù)需求。原本在同一數(shù)據(jù)庫(kù)實(shí)例里就能實(shí)現(xiàn)的SQL查詢,現(xiàn)在需要跨多個(gè)數(shù)據(jù)庫(kù)實(shí)例才能完成。業(yè)務(wù)的數(shù)據(jù)被“散落”在各個(gè)地方,如何方便地對(duì)這些數(shù)據(jù)進(jìn)行匯總關(guān)聯(lián)查詢,已經(jīng)成為困擾用戶的一大難題。
針對(duì)這類問題,傳統(tǒng)的解決方案需要用戶提前將所有實(shí)例的數(shù)據(jù)提前匯集到同一處,然后再做離線查詢分析。為此,用戶需要維護(hù)數(shù)據(jù)遷移鏈路,購(gòu)買機(jī)器資源存儲(chǔ)匯集起來(lái)的數(shù)據(jù),付出大量的資源和運(yùn)維成本。不僅如此,數(shù)據(jù)遷移也意味著數(shù)據(jù)延遲,剛剛產(chǎn)生的在線業(yè)務(wù)數(shù)據(jù),需要“等一會(huì)”甚至“等一天”才能去做分析,無(wú)法滿足實(shí)時(shí)性需求。
為了解決跨數(shù)據(jù)庫(kù)實(shí)例及時(shí)查詢的難題,阿里云DMS(數(shù)據(jù)管理)推出了跨實(shí)例查詢服務(wù)。
什么是跨實(shí)例查詢服務(wù)
跨實(shí)例查詢服務(wù)為不同環(huán)境下的在線異構(gòu)數(shù)據(jù)源,提供及時(shí)的關(guān)聯(lián)查詢服務(wù)。不論數(shù)據(jù)庫(kù)是MySQL、SQLServer、PostgreSQL還是Redis,不論數(shù)據(jù)庫(kù)實(shí)例部署在哪個(gè)阿里云region,無(wú)需數(shù)據(jù)匯集,僅通過一條SQL就能實(shí)現(xiàn)這些數(shù)據(jù)庫(kù)實(shí)例之間的關(guān)聯(lián)查詢。
不僅如此,數(shù)據(jù)庫(kù)實(shí)例也可以部署在不同的資源環(huán)境中,除了RDS之外,我們也支持ECS上的自建數(shù)據(jù)庫(kù)、具有公網(wǎng)ip的自建數(shù)據(jù)庫(kù)、用戶本地IDC自建數(shù)據(jù)庫(kù)、甚至是部署在其他云廠商的數(shù)據(jù)庫(kù)。
功能特性
在線數(shù)據(jù)及時(shí)查詢
目前大多數(shù)數(shù)據(jù)分析的解決方案需要將 OLTP 數(shù)據(jù)庫(kù)的數(shù)據(jù)導(dǎo)出至離線數(shù)據(jù)系統(tǒng)再進(jìn)行分析,但這種方案很難滿足實(shí)時(shí)性的要求,同時(shí)在數(shù)據(jù)導(dǎo)出至離線系統(tǒng)時(shí)也存在數(shù)據(jù)丟失的風(fēng)險(xiǎn)。
DMS的跨實(shí)例查詢服務(wù),無(wú)需用戶遷移任務(wù),直接編寫一條SQL,就能實(shí)現(xiàn)多個(gè)在線數(shù)據(jù)庫(kù)的直接關(guān)聯(lián)分析。由于無(wú)需數(shù)據(jù)同步,降低了業(yè)務(wù)架構(gòu)的復(fù)雜性,同時(shí)也大大節(jié)省用戶持有離線計(jì)算資源的預(yù)算和運(yùn)維成本。
DBLink
熟悉Oracle的人應(yīng)該知道,我們可以在當(dāng)前登錄的Oracle上,建立一個(gè)DBLink指向另一個(gè)遠(yuǎn)程的Oracle數(shù)據(jù)庫(kù)表。在跨實(shí)例查詢服務(wù)中,我們重新定義了DBLink的概念,它是一個(gè)指向用戶的任意數(shù)據(jù)庫(kù)實(shí)例的虛擬連接,是數(shù)據(jù)庫(kù)實(shí)例的別名。例如,對(duì)于MySQL來(lái)說,DBLink和ip/port一一對(duì)應(yīng)。借助DBLink,即可實(shí)現(xiàn)對(duì)任意數(shù)據(jù)源的SQL訪問。
支持多種關(guān)系型數(shù)據(jù)庫(kù)
目前已支持MySQL、SQLServer、PostgreSQL等多種關(guān)系型數(shù)據(jù)庫(kù)。
支持SQL方式訪問NoSQL
除了關(guān)系型數(shù)據(jù)庫(kù)之外,跨實(shí)例查詢還支持以SQL方式訪問Redis等NoSQL數(shù)據(jù)庫(kù)。由于支持了SQL語(yǔ)法,也可以實(shí)現(xiàn)RDBMS和NoSQL之間關(guān)聯(lián)查詢。是的,你沒看錯(cuò),一條SQL就能實(shí)現(xiàn)MySQL和Redis之間的關(guān)聯(lián)查詢。
支持跨地域以及混合云查詢
企業(yè)發(fā)展到一定階段,用戶量、業(yè)務(wù)量不斷攀升,原來(lái)的單機(jī)房容量已經(jīng)不能滿足業(yè)務(wù)發(fā)展的需求,再結(jié)合容災(zāi)、高可用等因素,通常會(huì)選擇跨region部署,也叫單元化部署。同時(shí),不少企業(yè)也需要將業(yè)務(wù)拓展到海外,通過本地就近部署,為國(guó)外用戶提供更好的體驗(yàn)。類似這種水平拆分帶來(lái)的問題就是,如何對(duì)全局的業(yè)務(wù)數(shù)據(jù)進(jìn)行統(tǒng)一的匯總關(guān)聯(lián)查詢。
借助DMS跨實(shí)例查詢服務(wù),無(wú)論您的數(shù)據(jù)庫(kù)實(shí)例部署在阿里云的哪個(gè)region,無(wú)需跨region的數(shù)據(jù)遷移,即可實(shí)現(xiàn)所有region數(shù)據(jù)的統(tǒng)一查詢。
除了阿里云RDS,我們也支持用戶部署在阿里云ECS上的各種數(shù)據(jù)庫(kù)。不僅如此,如果您的數(shù)據(jù)庫(kù)部署在本地IDC機(jī)房,甚至其他云廠商,都可以通過跨實(shí)例查詢服務(wù),實(shí)現(xiàn)這些混合云場(chǎng)景的跨實(shí)例關(guān)聯(lián)查詢。
跨實(shí)例數(shù)據(jù)導(dǎo)入導(dǎo)出
insert into b select * from a;
眾所周知,這條SQL語(yǔ)句可以將表a的數(shù)據(jù)導(dǎo)出到表b中,但如果a表和b表不在同一個(gè)數(shù)據(jù)庫(kù)實(shí)例上,那這條sql就無(wú)能為力了。
跨實(shí)例查詢服務(wù)的出現(xiàn),打破了實(shí)例與實(shí)例之間數(shù)據(jù)導(dǎo)入導(dǎo)出的邊界。它可以將數(shù)據(jù)從一個(gè)MySQL實(shí)例的表導(dǎo)出到另外一個(gè)MySQL實(shí)例的表中;也可以將SQLServer表和PostgreSQL表關(guān)聯(lián)查詢的結(jié)果,導(dǎo)出到MySQL實(shí)例的表中,就是這么靈活。
兼容標(biāo)準(zhǔn)SQL
通過標(biāo)準(zhǔn)的SQL語(yǔ)句,即可實(shí)現(xiàn)跨實(shí)例查詢。同時(shí)跨實(shí)例查詢服務(wù)高度兼容MySQL,支持MySQL協(xié)議,以及各種常用函數(shù)和語(yǔ)法。您可通過JDBC/ODBC驅(qū)動(dòng)連接到跨實(shí)例查詢服務(wù);也可以使用各種MySQL GUI工具來(lái)管理各種數(shù)據(jù)源;當(dāng)然,您也可以在DMS跨實(shí)例查詢控制臺(tái)上直接使用。
Serverless架構(gòu)
跨實(shí)例查詢是無(wú)服務(wù)器化的在線數(shù)據(jù)庫(kù)關(guān)聯(lián)查詢服務(wù)。用戶無(wú)需預(yù)購(gòu)計(jì)算資源、無(wú)需維護(hù)資源、沒有運(yùn)維和升級(jí)成本,隨時(shí)隨地使用。
高性能低延遲
跨實(shí)例查詢服務(wù)底層基于強(qiáng)大的MPP計(jì)算引擎,持續(xù)不斷地對(duì)SQL查詢進(jìn)行優(yōu)化,包括pushdown、join算法、執(zhí)行計(jì)劃緩存、Meta緩存、本地調(diào)度、連接池等技術(shù)。目前單表查詢以及跨實(shí)例的多表關(guān)聯(lián)查詢,都能在毫秒級(jí)完成。
技術(shù)架構(gòu)
用戶可以在應(yīng)用程序中,直接使用MySQL JDBC驅(qū)動(dòng)連接跨實(shí)例查詢服務(wù),進(jìn)行跨實(shí)例查詢。當(dāng)然,我們也提供了控制臺(tái)頁(yè)面,直接輸入SQL即可執(zhí)行。
應(yīng)用場(chǎng)景
垂直拆分后的跨數(shù)據(jù)庫(kù)查詢
某電商公司原先將會(huì)員、訂單、商品等數(shù)據(jù)都存放在一個(gè)數(shù)據(jù)庫(kù)實(shí)例中,但業(yè)務(wù)發(fā)展迅猛,訪問量極速增長(zhǎng),導(dǎo)致數(shù)據(jù)庫(kù)容量及性能遭遇瓶頸,因此用戶決定對(duì)架構(gòu)進(jìn)行垂直拆分,將會(huì)員、商品、訂單數(shù)據(jù)垂直拆分至三個(gè)數(shù)據(jù)庫(kù)實(shí)例中。此時(shí)業(yè)務(wù)上需要展示某個(gè)品類商品的售賣訂單量,原本在同一數(shù)據(jù)庫(kù)里的查詢,要變成跨兩個(gè)數(shù)據(jù)庫(kù)實(shí)例的查詢。業(yè)務(wù)上要怎么進(jìn)行關(guān)聯(lián)查詢?
用戶首先想到的方法是,對(duì)現(xiàn)有業(yè)務(wù)代碼進(jìn)行重構(gòu),分別從兩個(gè)數(shù)據(jù)庫(kù)查詢數(shù)據(jù),然后在業(yè)務(wù)代碼中進(jìn)行join關(guān)聯(lián)。那么問題來(lái)了,如果采用這個(gè)解決方案,業(yè)務(wù)上那么多查詢改造起來(lái),拆分難度極大,操作起來(lái)過于復(fù)雜。跨庫(kù)join操作又沒有非常高效的辦法,需要從各個(gè)業(yè)務(wù)庫(kù)迭代查詢,查詢效率也會(huì)有一定影響。
我們發(fā)現(xiàn)用戶遇到的其實(shí)就是典型的跨實(shí)例查詢問題。目前,
阿里云DMS跨實(shí)例查詢服務(wù)已經(jīng)支持跨多個(gè)數(shù)據(jù)庫(kù)實(shí)例的SQL查詢的能力,用戶利用一條SQL即可解決上述難題。不僅能夠滿足“跨庫(kù)Join”這一核心訴求,還能極大地簡(jiǎn)化用戶的技術(shù)方案。水平拆分后的跨數(shù)據(jù)庫(kù)查詢
某酒店在多個(gè)城市都有對(duì)應(yīng)的門店,其數(shù)據(jù)庫(kù)在每個(gè)城市也會(huì)單獨(dú)部署一套,業(yè)務(wù)上有對(duì)多個(gè)城市全局?jǐn)?shù)據(jù)查詢的訴求。同樣,現(xiàn)在越來(lái)越多的互聯(lián)網(wǎng)行業(yè)開始引入單元化架構(gòu),在每個(gè)城市會(huì)單獨(dú)部署機(jī)房和數(shù)據(jù)庫(kù),進(jìn)行多單元數(shù)據(jù)匯總查詢的需求也越來(lái)越強(qiáng)。
為了滿足云上這些跨單元、跨region的數(shù)據(jù)庫(kù)查詢需求,跨實(shí)例查詢服務(wù)打通region之間的屏障,用戶通過一條SQL就能實(shí)現(xiàn)這些需求。
異構(gòu)數(shù)據(jù)庫(kù)的關(guān)聯(lián)查詢
某公司考慮成本和未來(lái)可擴(kuò)展性,正在將業(yè)務(wù)數(shù)據(jù)從SQLServer遷移到MySQL上。在這期間,必然存在某些業(yè)務(wù)子系統(tǒng)仍然在SQLServer上,另外一些業(yè)務(wù)子系統(tǒng)已經(jīng)全部遷移到MySQL上,這時(shí)兩個(gè)子系統(tǒng)之間的聯(lián)合查詢,就可以借助阿里云的跨實(shí)例查詢服務(wù)實(shí)現(xiàn)。不僅如此,在遷移過程中,還可以通過跨實(shí)例查詢服務(wù),來(lái)校驗(yàn)SQLServer和MySQL上的數(shù)據(jù)是否一致。
混合云場(chǎng)景的關(guān)聯(lián)查詢
某游戲公司,由于各種原因,同時(shí)保有阿里云、騰訊、UCloud、AWS等環(huán)境的數(shù)據(jù)庫(kù)實(shí)例,同時(shí)在自己自建的IDC也部署了部分?jǐn)?shù)據(jù)庫(kù)。業(yè)務(wù)的數(shù)據(jù)如此分散,單是統(tǒng)計(jì)一下當(dāng)前游戲在線用戶數(shù),都要分別到各個(gè)環(huán)境去查詢一遍再做匯總。
借助阿里云跨實(shí)例查詢服務(wù),一條SQL就能實(shí)現(xiàn)跨云廠商和IDC之間的關(guān)聯(lián)查詢。小結(jié)
阿里云DMS(數(shù)據(jù)管理)跨實(shí)例查詢服務(wù),不僅覆蓋了異構(gòu)數(shù)據(jù)源關(guān)聯(lián)查詢的場(chǎng)景,還解決了跨region、跨云的數(shù)據(jù)庫(kù)關(guān)聯(lián)查詢的難題。不僅如此,我們對(duì)查詢性能進(jìn)行了大幅優(yōu)化,使得大部分查詢能在毫秒級(jí)完成。
用戶無(wú)需通過數(shù)據(jù)匯集,即可通過標(biāo)準(zhǔn)的SQL實(shí)現(xiàn)跨實(shí)例的交叉查詢。轉(zhuǎn)載于:https://juejin.im/post/5c3c319551882524ed5ba45e
總結(jié)
以上是生活随笔為你收集整理的如何玩转跨库Join?跨数据库实例查询应用实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 五、curator recipes之选举
- 下一篇: 国内小程序生态服务平台即速应用完成500