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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...