Babelfish簡介

来源:https://www.cnblogs.com/88223100/archive/2022/11/16/About_Babelfish.html
-Advertisement-
Play Games

Babelfish是在PostgreSQL的基礎之上實現了類似Microsoft SQL Server部分功能。為了實現這個目標,PostgreSQL核心內部的幾個部分必須被修改。PostgreSQL 沒有提供這種開箱即用的功能,因此必須提供附加組件才能實現這一點。 Babelfish... ...


 

 

 

Babelfish是在PostgreSQL的基礎之上實現了類似Microsoft SQL Server部分功能。為了實現這個目標,PostgreSQL核心內部的幾個部分必須被修改。PostgreSQL 沒有提供這種開箱即用的功能,因此必須提供附加組件才能實現這一點。

      Babelfish實現Microsoft SQL Server功能的方式是使用hooks(我們一般稱之為鉤子),主要做這意味著 PostgreSQL可以呈現為不同的資料庫狀態,比如Oracle、MS SQL SERVER。而事實上在同一時間可以同時支持多個協議,會使資料庫的設置更加靈活和易於處理。

Babelfish for PostgreSQL架構圖

Babelfish架構圖 架構說明:
  • Babelfish for PostgreSQL實例具備兩個TCP埠,分別監聽來自SQL Server和PostgreSQL客戶端的SQL請求。
    • TDS Listener:接收SQL Server協議埠(TDS)的SQL請求,預設埠號為1433。   說明 Babelfish支持TDS協議7.1及更高版本,即支持Microsoft SQL Server 2000及以上版本。
    • PostgreSQL Listener:接收PostgreSQL協議埠的SQL請求,預設埠號為5432。   說明 當前支持RDS PostgreSQL 13和14。
  • Babelfish for PostgreSQL實例接收來自TDS Listener埠的SQL請求時,該請求被轉發到T-SQL解析器,將SQL Server的T-SQL轉換為PostgreSQL可識別的執行計劃。
  • Babelfish for PostgreSQL實例接收來自PostgreSQL Listener埠的SQL請求時,該請求被轉發到PostgreSQL解析器,生成執行計劃。
  • PostgreSQL內部的SQL執行器統一處理,執行所有計劃。

開啟了Babelfish功能的PostgreSQL實例,使您同時具備了兩個資料庫引擎(PostgreSQL和SQL Server)的能力,既可以處理來自SQL Server的請求,又可以處理來自PostgreSQL的請求,在降低成本的同時獲得更多的能力支持。

遷移模式簡介

Babelfish for RDS PostgreSQL實例會預置一個名為babelfish_db的PostgreSQL資料庫,所有遷移的SQL Server對象和結構都會放置在該資料庫下。

  說明 如果您通過TDS埠連接實例,babelfish_db資料庫不可見。

您可以選擇Single-DB模式(單資料庫模式)或Multi-DB模式(多資料庫模式)。不同模式下,babelfish_db內的SQL Server資料庫模式及名稱不同。

Single-DB模式

  • 架構圖:single-db
  • 說明:該模式下,babelfish_db資料庫中用戶資料庫的Schema名稱與SQL Server中的相同。 例如:通過TDS埠創建資料庫DB_A,然後在DB_A下創建schema_A。
    • 在PostgreSQL的babelfish_db資料庫中,Schema名稱為:dbo和schema_A。
    • 在SQL Server的DB_A資料庫中,Schema名稱為:dbo和schema_A。

Multi-DB模式

  • 架構圖:Multi-DB
  • 說明:該模式下,在PostgreSQL中,用戶資料庫的schema名稱為dbname_schemaname。在SQL Server中,Schema名稱保持不變。 例如:通過TDS埠創建資料庫DB_A,然後在DB_A下創建schema_A。
    • 在PostgreSQL的babelfish_db資料庫中,Schema名稱為:DB_A_dbo和DB_A_schema_A。
    • 在SQL Server的DB_A資料庫中,Schema名稱為:dbo和schema_A。

其他

Babelfish模仿 Microsoft SQL Server的特定數據類型。以下是這些類型的完整列表:

sys.BBF_BINARY: 二進位數據的數據類型。

sys.BIT: 將1或0轉換為t或f。

sys.BPCHAR和sys.VARCHAR:Microsoft SQL Server特定varchar實現

sys.DATETIME: 時間和日期的簡單數據類型。為了更精確地使用DATETIME2。

sys.DATETIME2:DATETIME具有更高精度和功能的擴展。

sys.DATETIMEOFFSET:很像DATETIME2,但具有時區概念。

sys.SMALLDATETIME:定義與一天中的時間相結合的日期。時間基於24小時制,秒數始終為零 (:00),沒有小數秒。

sys.SQL_VARIANT:使這些資料庫對象能夠支持其他數據類型。

sys.UNIQUEIDENTIFIER:16位元組GUID(例如6F9619FF-8B86-D011-B42D-00C04FC964FF)

lbabelfishpg_money: 固定精度數字類型

還有一種數據類型出於許可原因打包到單獨的擴展中:fixeddecimal.

lbabelfishpg_tds: TDS 協議擴展

此擴展處理TDS客戶端-伺服器協議。它必須在伺服器啟動時使用載入shared_preload_libraries,以便它可以開始在TDS埠上偵聽傳入連接。

