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

相关推荐

  • mysql学习笔记第三节 事务隔离

    mysql学习笔记第三节 事务隔离事务隔离 事务隔离 事物的特性:ACID 原子性:Atomicity 一致性:consistency 隔离性:isolation 持久性:durability 隔离的利弊 隔离程度越高,效率就越低 标

    2023-04-18
    144
  • 使用Python进行字符串编码操作

    使用Python进行字符串编码操作编码是将文本数据转换成计算机能够处理的二进制数据的过程。计算机只能理解二进制数据,而不能理解字符集中的字符。因此,需要将字符集中的字符转换成对应的二进制数据,才能被计算机所处理。

    2024-02-16
    84
  • mysqldump备份与恢复_mysqldump导出数据库

    mysqldump备份与恢复_mysqldump导出数据库导出 mysqldump -hhostname -uusername -ppassword databasename | gzip > databasename-`date +%Y-%m-%d`.s…

    2023-02-18
    138
  • 日本大型移动支付软件 PayPay 的 TiDB 迁移实践[亲测有效]

    日本大型移动支付软件 PayPay 的 TiDB 迁移实践[亲测有效]作者简介:Munenori Hirakawa,PayPay Senior Manager at Product Tech Division。 PayPay 成立于 2018 年 10 月,由软银集团…

    2023-03-13
    146
  • mongodb 内存使用小结[通俗易懂]

    mongodb 内存使用小结[通俗易懂]mongodb 内存组成 对于使用WiredTiger,mongodb的内存,主要包括WirTiger引擎内部cache 与filesystem cache,对于WirTiger引擎内部cache …

    2023-03-31
    144
  • Python实现字典按值排序

    Python实现字典按值排序字典(Dictionary)是Python中非常重要的数据类型之一,它是一种可变的数据结构,用于通过键值对的方式将数据进行存储和组织。然而,基本的字典是无序的,这在某些场景下可能会成为问题。

    2024-06-18
    51
  • 记一次MySQL字符串索引优化方案

    记一次MySQL字符串索引优化方案本文已收录GitHub,更有互联网大厂面试真题,面试攻略,高效学习资料等字符串建立索引的优化1.建立前缀索引假设建立一个支持邮箱登录的用户表,对于邮件字段来说,可以有以下几种建立索引的方式:①.直接…

    2023-03-21
    162
  • MySQL 游标 – G

    MySQL 游标 – GMySQL 游标 SQL语句是“面向集合编程”,重点在于“获得什么”,而不是“如何获得”。 有时候我们不需要对查询结构集的每一条都进行相同的操作,而是只操作其中的某些行,这时候就需要面向过程的编程方法

    2023-03-17
    153

发表回复

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