「一份成本、两种引擎」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。


Babelfish介绍

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


Bablefish为什么选择PostgreSQL?

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


Babelfish整体架构

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

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

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 Mode

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

在 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 模式应用场景:


Multi-DB Mode

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

在 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 模式应用场景:


最佳实践

创建Babelfish for RDS PostgreSQL实例

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

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

创建用户

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

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

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

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


连接Babelfish TDS端口

您可以使用以下任何一款客户端连接工具来连接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


重点摘要

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


作者介绍

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

展开阅读全文

页面更新:2024-03-08

标签:在线   引擎   阿里   端口   应用程序   实例   成本   能力   模式   数据库   用户

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top