FDW(Foreign Data Wrapper)是PolarDB数据库提供的与异构数据库进行数据交流的方式,可以通过FDW对异构数据库进行数据访问,类似于Oracle的DBLink,但FDW的功能更强大。
当前,数据库国产化是一个大趋势。将数据从Oracle迁移到国产数据库,通过FDW可轻松实现。但很多开发者在原来的Oracle数据库上使用了包存储,迁移时涉及到应用、开发上的修改,难度极大,甚至可能还需要开发新的适合国产数据库的业务。
FDW的访问与本地访问一致,不管远程数据库是PG、MySQL还是Oracle,通过select count(*) From即可实现访问。
上图为FDW的执行流程。
SQL语句执行前需要进行解析,访问FDW表也同理,PolarDB会对SQL进行解析。数据表放在另外的数据库,因此PolarDB需要查询数据字典,确认当前表的创建方式,判断其是否为外部表。如果是,还需查看外部表所在的服务器以及用户mapping。随后,产生执行计划,再将要执行的SQL语句传到远程服务器,最后将结果返回到本地。
总结来看,FDW的执行流程分为以下几步:
a) 创建查询树。
b) 连到远程服务器查看是否存在表及其权限。
c) 本地优化器创建执行计划。
d) 根据优化器的执行计划再还原成文本的SQL语句,将SQL语句传到远程。不同的异构数据库语法存在差异,此处会转成异构数据库能够兼容的语法。
e) 远程服务器执行SQL语句,将结果返回给本地。
接下篇:https://developer.aliyun.com/article/1223103?groupCode=polardbforpg