PG&GP · 特性分析 · 外部数据导入接口实现分析

简介: 背景 社区 PostgreSQL 和 GreenPlum 都提供了读写外部数据源的方法,它们都提供了一套编程接口,用户可以在这上面做二次开发,建立外部数据源和数据库间的数据通道。 本文介绍 PostgreSQL 和 GreenPlum 这部分编程接口的实现和编程方法。结合 RDS 开发的 oss

背景

社区 PostgreSQL 和 GreenPlum 都提供了读写外部数据源的方法,它们都提供了一套编程接口,用户可以在这上面做二次开发,建立外部数据源和数据库间的数据通道。
本文介绍 PostgreSQL 和 GreenPlum 这部分编程接口的实现和编程方法。结合 RDS 开发的 oss_ext 接口。展示外部数据源接口的能力。

PostgreSQL FDW

FDW 的全称是 foreign-data wrapper,是一套读写外部数据源的编程接口。它提供了多个回调函数编程接口,开发者可以逐一实现这些接口,封装成动态库,然后加载到内核中使用。
下面逐一介绍下这套编程接口

1 扫描类接口

  1. GetForeignRelSize_function GetForeignRelSize;

    返回给数据库对应数据源的规模信息

  2. GetForeignPaths_function GetForeignPaths;

    优化器接口,提供对应数据源的查询路径。

  3. GetForeignPlan_function GetForeignPlan;

    优化器接口,提供对应数据源的查询计划。

  4. BeginForeignScan_function BeginForeignScan;

    执行器接口,外部表扫描开始的准备工作。

  5. IterateForeignScan_function IterateForeignScan;

    执行器接口,外部表扫描实现,一次返回一个 tuple slot。

  6. ReScanForeignScan_function ReScanForeignScan;

    执行器接口,外部表扫描节点重新开始,重置所有状态参数和内存结构。

  7. EndForeignScan_function EndForeignScan;

    执行器接口,外部表扫描节点结束,释放资源。

2 更新数据接口

  1. AddForeignUpdateTargets_function AddForeignUpdateTargets;

    构造要更新的外部数据源的目标列信息

  2. PlanForeignModify_function PlanForeignModify;

    构造外部数据源修改的(包括insert update delete的)的数据结构

  3. BeginForeignModify_function BeginForeignModify;

    执行器接口,数据更新节点的数据准备

  4. ExecForeignInsert_function ExecForeignInsert;

    执行器接口,insert 一行数据

  5. ExecForeignUpdate_function ExecForeignUpdate;

    执行器接口,update 一行数据

  6. ExecForeignDelete_function ExecForeignDelete;

    执行器接口,delete 一行数据

  7. EndForeignModify_function EndForeignModify;

    执行器接口,修改结束,释放相关资源

  8. IsForeignRelUpdatable_function IsForeignRelUpdatable;

    执行器接口,修改结束,释放相关资源

3 查询计划展示接口

  1. ExplainForeignScan_function ExplainForeignScan;

    展示扫描节点的相关信息

  2. ExplainForeignModify_function ExplainForeignModify;

    展示修改数据节点的相关信息

4 外部数据源统计信息接口

  1. AnalyzeForeignTable_function AnalyzeForeignTable;

    分析外部数据的数据分布状况接口

总结

  1. 用户可以根据需求实现他们,如只需要读取数据,则不用实现第二部分;
  2. 除了支持读取数据相关接口,还支持了对统计信息的接入。这样,PostgreSQL 真正的把外部数据源当作了“表”。考虑到了数据的规模,使得优化器合理的规划了外部表的执行路径。和执行阶段执行器深度结合。整套接口设计清晰分工明确;
  3. 这套接口的实现可以参考已经实现的 PostgreSQL_FDW

GreenPlum external table

GreenPlum external table 和 PostgreSQL FDW 的区别

GreenPlum external table 在实现上和 PostgreSQL FDW 完全不同,有自己的特点:

  1. GreenPlum 只提供了两个对外的接口 readfunc 和 writefunc;
  2. GreenPlum external table 接口和内核交互的的内容是数据块,而 PostgreSQL FDW 是 tuple slot。
    也就是说,通过 PostgreSQL FDW 需要把外部数据源做完整的行列解析,而 GreenPlum external table 则不同;
  3. 最大的不同 GreenPlum external table 执行过程中是驱动 segment 工作,可以通过这个接口让所有 segment 同时并行工作并行读写数据,大大提高了整个集群的性能;
  4. GreenPlum external table 没有像 PostgreSQL FDW 那样的读取统计信息,并提供给优化器的接口,在复杂查询场景下使用 GreenPlum external table 可能查询计划不是最优的;

