重点摘要
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实例上来,轻松实现“一份成本,两种引擎”。
Bablefish为什么选择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.htmlail/428620.html
应用程序
Babelfish for RDS PostgreSQL的TDS协议,支持主流开发技术语言,诸如C#、Java、Python、C/C++、Go等。详情应用程序Demo,请参考阿里云官方帮助文档:https://help.aliyun.com/document_detail/428618.htmldetail/428618.html
注意事项
Babelfish 目前还没有完全兼容 Microsoft SQL Server T-SQL,详细的语法限制参见:https://babelfishpg.org/docs/usage/limitations-of-babelfishlimitations-of-babelfish
重点摘要
众所周知,Microsoft SQL Server是一款简单易用、有着非常多企业级特性、功能强大的商业数据库,兼容SQL Server语法,不断减少Limitations是Babelfish未来的发展方向。RDS PostgreSQL数据库内核团队已经和社区建立合作关系,会不断关注相关社区变化;同时也会把阿里云相关Babelfish经验、代码建设反哺社区。
作者介绍
谢桂起,PostgreSQL数据库爱好者,当前主要参与RDS PostgreSQL管控产品建设,欢迎有志之士加盟RDS产品部,邮箱:jianming.wjm@alibaba-inc.com