在前面的博文介绍了PG的hook和数据仓库的join算法之后,现在终于要推出干货了:ppg_fdw。(大家可以从githup:https://github.com/scarbrofair/ppg_fdw上下载代码和相关的简要说明文档)。
总的说来,ppg_fdw基于pgsql的hook和foreign data wrapper机制,力图使用透明的方式,使用PG构建一个mpp的数据仓库。目前,从数据仓库领域来说,普遍采用了mpp的结构。特别是greenplum和asterdata来说,更是很大程度采用了PG来构建一个分布式的并行数据仓库。(说起来,ppg_fdw这个项目其实是笔者5年前左右的一个idea,但是,在历经了诸多波折之后,笔者打算使用更加接近pg的风格来实现,并作为开源程序贡献出来。由于一个人摸黑写的,代码中借用了pg的一些代码,可能在代码中没有说明,希望大家能理解。当然,代码也只是简单的运行了TPCH测试集合,还存在很多bug,希望大家指正)。
下面是一些大家可能会问到的问题,笔者一一作答:
1,ppg_fdw能做什么?ppg_fdw力图使用多个PG构建一个mpp的数据仓库,来并行的加速OLAP。
2,ppg_fdw如何测试的?作为数据仓库的领域的基准测试集,TPCH无疑是最基础的,也是最有说服力的。ppg_fdw使用TPCH进行了功能测试,通过了绝大部分的测试SQL。可能有人会问为什么不是全部的SQL?
对于这个问题,需要仔细分析TPCH的数据集合和相应的测试SQL。TPCH的数据集合可以看做是一个雪花模型(星座模型):其中的orders和lineitem表比较大,是fact表, 其他的几个表比较小,是dimension 表。一般来说,可以将fact表适用主键进行水平分片,对于dimension 表则在各个节点上全复制(mpp数据仓库一般会采用这种方式来分发数据到各个节点)。在TPCH的SQL实例中,大部分涉及到了fact表的查询,需要对这些复杂查询进行agg下推和二次聚合,处理比较复杂。而另外的一些SQL则只涉及到dimension表的操作,可以直接将SQL转发到某个PG节点获得结果后返回给用户,处理比较简单,一般来说没有加速的必要,因此目前没有处理这些只查询dimension表的SQL。(其实主要是精力有限,不想为这些10%的简单需求分散精力。)
(之所以进行功能测试,主要是因为屌丝只有一台台式机,实在没有多的机器可以做性能测试。在公司也是用虚拟机搭建的测试环境,说起来都是泪~~~~(>_<)~~~~ 如果需要做性能测试,需要物理机进行测试才能反映实际的数据)
3,ppg_fdw目前处于什么状态?目前只能说处于beta版,只是简单的验证了原来的一个idea。基本上对于TPCH中大部分SQL可以做到并行加速。
4,ppg_fdw如何使用?(由于本人都是使用Linux环境,因此如何使用也只是针对Linux平台)
a,首先安装PGSQL在N个节点上,作为从节点,选择一个节点作为主节点。从节点上建立统一的账号和密码(postgres:postgres),允许远程访问。主节点上源代码安装PG9.0以上。之所以需要9.0版本以上,主要是需要一个支持foreign data wraper的PG版本,目前来看,需要9.0以上(包括9.0)。因为ppg_fdw调用了PG中的许多内部接口,因此也需要主节点上存在源码的编译环境。
b,在主节点上,在pg的源码目录的子目录contrib下建立子目录ppg_fdw,假设这个目录是~/postgres/contrib/ppg_fdw,将githup上代码下载到这个目录下。
c,在主节点上编译ppg_fdw代码得到动态库ppg_fdw.so:
make -C ~/postgres/contrib/ppg_fdw
d,在主节点上将ppg_fdw的SQL上SQL申明脚本和control脚本复制到pg的系统目录下:
cp ~/postgres/contrib/ppg_fdw/ppg_fdw--1.0.sql /usr/local/PG/share/postgresql/extension
~/postgres/contrib/ppg_fdw/ppg_fdw.control /usr/local/PG/share/postgresql/extension
(假设主节点上将PG安装在/usr/local/PG)
e,在主节点上,将ppg_fdw.so复制到PG的系统动态库下:
cp ~/postgres/contrib/ppg_fdw/ppg_fdw.so /usr/local/PG/lib/postgresql
f,在主节点的PG中,使用SQL建立基于ppg_fdw的虚拟server,并设置虚拟服务器的配置(主要是访问远程从PG用户名和密码):
CREATE SERVER testserver1 FOREIGN DATA WRAPPER ppg_fdw options (host 'localhost', dbname 'postgres', port '5430');
CREATE USER MAPPING FOR public SERVER testserver1 OPTIONS (user 'postgres', password 'postgres');
g,设置远程从PG节点的URL:
update pg_catalog.pg_foreign_server set srvoptions=array['host1=127.0.0.1:5430:postgres','host2=127.0.0.1:5431:postgres'] where srvname = 'testserver1';
(从节点两个PG实际上和主节点PG位于同一个机器上,但是分别使用了5430和5431这两个端口,database都是postgres。注意格式)
h,使用时,在主节点上建立foreign table,然后在从节点的public schema下建立schema相同的同名的普通table。(注意是public schema,主要是因为目前没有元信息的存储,远程从PG的表的schema都是写死的,为public)
j,在主节点上,使用load命令来加载ppg_fdw(这个是session级别的有效期),或是在配置文件中制定,这样PG启动的时候会加载。 查询这些foreign table,ppg_fdw会生成分布式查询计划,然后执行并返回结果。
5,ppg_fdw由哪些hook构成?
总的来说,ppg_fdw包括了2个hook:一个hook是查询优化器ppg_planner,基于rule的优化器;一个是foreign table wrapper,封装了对远程的PG节点的访问。
6,ppg_fdw下一步进行哪些改进的?
a,增加元数据的管理模块,例如存储表分信息,使得ppg_planner能直接下推查询。例如哪些是dimension table哪些是fact table,哪些字段是用来水平分片的字段。如果知道查询所涉及到的表都是dimension table 或是group by的字段就是 数据分片的字段,可以直接下推SQL到从节点,无需做二次聚集或是数据迁移。
b,对子查询的处理。对于关联子查询的支持,目前PG中关联子查询用SubPlan表示,SubPlan在运行时,需要从父节点输出的结果获得参数,然后将参数传给SubPlan的子节点(一般是rescan函数),然后调用某个scan来获得输出结果,并最终计算当期的expression的结果。因此后续需要修改ppg_fdw的foreign table的 rescan方法。
c,快速的数据迁移,目前在处理不相关子查询时,是为子查询建立新的临时表,然后将子查询的结果使用insert 语句插入远程从节点,这种方式速度比较慢,需要使用copy语句来加速。
分享到:
相关推荐
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是一款集成的心率和血氧饱和度...