GreenPlum external table 接口

  1. readfunc

    按数据块读取数据

  2. writefunc

    按数据块写数据

从 oss 读取数据

基于上述编程接口,我们开发了一套用于从 oss 导入数据到 GreenPlum 和 PostgreSQL 的插件,性能杠杠的。帮助云上用户更好的使用 RDS 数据库产品。

从 oss 导入数据到 GreenPlum

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
目录
相关文章
|
开发工具 git
iterm2 oh-my-zsh 自动提示命令
iterm2 oh-my-zsh 自动提示命令
iterm2 oh-my-zsh 自动提示命令
|
8月前
|
域名解析 网络协议 安全
DNS服务器地址大全
DNS(域名系统)是互联网的“电话簿”,将域名解析为IP地址。选择优质DNS服务器可提升网络速度、降低延迟。以下是全球及中国各运营商的DNS服务器列表,包括公共DNS(如Google DNS、Cloudflare DNS)、中国电信、联通、移动等。根据地理位置、稳定性、安全性与隐私保护等因素选择适合的DNS服务器,优化上网体验。
22719 6
|
6月前
|
前端开发 JavaScript 网络安全
Web网页端即时通讯源码/IM聊天源码RainbowChat-Web
RainbowChat-Web是一套基于MobileIMSDK-Web的网页端IM系统。不同于市面上某些开源练手或淘宝售卖的demo级代码,RainbowChat-Web的产品级代码演化自真正运营过的商业产品,其所依赖的通信层核心SDK已在数年内经过大量客户及其辐射的最终用户的使用和验证。RainbowChat-Web同时也是移动端IM应用RainbowChat的姊妹产品。
204 0
|
5月前
|
缓存 移动开发 网络协议
纯血鸿蒙NEXT即时通讯/IM系统:RinbowTalk正式发布,全源码、纯ArkTS编写
RainbowTalk是一套基于MobileIMSDK的产品级鸿蒙NEXT端IM系统,目前已正式发布。纯ArkTS、从零编写,无套壳、没走捷径,每一行代码都够“纯”(详见:《RainbowTalk详细介绍》)。 MobileIMSDK是一整套开源IM即时通讯框架,历经10年,超轻量级、高度提炼,一套API优雅支持 UDP 、TCP 、WebSocket 三种协议,支持 iOS、Android、H5、标准Java、小程序、Uniapp、鸿蒙NEXT,服务端基于Netty编写。
372 1
|
7月前
|
存储 安全 Ubuntu
从Linux到Windows:阿里云服务器系统镜像适配场景与选择参考
阿里云为用户提供了丰富多样的服务器操作系统选择,以满足不同场景下的应用需求。目前,云服务器的操作系统镜像主要分为公共镜像、自定义镜像、共享镜像、镜像市场和社区镜像五大类。以下是对这些镜像类型的详细介绍及选择云服务器系统时需要考虑的因素,以供参考。
|
9月前
|
监控 Linux
Linux基础:文件和目录类命令分析。
总的来说,这些基础命令,像是Linux中藏匿的小矮人,每一次我们使用他们,他们就把我们的指令准确的传递给Linux,让我们的指令变为现实。所以,现在就开始你的Linux之旅,挥动你的命令之剑,探索这个充满神秘而又奇妙的世界吧!
172 19
|
9月前
|
存储 运维 监控
深度体验阿里云系统控制台:SysOM 让 Linux 服务器监控变得如此简单
作为一名经历过无数个凌晨三点被服务器报警电话惊醒的运维工程师,我对监控工具有着近乎苛刻的要求。记得去年那次大型活动,我们的主站流量暴增,服务器内存莫名其妙地飙升到90%以上,却找不到原因。如果当时有一款像阿里云 SysOM 这样直观的监控工具,也许我就不用熬通宵排查问题了。今天,我想分享一下我使用 SysOM 的亲身体验,特别是它那令人印象深刻的内存诊断功能。
342 1
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
Linux Perl
在Linux中,系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
在Linux中,系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
|
XML 存储 网络协议
在Linux中,如何使用Wireshark进行网络协议分析?
在Linux中,如何使用Wireshark进行网络协议分析?