开源数据库无感知替换mssql

Babelfish简介

开源数据库替换ms-sql-server,不需要改动应用,也不需要改端口 (port 1433)

Babelfish是在PostgreSQL的基础之上实现了类似Microsoft SQL Server部分功能。为了实现这个目标,PostgreSQL核心内部的几个部分必须被修改。PostgreSQL 没有提供这种开箱即用的功能,因此必须提供附加组件才能实现这一点。

Babelfish实现Microsoft SQL Server功能的方式是使用hooks(我们一般称之为钩子),主要做这意味着 PostgreSQL可以呈现为不同的数据库状态,比如Oracle、MS SQL SERVER。而事实上在同一时间可以同时支持多个协议,会使数据库的设置更加灵活和易于处理。

图1 babelfish整体结构图

Babelfish从整体上共分为六个部分,前两个部分即patch和Extension组成的babelfish的核心功能,其中插件功能如下:

lbabelfishpg_common: Microsoft SQL Server数据类型

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,当时具体兼容性会有很多差异。

下面简单介绍一下Babelfish的整体架构:

图2:babelfish系统架构图

从图中可以了解到,一旦TDS处理程序接受了来自端口 1433的请求,处理了请求就会通过pltds传递到标准的PostgreSQL后端(支持MS SQL SERVER的功能)。而PostgreSQL仍将在端口5432(默认)上向客户端公开,提供原生PG的相关功能。

总结一下就是:

l客户端连接到端口1433,处理SQL Server方言。

l客户端连接到端口5432,处理PostgreSQL方言。

换句话说,启用Babelfish的数据库将侦听两个 TCP 端口上的连接,而不是一个。

处理流程是TDS侦听器捕获来自客户端的请求,并通过 Microsoft SQL Server的SQL方言的解析器发送,然后查询将由常规PostgreSQL后端处理。

数据库与模式

PostgreSQL 提供以下对象的逻辑结构:

l实例:一个正在运行的 PostgreSQL 服务器

l数据库:用户连接到什么

l模式:数据库中表和其他对象的逻辑分组

l表:数据真正存储的地方

Microsoft SQL Server也具有相同的结构。可以通过使用USE命令切换数据库。另外与PostgreSQL相比,可以从另一个数据库查询表并连接来自不同数据库的表。要启用跨库联接,可以使用multi-dbBabelfish 中的迁移模式。在这种模式下,TDS 连接中的数据库(我们简称为“T-SQL 数据库”)已被建模为 PostgreSQL 中的模式。

在multi-db模式下,如果调用USE可以从一个数据库切换到另一个数据库,实际上是连接到同一个PostgreSQL数据库的不同模式。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值