searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

postgres的外部数据访问介绍

2024-09-29 09:55:15
9
0
postgres FDW(foreign data wrapper),是专门用来访问外部存储的机制。统一将所有的外部存储访问都以外部表的方式进行访问。对于执行器来说,都是调用统一的存储访问接口。对执行器和优化器是屏蔽具体的访问介质的。
 
不论是内部和外部存储介质,要通过查询计划进行访问,都是以表扫描的形式接入执行计划的。需要在优化器和执行器阶段实现对应的功能接口。主要参与执行器计划的接口如下:
 
优化器阶段:
query_planner
    make_one_rel
        set_base_rel_sizes
        set_base_rel_pathlists
create_plan
    create_scan_plan
 
执行器阶段:
execute_plan
    begin_scan
    execute_scan
    end_scan

在优化器阶段,产生对应的执行计划,执行器根据执行计划进行执行即可,执行阶段为三段式,begin,execute和end。外表和内表在这里是相同的,每个阶段的具体功能如下:

优化器阶段

1、表大小计算,行数,宽度,页面数等

2、路径生成和代价计算

3、执行计划创建

执行阶段 :

1、beginScan 初始化数据访问条件,内表打开对应的数据文件,构建tuple描述等 外表需要建立和外部存储的连接

2、executeScan 内表行级读取数据 外表批量加载数据,行级返回

3、endScan 内表清理文件,描述等 外表关闭连接

 

对于外表的访问:

1、begin阶段,获取外部存储的链接信息,并建立链接

2、execute阶段,访问该链接并获取文件列表,逐行数据进行读取和解析数据,转换为内核可识别格式

3、end阶段,清理链接

 

对应postgres FDW的接口如下

使用者只需要实现上述对应的接口,将对外部数据的连接,读取,格式转换等操作放在执行器的三阶段中,即可方便的实现对外部数据的访问,postgres通过FDW实现了很好的外部数据抽象机制,所有的外部数据类型在数据库内核中都被当做foreign scan来进行,屏蔽掉了具体的连接方式和数据转换细节,非常方便易用。

0条评论
0 / 1000
c****e
2文章数
0粉丝数
c****e
2 文章 | 0 粉丝
c****e
2文章数
0粉丝数
c****e
2 文章 | 0 粉丝
原创

postgres的外部数据访问介绍

2024-09-29 09:55:15
9
0
postgres FDW(foreign data wrapper),是专门用来访问外部存储的机制。统一将所有的外部存储访问都以外部表的方式进行访问。对于执行器来说,都是调用统一的存储访问接口。对执行器和优化器是屏蔽具体的访问介质的。
 
不论是内部和外部存储介质,要通过查询计划进行访问,都是以表扫描的形式接入执行计划的。需要在优化器和执行器阶段实现对应的功能接口。主要参与执行器计划的接口如下:
 
优化器阶段:
query_planner
    make_one_rel
        set_base_rel_sizes
        set_base_rel_pathlists
create_plan
    create_scan_plan
 
执行器阶段:
execute_plan
    begin_scan
    execute_scan
    end_scan

在优化器阶段,产生对应的执行计划,执行器根据执行计划进行执行即可,执行阶段为三段式,begin,execute和end。外表和内表在这里是相同的,每个阶段的具体功能如下:

优化器阶段

1、表大小计算,行数,宽度,页面数等

2、路径生成和代价计算

3、执行计划创建

执行阶段 :

1、beginScan 初始化数据访问条件,内表打开对应的数据文件,构建tuple描述等 外表需要建立和外部存储的连接

2、executeScan 内表行级读取数据 外表批量加载数据,行级返回

3、endScan 内表清理文件,描述等 外表关闭连接

 

对于外表的访问:

1、begin阶段,获取外部存储的链接信息,并建立链接

2、execute阶段,访问该链接并获取文件列表,逐行数据进行读取和解析数据,转换为内核可识别格式

3、end阶段,清理链接

 

对应postgres FDW的接口如下

使用者只需要实现上述对应的接口,将对外部数据的连接,读取,格式转换等操作放在执行器的三阶段中,即可方便的实现对外部数据的访问,postgres通过FDW实现了很好的外部数据抽象机制,所有的外部数据类型在数据库内核中都被当做foreign scan来进行,屏蔽掉了具体的连接方式和数据转换细节,非常方便易用。

文章来自个人专栏
执行器技术
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0