babel fish_babelfish

babel fish_babelfishBabelfish是在PostgreSQL的基础之上实现了类似Microsoft SQL Server部分功能。为了实现这个目标,PostgreSQL核心内部的几个部分必须被修改。PostgreSQL

Babelfish简介

babel fish_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/archive/2022/11/16/About_Babelfish.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4527.html

(0)
上一篇 2023-06-15
下一篇 2023-06-16

相关推荐

  • PHP的垃圾回收机制

    PHP的垃圾回收机制一、原理 php5和php7的垃圾回收机制都是利用引用计数。 二、php5和php7不同点 1、PHP5标量数据类型会计数,PHP7标量数据类型不再计数,不需要单独分配内存。 2、PHP7的zval…

    2023-02-19
    98
  • Python实现秒表功能,精确计时秒数

    Python实现秒表功能,精确计时秒数秒表是一种计时工具,可以用来精确计算时间。在许多领域,如运动员训练、实验室研究、比赛等,秒表都被广泛应用。本文将介绍如何使用Python实现秒表功能。

    2024-03-30
    25
  • HBase Filter 过滤器之QualifierFilter详解

    HBase Filter 过滤器之QualifierFilter详解前言: 本文详细介绍了 HBase QualifierFilter 过滤器 Java&Shell API 的使用,并贴出了相关示例代码以供参考。QualifierFilter 基于列名进行过滤

    2023-02-27
    113
  • Excel——字符串操作函数

    Excel——字符串操作函数前言:这篇文章是对Excel字符串截取处理的简单记录和示例。1.字符串截取函数1.1左侧位置截取字符串—left(text,num_chars)1.2右侧位置截取字符串—right(text,num_chars)1.3中间位置截取字符串—mid(text,start_num,num_chars)2.字符串查找函数find(find_text,within_text,start_num)hex2dec如果提供的参数number不是十六进制数,或者包含10个以上字符。

    2023-03-02
    113
  • 网页python编辑(用python做网页)

    网页python编辑(用python做网页)1、打开sublime text 3,新建一个PY文件。

    2023-11-28
    71
  • Python Anchor 简化页面跳转

    Python Anchor 简化页面跳转Python Anchor是一种基于Python的技术,可以用来简化页面跳转。在网页设计中,页面跳转是常见的操作,但是由于存在一些繁琐的问题,一些网站设计者往往会将页面跳转的设计变得复杂。而Python Anchor技术的出现,可以让页面跳转更加简单。

    2024-01-18
    53
  • Python实现extend函数

    Python实现extend函数在Python中,list是常用的数据类型之一,具有存储任意数据类型元素的特点。使用list可以非常方便地进行数据的存储和操作。其中,extend函数是一个非常常用的list操作函数,在Python中,可以使用该函数将一个list扩展到另一个list中。本篇文章将围绕Python中的extend函数展开,从多个方面来详细阐述extend函数的使用、原理等相关知识。

    2024-04-25
    13
  • Python函数调用技巧

    Python函数调用技巧Python中,函数是一段可执行的代码,用以完成特定功能。通过函数,可以将代码组织成更小的模块,方便调用和维护。在Python中,调用函数需要给出函数名和参数(如果有的话),例如:

    2024-05-19
    7

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注