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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
简介: Babelfish for RDS PostgreSQL 重磅发布,阿里云 RDS 团队通过产品能力的提升,实现一份硬件成本两种引擎,帮助客户降低成本。

重点摘要


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 PostgreSQLTDS协议,支持主流开发技术语言,诸如C#JavaPythonC/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

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
3月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
20天前
|
关系型数据库 MySQL Linux
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
|
11天前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
70 0
|
2月前
|
存储 SQL 关系型数据库
(十三)MySQL引擎篇:半道出家的InnoDB为何能替换官方的MyISAM?
MySQL是一款支持拔插式引擎的数据库,在开发过程中你可以根据业务特性,从支持的诸多引擎中选择一款适合的,例如MyISAM、InnoDB、Merge、Memory(HEAP)、BDB(BerkeleyDB)、Example、Federated、Archive、CSV、Blackhole.....
|
22天前
|
关系型数据库 MySQL 数据库
postgresql使用mysql_fdw连接mysql
通过以上步骤,你可以在PostgreSQL中访问和查询远程MySQL服务器的数据,这对于数据集成和多数据库管理非常有用。
43 0
|
26天前
|
关系型数据库 MySQL 数据库
探究数据库开源协议:PostgreSQL vs MySQL
探究数据库开源协议:PostgreSQL vs MySQL
|
3月前
|
存储 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
64 7
|
3月前
|
缓存 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
83 3
|
3月前
|
SQL 关系型数据库 数据库
nacos 2.2.3版本 查看配置文件的历史版本的接口 是针对MySQL数据库的sql 改成postgresql后 sql语句报错 该怎么解决
在Nacos 2.2.3中切换到PostgreSQL后,执行配置文件历史版本分页查询出错,因`LIMIT 0, 10`语法不被PostgreSQL支持,需改为`LIMIT 10 OFFSET 0`。仅当存在历史版本时报错。解决方案是调整查询SQL以兼容PostgreSQL语法。
|
3月前
|
存储 关系型数据库 MySQL
mysql的InnoDB引擎实现ACID特性的原理
mysql的InnoDB引擎实现ACID特性的原理

相关产品

  • 云数据库 RDS
  • 云数据库 RDS PostgreSQL 版
  • 云数据库 RDS MySQL 版