lbabelfishpg_tsql: T-SQL 擴展

此擴展的目的是提供T-SQL處理所需的所有代碼。如果沒有可能無法編寫存儲過程代碼。包含實現 Microsoft SQL Server 功能所需的大量函數、系統視圖和其他基礎結構。

Compass作為Babelfish的遷移評估工具,可以對源端的多個SQL腳本進行遷移評估,並給出評估報告;

WebSite是文檔相關內容,與官網是一致的,包括介紹Babelfish的架構、相容性、安全等等;

Tools主要是可以訪問Babelfish的客戶端工具,包括psql、tsql以及MS SQL SERVER自帶的smss;

最後一部分是Client,這部分主要是客戶端編程,除了支持不同編程語言,如C、C#、Python、Java以外,還支持不同的驅動,如下:

lOLEDB Provider/MSOLEDBSQL

lOLEDB Driver/SQLOLEDB (deprecated by Microsoft)

l.NET Data Provider for SQL Server

l SQL Server Native Client 11.0 (deprecated by Microsoft)

l Microsoft SqlClient Data Provider for SQL Server

l Open Database Connectivity (ODBC)

l Java Database Connectivity (JDBC)

也就是說我們可以像使用MS SQL SERVER一樣來使用Babelfish,當時具體相容性會有很多差異。

 

開源

PostgreSQL SQL Server 相容插件 babelfish開源

AWS babelfish 開源了, 瞄準了SQL Server的存量資料庫市場.

https://github.com/babelfish-for-postgresql/

https://babelfishpg.org/getstarted/

但是目前的使用方法比較複雜, PG內核還沒有接收proxy protocol的patch, 所以要用babelfish必須使用aws開源的這個postgresql版本:

https://github.com/babelfish-for-postgresql/postgresql_modified_for_babelfish

《PostgreSQL devel preview - PROXY protocol support (支持代理協議解包, 源頭client ip filter pg_hba.conf, 例如haproxy, balancer)》

《PostgreSQL 相容 SQL Server - Babelfish - SQL Server 業務 無感使用PostgreSQL - 一份數據, 同時相容SQL Server和PostgreSQL》

本文來自博客園,作者:古道輕風,轉載請註明原文鏈接:https://www.cnblogs.com/88223100/p/About_Babelfish.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文乾貨充足篇幅較長,建議收藏後閱讀避免迷路。文末可獲取【自動聊天機器人源碼和Demo】。 本教程教大家使用即構 ZIM SDK 創建一個能與微信端互動消息的自動聊天機器人應用。ZIM SDK可廣泛應用於娛樂社交、電商購物、線上教育、互動直播等多種場景下即時通訊功能實現 。 原文作者:RTC_程式猿 ...
  • 業界各大廠商或開源團隊都會構建並提供一些緩存框架組件提供給開發者按需選擇,這裡就會涉及到一個標準規範的遵循問題,本文我們一起聊聊JCache API規範與SpringCache規範。 ...
  • 今天看了段DNF視頻,有發現到血條變化效果是這樣的: 這裡為了突出Boss受到的傷害之大,也就是玩家的傷害之高,以至於Boss的血條變化會出現殘影效果。 那麼,就簡單使用協程來實現了一下這種效果: 實現思路也蠻簡單的:就是在Canvas下創建兩個Slider,分別是Slider和Slider01,先 ...
  • 一:背景 1.講故事 今天給大家帶來一個入門級的 CPU 爆高案例,前段時間有位朋友找到我,說他的程式間歇性的 CPU 爆高,不知道是啥情況,讓我幫忙看下,既然找到我,那就用 WinDbg 看一下。 二:WinDbg 分析 1. CPU 真的爆高嗎 其實我一直都在強調,要相信數據,口說無憑,一定要親 ...
  • 一、前言 本文章彙總c#中常見的鎖,基本都列出了該鎖在微軟官網的文章,一些不常用的鎖也可以參考微軟文章左側的列表,方便溫習回顧。 二、鎖的分類 2.1、用戶模式鎖 1、volatile 關鍵字 volatile 並沒有實現真正的線程同步,操作級別停留在變數級別並非原子級別,對於單系統處理器中,變數存 ...
  • 前言 拋開死鎖不談,只聊性能問題,儘管鎖總能粗暴的滿足同步需求,但一旦存在競爭關係,意味著一定會有線程被阻塞,競爭越激烈,被阻塞的線程越多,上下文切換次數越多,調度成本越大,顯然在高併發的場景下會損害性能。在高併發高性能且要求線程安全的述求下,無鎖構造(非阻塞構造)閃亮登場。 參考文檔: C# - ...
  • 在 Windows 環境下如果採用 IIS 作為 網站伺服器時,常規的網站綁定 HTTPS 需要一個一個站點手動選擇對應的證書綁定,而且證書過期之後更換證書時也是需要一個個重新綁定操作,無法便捷的做到像 Nginx 或者 Apache 等程式一樣,直接在配置文件中指定所需要使用的證書文件的路徑,像 ...
  • //源文件 void RccPhyConfig() { uint16_t retry = 0; RCC->APB1ENR|=1<<28; //電源介面時鐘使能 PWR->CR1|=3<<14; //高性能模式,時鐘可到 180Mhz PWR->CR1|=1<<16; //使能過驅動,頻率可到 216 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...