SQL--每日一解------DBLink 跨庫查詢

背景

隨著業務複雜程度的提高、數據規模的增長,越來越多的公司選擇對其在線業務數據庫進行垂直或水平拆分,甚至選擇不同的數據庫類型以滿足其業務需求。與此同時,業務的數據被“散落”在各個數據庫實例中。如何方便地對這些數據進行彙總查詢,已經成為困擾用戶的一大問題。

例如,一家電商創業公司,最初的會員、商品、訂單數據全部都存放在一個SQLServer實例中。但隨著會員數量和交易規模的不斷增長,單個SQLServer實例已經支撐不了巨大的業務壓力,同時基於成本考慮,將商品和訂單表從原來的SQLServer中拆分出來,分別存放到兩個不同的MySQL實例中。原先用戶連接到一個實例上即可執行一條SQL來關聯彙總查詢這三張表的數據,但現在由於數據庫拆分,無法簡易實現這一操作。

針對這類問題,我們提供了一套基於DBLink的解決方案,用戶通過一條SQL就能實現跨越多個數據庫實例的查詢。

SQL--每日一解------DBLink 跨庫查詢

什麼是DBLink

熟悉Oracle的人應該知道,我們可以在當前登錄的Oracle上,建立一個DBLink指向另一個遠程的Oracle數據庫表。

類似的,跨數據庫查詢中的DBLink,是一個指向用戶的任意數據庫實例的虛擬連接,是數據庫實例的別名:

  • DBLink和數據庫實例一一對應,對於MySQL來說,對應的就是MySQL數據庫所在的ip:port
  • DBLink可以指向MySQL、SQLServer、PostgreSQL、Oracle、Redis等;
  • 用戶需在SQL語句的庫表名前加上DBLink前綴(DBLink.庫.表),即可實現跨數據庫查詢。
  • DBLink的名字由英文字母、數字和下劃線組成

DBLink/database/table對應關係

數據庫系統通常把數據組織成層次結構,如:database、schema、table等,以方便命名空間隔離和權限管理。跨庫查詢也是類似,它以dblink、database和table這三層結構來組織。

在跨庫查詢中,用戶訪問一個表需要指定全名稱,即:dblink.database.table。然而,不同數據庫類型具有不同的層次組織,為了實現統一查詢,需要將這些不同層次結構統一起來,形成DBLink、database和table三層結構。下表描述了跨庫查詢服務與MySQL、PostgreSQL、SQLServer和Redis之間層次結構的映射關係:

SQL--每日一解------DBLink 跨庫查詢

l


分享到:


相關文章: