按关键词阅读:
作为基础软件皇冠上的明珠,数据库技术一直以来都是开发者关注的焦点。这关注度是如此之高,几乎自然打通了学界和产业界的隔阂,以至于关于数据库技术的每一篇重要论文面世,都可能导致一批价值数十亿美金的公司出现。
而在最近几年,纵观整个数据库产业,云数据库逐渐成为焦点中的焦点。据 Gartner, Inc 称,到 2022 年,所有数据库中有 75% 将部署或迁移到云平台,只有 5% 曾考虑返回到本地。而 IDC 认为,到 2025 年,全球超过 50% 的数据库将部署在公有云上;在中国市场,这个数据更为夸张,达到了 70% 以上。
文章插图
那么问题来了,如果云数据库,或者叫云原生数据库,是确凿无疑的下一个风口。那么其当下主要的技术和发展方向是什么?我们该如何看待云原生数据库的发展趋势?亚马逊云科技在 2020 年发布的 Babelfish 或许能够带给我们一些启发。
1.Babelfish,一个被人低估的重磅发布
Babelfish 在 2020 年的 re:Invent 上发布,由亚马逊云科技 CEO Andy Jassy 宣布。
简单来说,Babelfish 是云数据库 Amazon Aurora PostgreSQL 的一个插件,它让 Aurora 能够兼容 Microsoft SQL Server 编写的应用程序。
Babelfish 刚刚发布,Youtube 上就有许多工程师制作视频表达了不理解。因为自打云数据库出现,相关迁移服务就在产业内随处可见,几乎每一家公有云企业,都能提供相关迁移服务,只不过大部分是针对 Oracle 的。有一家叫做 Enterprise DB 的美国,专门提供从 Oracle 到 PostgreSQL 的迁移服务。相关代理层、SQL 语言转换工具更是层出不穷。
事实上,亚马逊云科技自己就有相关的迁移服务,比如 Amazon Schema Convertion Tool 做架构迁移,Amazon Database Migration Service 做存储迁移。
那么,Babelfish 存在的意义是什么呢?多加一层代理增加后端处理成本吗?
实际上,只迁移架构和存储是不完整的,构建在数据库之上的应用还没有完成迁移。以 Babelfish 服务的场景来说,基于 Microsoft SQL Server 构建的应用使用 T-SQL 与数据库交互,这与 PostgreSQL 完全是两码事。如果你想将应用也同步迁移,除非把这部分重写一遍。
这也让数据库迁移成为了业内非常少见的动作,不是大家不想(毕竟谁也没法保证最初的架构选型永远正确),但成本实在是太高。
这种迁移成本,我们可以通过一套比较通用的迁移方案来感受下:
文章插图
比起这种沉重的迁移,如果数据库天生兼容,是不是方便太多了?这也是 Babelfish 存在最主要的意义。
而许多人,会低估 Babelfish ,可能也是因为只看见了其商业层面的意义,而没有注意到其技术层面的难度。
Oracle 和 PostgreSQL,许多特性相同,转换尚且困难;切换到 T-SQL 和 PostgreSQL 就更加复杂了。数据库的同步转换要注意许多异常复杂的细节问题,包括查询语言的转换,存储过程的转换,静态游标的转换,触发器的转换,等等。
文章插图
亚马逊云科技 的 Sébastien Stormacq 曾在发布的博客中指出,在 T-SQL 中,MONEY 类型具有四位小数精度, PostgreSQL 则只有两位小数精度,这种细微的差异可能会导致四舍五入错误,并对下游流程(例如财务报告)产生重大影响。
他说:“在这种情况下,Babelfish 会确保保留了 SQL Server 数据类型的语义和 T-SQL 功能:我们创建了一个 MONEY 数据类型,使其行为与 SQL Server 应用程序预期的一样。”
Babelfish 的方案是用 hooks(钩子)方法在 PostgreSQL 内置引擎中实现,将自己暴露为不同的数据库(否则就只能修改 PostgreSQL 许多核心区域的代码),其架构图如下:
文章插图
精妙之处在于,通过数据库内核部分执行器层面的扩展开发,Babelfish 实现了 T-SQL 与 pgSQL 之间的互相调用。也就是说,新写 PostgreSQL 代码可以调用之前应用写的 SQL Server 代码。对于写过存储过程的朋友们来说,这个功能已经和 Babelfish 的名字一样,带上“科幻”色彩了。即便已经使用了最硬核的实现方式, Babelfish 也没有完全实现兼容,ADD SIGNATURE 等一些功能、语法还没有实现。亚马逊官方工程师说:“SQL Server 已经发展了 30 多年,我们不希望立即支持所有功能。相反,我们专注于最常见的 T-SQL 命令并返回正确的响应或错误消息。”
稿源:(创业邦)
【傻大方】网址:/c/1201b0SR021.html
标题:一个 Babelfish ,看懂云数据库的发展方向