查看原文
其他

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

谢桂起 阿里云数据库 2022-10-13


重点摘要

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。

  • 期望节省SQL Server的License费用支出,选择迁移到开源数据库PostgreSQL;

  • 政策要求去商业数据库,但又不希望投入大量时间和精力重写应用程序,可以将SQL Server切换为PostgreSQL;

  • 期望使用PostgreSQL强大的开源插件库能力,例如时空引擎PostGIS/Ganos,时序插件TimescaleDB等近100款插件;

  • 期望一份成本享受两种数据库引擎实时在线的数据查询和处理能力。


Babelfish介绍

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


Babelfish为什么选择PostgreSQL?

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

  • PostgreSQL 是全球开源数据库排名第二的产品,有着强大的生态和社区力量,且有着最接近商业数据库的企业级特性,有着非常开放的生态和自由的开源协议;

  • 与开源数据库发展良好势头相反,部分商业数据库或原地踏步或一路走低;

  • 根据DB-Engine Ranking评测,PostgreSQL获得2017,2018和2020三次年度“DBMS of the Year”,最受开发者欢迎的数据库。


Babelfish整体架构

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

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

  • 应用层

  • RDS PostgreSQL引擎层

  • 云原生基础设施层


应用层

开启了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 Mode

在 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。

single-db 模式应用场景:

  • 迁移单个 SQL Server 数据库到 Babelfish for RDS PostgreSQL,迁移之后的 schema 名字和 SQL Server 中被迁移数据库下的 schema 名字保持一致,使得应用服务可以在改动尽可能小的情况下切换到RDS PostgreSQL。

  • 整合多个 SQL Server 数据库到一个 Babelfish 数据库,最终目标是完全迁移到 RDS PostgreSQL。


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。

multi-db 模式应用场景:

  • SQL Server SAAS使用场景,按数据库划分多租户,每个库一个租户。

  • SQL Server中有多个用户数据库,需要RDS PostgreSQL需要一一对应。

  • 未来可能有迁移多个用户数据库到 RDS PostgreSQL 的需求。

  • 多个 SQL Server 用户数据库需要一起迁移,最终目标是使用 Babelfish 替代 SQL Server。


最佳实践

创建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 TDS端口

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

  • tsql (freetds)

  • sqlcmd (SQL Server Command Line)

  • SSMS (SQL Server Management Studio)

  • Azure Data Studio


简单操作范例

具体数据库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


重点摘要

众所周知,Microsoft SQL Server是一款简单易用、有着非常多企业级特性、功能强大的商业数据库,兼容SQL Server语法,不断减少Limitations是Babelfish未来的发展方向。RDS PostgreSQL数据库内核团队已经和社区建立合作关系,会不断关注相关社区变化;同时也会把阿里云相关Babelfish经验、代码建设反哺社区。


作者介绍

谢桂起,PostgreSQL数据库爱好者,当前主要参与RDS PostgreSQL管控产品建设,欢迎有志之士加盟RDS产品部,邮箱:jianming.wjm@alibaba-inc.com


点击“阅读原文”查看云数据库RDS PostgreSQL 版更多信息

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存