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
  • 一個自定義WPF窗體的解決方案,借鑒了呂毅老師的WPF製作高性能的透明背景的異形視窗一文,併在此基礎上增加了滑鼠穿透的功能。可以使得透明窗體的滑鼠事件穿透到下層,在下層窗體中響應。 ...
  • 在C#中使用RabbitMQ做個簡單的發送郵件小項目 前言 好久沒有做項目了,這次做一個發送郵件的小項目。發郵件是一個比較耗時的操作,之前在我的個人博客裡面回覆評論和友鏈申請是會通過發送郵件來通知對方的,不過當時只是簡單的進行了非同步操作。 那麼這次來使用RabbitMQ去統一發送郵件,我的想法是通過 ...
  • 當你使用Edge等瀏覽器或系統軟體播放媒體時,Windows控制中心就會出現相應的媒體信息以及控制播放的功能,如圖。 SMTC (SystemMediaTransportControls) 是一個Windows App SDK (舊為UWP) 中提供的一個API,用於與系統媒體交互。接入SMTC的好 ...
  • 最近在微軟商店,官方上架了新款Win11風格的WPF版UI框架【WPF Gallery Preview 1.0.0.0】,這款應用引入了前沿的Fluent Design UI設計,為用戶帶來全新的視覺體驗。 ...
  • 1.簡單使用實例 1.1 添加log4net.dll的引用。 在NuGet程式包中搜索log4net並添加,此次我所用版本為2.0.17。如下圖: 1.2 添加配置文件 右鍵項目,添加新建項,搜索選擇應用程式配置文件,命名為log4net.config,步驟如下圖: 1.2.1 log4net.co ...
  • 之前也分享過 Swashbuckle.AspNetCore 的使用,不過版本比較老了,本次演示用的示例版本為 .net core 8.0,從安裝使用開始,到根據命名空間分組顯示,十分的有用 ...
  • 在 Visual Studio 中,至少可以創建三種不同類型的類庫: 類庫(.NET Framework) 類庫(.NET 標準) 類庫 (.NET Core) 雖然第一種是我們多年來一直在使用的,但一直感到困惑的一個主要問題是何時使用 .NET Standard 和 .NET Core 類庫類型。 ...
  • WPF的按鈕提供了Template模板,可以通過修改Template模板中的內容對按鈕的樣式進行自定義。結合資源字典,可以將自定義資源在xaml視窗、自定義控制項或者整個App當中調用 ...
  • 實現了一個支持長短按得按鈕組件,單擊可以觸發Click事件,長按可以觸發LongPressed事件,長按鬆開時觸發LongClick事件。還可以和自定義外觀相結合,實現自定義的按鈕外形。 ...
  • 一、WTM是什麼 WalkingTec.Mvvm框架(簡稱WTM)最早開發與2013年,基於Asp.net MVC3 和 最早的Entity Framework, 當初主要是為瞭解決公司內部開發效率低,代碼風格不統一的問題。2017年9月,將代碼移植到了.Net Core上,併進行了深度優化和重構, ...