咱们许多客户都示意不心愿与商用数据库供应商单干,从而防止低廉的老本开销以及繁琐的许可条款。然而,从新式商用数据库迁徙进去可能须要消耗大量工夫和资源。迁徙数据库时,可应用 AWS Schema Conversation Tool 和 AWS Database Migration Service 主动迁徙数据库模式和数据。然而,迁徙应用程序自身须要实现更多的工作量,包含重写与数据库交互的利用程序代码。主动性足够,但老本和危险往往是限制性因素。
现在,Babelfish for Aurora PostgreSQL 问世。有了 Babelfish,Amazon Aurora PostgreSQL 兼容版将可能了解 SQL Server 线路协定。这一工具让您以更低的老本、更快的速度将 SQL Server 应用程序迁徙到 PostgreSQL,迁徙相干危险也更小。
在传统迁徙所需的一部分工夫内就可迁徙完应用程序。您将持续应用应用程序目前所用的现有查问和驱动程序。只需将应用程序指向已激活 Babelfish 的 Amazon Aurora PostgreSQL 数据库即可。应用 Babelfish,Amazon Aurora PostgreSQL 将能了解 SQL Server 线路协定表格数据流 (TDS),并使 PostgreSQL 可能了解 SQL Server 应用的罕用 T-SQL 命令。对 T-SQL 的反对包含 SQL 方言、动态游标、数据类型、触发器、存储过程和函数等元素。Babelfish 显著缩小了应用程序所需的更改次数,从而升高了与数据库迁徙我的项目相干的危险。采纳 Babelfish 可节俭应用 SQL Server 时的许可老本。Amazon Aurora 能够实现商用数据库的安全性、可用性和可靠性,而老本只有商用数据库的十分之一。
尽管 SQL Server 曾经倒退了 30 多年,但咱们预计它短期内也不会反对所有性能。然而,咱们将专一于最常见的 T-SQL 命令并返回正确的响应或谬误音讯。例如,在 SQL Server(精度为四位小数)和 PostgreSQL(精度为两位小数)中,MONEY 数据类型具备不同的特色。这种轻微的差异可能会导致四舍五入的谬误,并对财务报告等上游流程产生重大影响。在这种状况以及许多其余状况下,Babelfish 将确保保留 SQL Server 数据类型的语义和 T-SQL 性能:咱们创立了一个其行为合乎 SQL Server 应用程序要求的 MONEY
数据类型。通过 Babelfish 连贯创立具备此数据类型的表时,将取得合乎 SQL Server 应用程序要求的此兼容数据类型和行为。
应用控制台创立 Babelfish 集群
为了展现 Babelfish 的工作原理,咱们首先连贯到控制台并创立新的 Amazon Aurora PostgreSQL 集群。该过程与惯例 Amazon Aurora 数据库的过程没有区别。在 RDS Launch Wizard 中,首先要确保抉择与 PostgreSQL 13.4 兼容的 Aurora 版本或更新版本。更新后的控制台具备附加筛选器,可帮忙抉择与 Babelfish 兼容的版本。
而后,在页面下方,抉择选项关上 Babelfish。
在监控局部,还要确保敞开了启用加强监控。此选项须要另外的 IAM 权限和筹备工作(本演示中未介绍)。
几分钟后,集群创立结束,其中包含两个实例,一个写入器和一个读取器。
应用 CLI 创立 Babelfish 集群
或者,能够应用 CLI 创立集群。首先创立参数组来激活 Babelfish(控制台会主动执行):
Zsh
aws rds create-db-cluster-parameter-group \
--db-cluster-parameter-group-name myapp-babelfish \
--db-parameter-group-family aurora-postgresql13 \
--description "babelfish APG 13"
aws rds modify-db-cluster-parameter-group \
--db-cluster-parameter-group-name myapp-babelfish \
--parameters "ParameterName=rds.babelfish_status,ParameterValue=on,ApplyMethod=pending-reboot" \
而后创立数据库集群(应用上面的命令时,调整平安组 ID 和子网组名称):
Zsh
aws rds create-db-cluster \
--db-cluster-identifier awsnewblog-cli-demo \
--master-username postgres \
--master-user-password Passw0rd \
--engine aurora-postgresql \
--engine-version 13.4 \
--vpc-security-group-ids sg-abcd1234 \
--db-subnet-group-name default-vpc-1234abcd \
--db-cluster-parameter-group-name myapp-babelfish
{
"DBCluster": {
"AllocatedStorage": 1,
"AvailabilityZones": [
"us-east-1c",
"us-east-1d",
"us-east-1a"
],
"BackupRetentionPeriod": 1,
"DBClusterIdentifier": "awsnewblog-cli-demo",
"Status": "creating",
... <redacted for brevity> ...
}
}
创立集群后,应用以下命令创立实例
Zsh
aws rds create-db-instance \
--db-instance-identifier myapp-db1 \
--db-instance-class db.r5.4xlarge \
--db-subnet-group-name default-vpc-1234abcd \
--db-cluster-identifier awsnewblog-cli-demo \
--engine aurora-postgresql
{
"DBInstance": {
"DBInstanceIdentifier": "myapp-db1",
"DBInstanceClass": "db.r5.4xlarge",
"Engine": "aurora-postgresql",
"DBInstanceStatus": "creating",
... <redacted for brevity> ...
连贯到 Babelfish 集群
集群和实例准备就绪后,将与写入器实例连贯以创立数据库自身。能够应用 SQL Server Management Studio (SSMS) 或其余 SQL 客户端(如 sqlcmd
)连贯到实例。Windows 客户端必须可能连贯到 Babelfish 集群,确保 RDS 平安组受权来自 Windows 主机的连贯。
在 Windows 上应用 SSMS 时,在工具栏中抉择新查问,而后输出数据库 DNS 名称,并将其作为服务器名称。抉择 SQL Server 身份验证,而后输出数据库登录名和明码。点击连贯。
重要提醒:请勿通过 SSMS 对象资源管理器进行连贯。请务必通过新查问按钮应用查问编辑器进行连贯。目前,Babelfish 反对查问编辑器,但不反对对象资源管理器。
连贯后,应用 select @@version
语句查看版本,而后点击工具栏中的绿色执行按钮。浏览屏幕底部的语句查看后果。
最初,应用 create database demo
语句在实例上创立数据库。
默认状况下,Babelfish 在单数据库模式下运行。在这种模式下,每个实例最多能够有一个用户数据库。这种状况容许在 SQL Server 和 PostgreSQL 之间建设一个严密的模式名称映射。或者,能够在创立集群时关上多数据库模式。这一操作可让您为每个实例创立多个用户数据库。在 PostgreSQL 中,用户数据库被映射到多个模式,并将数据库名称作为前缀。
运行应用程序
为了演示,将应用 SQLServerTutorial.net 提供的数据库模式作为其 SQL Server 教程的一部分来创立模式并用数据填充。在此演示中应用的 SQL 脚本和应用程序 C# 代码可在我的 GitHub 存储库中找到。非常感谢共事 Auja 提供 C# 演示应用程序。
在 SQL Server Management Studio 中,关上 create_objects.sql 脚本,而后抉择顶部工具栏上的绿色执行图标。呈现一条确认音讯提醒数据库模式已创立。
应用 load_data.sql 脚本反复此操作,以便在新创建的表中加载数据。数据加载须要几分钟能力运行。
当初数据库曾经加载结束,关上 Auja 提供的为拜访 SQL Server 数据库而开发的 C# 应用程序。批改两行代码:
- 第 12 行:键入之前创立的 Babelfish 集群的 DNS 名称。请留神,应用了集群中“写入”节点的 DNS 名称。
- 第 15 行:键入创立数据库集群时输出的明码。
就是这么简略!此应用程序无需进行其余批改。这段用于查问和与 SQL Server 交互而编写的代码只是在应用了 Babelfish 的 Aurora PostgreSQL 上按原样工作。
开源透明度
咱们决定对 Babelfish 背地的技术开源以创立适宜 PostgreSQL 的 Babelfish 开源我的项目。它将应用宽松的 Apache 2.0 和 PostgreSQL 许可证,这意味着能够依照本人认为适合的形式批改、调整或散发 Babelfish。随着工夫的推移,咱们正在将 Babelfish 转为在 GitHub 上全凋谢开发,因而从一开始就非常通明。现在,无论您是不是 AWS 客户,任何人都能够应用 Babelfish 代替 SQL Server,疾速、轻松且经济高效地将应用程序迁徙到开源 PostgreSQL。咱们置信,Babelfish 将让更宽泛的客户和开发人员可能应用 PostgreSQL,尤其是那些最后为 SQL Server 编写了大量简单应用程序的客户和开发人员。
可用性
实用于 Aurora PostgreSQL 的 Babelfish 已在所有公开可用的 AWS 区域上市,不收取额定费用。立刻开始应用程序迁徙吧。
– seb
PS:如果想晓得 Babelfish 这个名字的由来,请记住答案是 42。(或者能够浏览这个稍长的答案。)
Database Minisite“AWS 云原生数据库”