「一份成本、两种引擎」Babelfish for RDS PostgreSQL发布
重点摘要
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