(前面由于个人事情较多,所以暂停了博客,现在继续)。
由于PG本身就是个庞大的基础软件,ppg_fdw调用了大量的PG内部的接口,因此很难一行行代码来介绍(上周一个QA同事让我给他讲解代码,被善意的拒绝了。主要是觉得这个完全不可行,因为本身代码比较凌乱,使用了PG的hook机制,目前关于这方面资料比较少,如果没有这方面的基础,很难理解)。因此,在这里,将简单的介绍整体的架构,并且通过TPCH的实例来讲解基本的思想。
目前,就分布式数据库或是数据仓库来说,扩展能力比较强的就属shared-noting (SN)的架构了。例如mysql cluster以及比较著名的Teradata。(也有人会说还有O记的某款,这里只能呵呵了,其实他是shared-disk的,具体效果去问某东吧)。SN架构在上个世纪就被普遍看好,大家有兴趣可以用google scholar搜索。其实鼻祖要数Wisconsin 的gamma系统,研究人员借助这个系统研究了一系列的算法,比如最经典的分布式join算法,可以搜搜看。时下出现了一系列的mpp系统,例如AsterData、GreenPlum、HadoopDB等,虽然看起来十分高大上,其实追本溯源,万变不离其宗。
一般来说,这类系统一般有一个分布式的查询引擎,后端有若干个能执行operator的节点,暂且把前者称为DQP(Distributed Query Processor),后者称为 OP (operator Processor),二者之间可以通过约定的协议通信。简单来说如下所示:
DQP接到一条SQL之后,会经历词法语法分析,查询改写之后,在优化器中生成查询计划。查询计划包括两部分,简单来说,一部分是下推到各个OP上的子计划,一部分是需要在某台上执行的全局operator,最典型的就是agg,当然在某些情况下没有全局operator。对于一个并行系统来说,最重要的考评指标就是加速比了,加速比直接反映了系统的扩展能力。根据阿达姆定律,决定系统的加速比最关键的因素是任务的串行部分。串行部分任务越少,并行任务就越多,系统的扩展能力就越强。而对于一个DQP来说,优化能力越强,下推到OP上的operator越多。
DQP在选择最优查询计划时,一般采用两阶段的优化方式:为全局的operators生成最优的查询计划,对于子查询则下推给OP,让各个OP在本地并行的生成局部最优plan。
好了,在说了一堆理论之后,就此打住(主要是理论的东西太多了,有兴趣自己去看吧),回到ppg_fdw的话题上来。下图是ppg_fdw的处理SQL工作流程:
前面已经描述过PG处理查询SQL的流程,这里就不重复了。对比pg处理SQL的流程来说,ppg_fdw主要的变化时,使用ppg_planner生成了分布式查询计划,查询计划的每个叶子节点都是ppg_fdw的scan接口。DQP通过ppg_fdw的接口将子查询以SQL的形式发给后台的OP(实际就是pgsql节点),OP并行运行SQL之后将结果返回给ppg_fdw的scan节点。
具体说来,ppg_planner的工作主要就是尽可能将operator(project, filter, agg)下推给后台的OP。ppg_planner的输入就是PG中的Query这个数据结构,在pull_up了sublink和subquery之后,使用启发式规则生成全局plan,将能下推的操作deparse生成SQL之后,作为ppg_fdw的scan节点的输入参数。整个的全局计划的叶子节点就是ppg_fdw的scan节点,就是一个foreign_scan节点。
在处理scan的过程中,ppg_fdw主要有四个接口负责处理和OP交互:
postgresBeginForeignScan,
postgresIterateForeignScan,
postgresReScanForeignScan,
postgresEndForeignScan,
其中postgresBeginForeignScan 在整个查询计划初始化被调用,主要负责一些初始化工作,例如申请局部的memcontex、从元信息中解析需要连接的后台的PGSQL的用户名密码等;postgresIterateForeignScan负责从后台的PGSQL获取一条记录,如果没有返回空;postgresReScanForeignScan暂时在ppg_fdw中没有实现,主要是做sublan时使用,To Be Done;postgresEndForeignScan在结束对后台的pgsql时被调用,主要是清理和节点相关的资源等。
- 大小: 28.3 KB
- 大小: 46.6 KB
分享到:
相关推荐
ppg_fdw A distributed parallel query engine, based on fdw and hooks of PG.Our idea is to create a shared-nothing system, which is composed many pgsql servers. For these pgsql servers, one server (we ...
标题中的"datasrc_PPG.rar_PPG信号_datasrc_PPG_ppg data download_心电PPG信号_心电信"揭示了这是一个与心电图(ECG)和光体积描记术(Photoplethysmography,简称PPG)信号相关的数据资源。PPG是一种非侵入性的...
本压缩包文件“PPG_features-master_welcomee1m_ppg特征提取_PPG信号处理_PPG信号处理代码_PPG_”主要包含了与PPG信号预处理和特征提取相关的代码资源,适合学习和参考。 首先,我们来了解PPG信号的基本原理。PPG...
《PyPI官网下载:ppg_common-1.14.tar.gz——Python库在分布式环境中的应用》 在Python的世界里,PyPI(Python Package Index)是开发者们分享和获取开源软件包的重要平台。"ppg_common-1.14.tar.gz"就是这样一个...
标签中的"ppg"、"ppg_hr"、"ppg_matlab"、"the_signal"和"matlab_ppg"是关键主题标签,它们分别对应PPG技术、心率估算、使用MATLAB进行PPG处理、信号本身以及MATLAB中处理PPG的代码。 在压缩包的文件名列表中,只有...
接下来,代码可能会使用某种算法来检测PPG信号中的峰值,这些峰值对应于心脏的搏动,进而计算出心率。常见的峰值检测算法有阈值法、模板匹配法、导数法等。 在剧烈运动场景下,心率估算的准确性至关重要。因此,该...
标题中的"bandpass.zip_PPG_PPG信号_matlab 特征提取 信号处理_ppg特征提取_波峰"表明这是一个关于PPG(光电容积描记术)信号处理的项目,其中包含了使用MATLAB进行特征提取,特别是识别波峰的重要环节。在PPG信号...
`.whl`是一种预编译的Python软件包格式,旨在简化安装过程,使得用户能够在不依赖于构建环境的情况下快速部署和使用库。 首先,我们来看`ppg_common`这个名字,"ppg"可能是“Python编程通用”或项目特定的缩写,而...
资源分类:Python库 所属语言:Python 资源全名:ppg_common-1.39.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
《PPG.rar:PPG_The Power——C++实现的简单游戏解析》 "PPG.rar_PPG_The Power" 是一个以C++语言编写的简单游戏,它以美国动画片《飞天小女警》(Powerpuff Girls,简称PPG)为主题,为玩家提供了一次重温经典的...
标签进一步强调了主题,"ecg_and_ppg"表示同时涉及ECG和PPG的分析,"ppg_matlab"表明使用MATLAB处理PPG数据,而"the_signal"可能指的是信号处理的一般概念。 压缩包内的文件名为"Signal",很可能包含的是原始信号...
标题中的“PPG.rar_PPG_footel7_fujitsu_thou785_单片机ppg”揭示了我们正在处理一个与富士通(Fujitsu)单片机相关的项目,具体是关于心率监测的光电容积脉搏波(PPG)功能。这个项目可能涉及到一个名为“footel7”...
《PPG.zip - PPG_The Power》是一个基于C++编程语言开发的简单游戏,它以流行的卡通《神奇女侠》(Powerpuff Girls)为主题。这款游戏可能旨在重现动画片中的角色和故事情节,为玩家提供一种互动式的娱乐体验。 在...
This_data_set_records_the_blood_glucose_and_PPG_da_glucose-PPG-data-set
workshopios_ppg:塞米纳里奥斯(Resinhas dos encontros)
标题中的"yangben1.rar_PPG_yangben1_人体_脉_脉象"表明这是一个与PPG(光体积描记法)相关的数据集,主要关注人体的脉象研究。脉象在中国传统医学中是非常重要的诊断手段,它涉及到中医对人体健康状态的判断。在这...
信道预测matlab代码袖带血压预测 该存储库托管使用两种方法根据ECG和PPG信号预测血压的代码。 使用机器学习方法进行特征提取和回归。 基于深度学习的回归。 入门: 克隆此仓库: git clone ...数据集: ...
引用来源:如果你使用这个数据集,请参考 环境 原始源是在 Matlab 2016a 中开发的。 建议使用同等或更高版本。 此应用程序使用以下 Matlab 工具箱: 下载 该应用程序可以通过 Matlab 中的内置工具下载。 如何跑步 该...
文件"Keysight_PXI_Digitizer_PPG-main"可能包含了驱动程序的安装文件、使用手册、示例代码或者配置文件,这些都是为了帮助用户顺利安装和使用Keysight PXI Digitizer与Labber的接口。在实际操作中,用户应按照文档...
标题 "Sensor_ECG_PPG_MAX86150_Dev-Board-master.zip" 提供了有关此压缩包的核心信息:它包含一个与MAX86150传感器相关的EKG(心电图)和PPG(光电容积描记法)开发板的项目。MAX86150是一款集成的心率和血氧饱和度...