「一份成本、两种引擎」Babelfish for RDS PostgreSQL发布

Python012

「一份成本、两种引擎」Babelfish for RDS PostgreSQL发布,第1张

Babelfish for RDS PostgreSQL 重磅发布,阿里云 RDS 团队通过产品能力的提升,实现一份硬件成本两种引擎,帮助客户降低成本。

您只需要在购买阿里云 RDS PostgreSQL 实例时开启Babelfish选项,即可获得PostgreSQL和Microsoft SQL Server两种数据库引擎数据查询和处理的能力,使 RDS PostgreSQL 具备解析执行SQL Server T-SQL语句的能力。

Babelfish支持SQL Server Tabular Data Stream (TDS) wire protocol和T-SQL(Microsoft SQL Server 查询语言),因此您无需切换数据库驱动程序或重新编写SQL,只需要在适配少量代码的情况下,将应用程序的数据库从SQL Server迁移至开启了Babelfish的阿里云RDS PostgreSQL实例上。

如果您也有如下的烦恼,那么可以考虑使用Babelfish for RDS PostgreSQL。

基于Babelfish for PostgreSQL的开源项目,阿里云RDS PostgreSQL实例生产时开启Babelfish选项后,您可以同时获得PostgreSQL和Microsoft SQL Server两种数据库引擎实时在线数据查询和处理的能力。因此,您无需切换数据库驱动程序或重新编写SQL,只需要在少量代码适配的情况下,将应用程序的数据库从SQL Server迁移至开启了Babelfish的阿里云RDS PostgreSQL实例上来,轻松实现“一份成本,两种引擎”。

一个实例,两个引擎,实时在线,双引擎双活,为什么是PostgreSQL数据库来实现呢?笔者相信下面都是可能的考虑因素:

Babelfish 通过插件的方式扩展 PostgreSQL 的功能,使得 PostgreSQL 在具备自身所有能力的同时,又具备接受和处理 Microsoft SQL Server 数据库数据查询和处理的能力。

Babelfish整体架构分为三层,至上而下分为:

开启了Babelfish选项的RDS PostgreSQL,既可以接收和处理来自SQL Server的应用连接,比如:C/C++类的MSSQL ODBC应用,JAVA类的MSSQL JDBC应用以及微软系使用最为广泛的C# .NET Provider for MSSQL类应用;又可以处理来自PostgreSQL类的应用,比如JAVA类PostgreSQL JDBC类应用。

一个 Babelfish for RDS PostgreSQL 实例会监听两个 TCP 端口,一个是接受 SQL Server 协议(TDS)端口 ,默认是 1433,另一个是接受来自 PostgreSQL 协议的端口,默认是 5432。如此,可以实现“一份成本、两种引擎”,使得SQL Server与PostgreSQL双引擎在线。

TDS 协议端口接受和处理来自 SQL Serve应用类的请求,并将 SQL Server 的 T-SQL 经过自定义解析器转为 PostgreSQL 可以识别的执行计划,交由PostgreSQL内核执行,然后返回给SQL Server终端用户。

RDS PostgreSQL数据库引擎,构建于阿里云云原生基础设施之上,采用存储计算分离架构。

Babelfish for RDS PostgreSQL 有两种迁移模式可供选择,分别是:single-db 和 multi-db 模式。迁移模式影响 SQL Server数据库的 schema 到 PostgreSQL 中 babelfish_db 库的 schema 名字的映射关系。

在 single-db 模式下,只支持在 Babelfish 中创建一个用户数据库,Babelfish用户数据库的 schema名称和 PostgreSQL 中 babelfish_db 数据库下的 schema 名字相同。例如:在 TDS 端口中创建数据库 DB_A,在 DB_A 下创建 schema_A,则在 PostgreSQL 的 babelfish_db 数据库中看到两个 schema:dbo 和 schema_A,对应于SQL Server中 DB_A 数据库的 dbo 和 schema_A。其中dbo为SQL Server默认创建的系统schema。

Multi-DB Mode

在 multi-db 模式下,Babelfish 中用户数据库的 schema 名字映射到 PostgreSQL 的 babelfish_db 数据库中之后会变成:数据库名>_。例如:在 TDS 端口中创建数据库 DB_A 和 DB_B,在 DB_A 和 DB_B 下分别创建 schema_A 和 schema_B,则在 PostgreSQL 的 babelfish_db 数据库中看到 DB_A 的 schema 为: DB_A_dbo 和 DB_A_schema_A;DB_B 的 schema 为: DB_B_dbo 和 DB_B_schema_B。

创建Babelfish for RDS PostgreSQL实例

新购RDS PostgreSQL 13版本时(当前只有PG 13支持Babelfish),勾选 启用 Babelfish即可创建出Babelfish for RDS PostgreSQL:

创建用户

RDS PostgreSQL控制台创建高权限账号,

然后连接实例的 PostgreSQL 端口,执行命令:

call sys.babel_initialize_logins('babelfish_user')即可。

您可以使用以下任何一款客户端连接工具来连接Babelfish for RDS PostgreSQL的TDS端口。

具体数据库DDL,DML等操作范例由于篇幅有限,请参考阿里云官方帮助文档:

https://help.aliyun.com/document_detail/428620.html

Babelfish for RDS PostgreSQL的TDS协议,支持主流开发技术语言,诸如C#、Java、Python、C/C++、Go等。详情应用程序Demo,请参考阿里云官方帮助文档:https://help.aliyun.com/document_detail/428618.html

Babelfish 目前还没有完全兼容 Microsoft SQL Server T-SQL,详细的语法限制参见:https://babelfishpg.org/docs/usage/limitations-of-babelfish

谢桂起,PostgreSQL数据库爱好者,当前主要参与RDS PostgreSQL管控产品建设,欢迎有志之士加盟RDS产品部,邮箱:[email protected]