一种基于内存映射的海量数据预处理方法
【专利摘要】本发明属于航空航天的数据库读写方法,具体涉及一种基于内存映射的海量数据预处理方法。它包括数据表生成模块、海量数据快速导入模块、海量数据快速预处理模块及海量数据快速检索模块,其中,海量数据快速导入模块中包含内存映射子模块。本发明的优点是,为航天器海量数据预处理建立合理高效的读写方式及数据库结构,根据试验状态为各次遥测信息生成带标识的数据表并建立索引,便于数据库中指定参数的快速检索及读取;航天器千兆级信息按照分系统、参数名称、参数类型等分类依次快速插入对应数据库中,插入完成时间量级为秒。
【专利说明】一种基于内存映射的海量数据预处理方法
【技术领域】
[0001]本发明属于航空航天的数据库读写方法,具体涉及一种基于内存映射的海量数据预处理方法。
【背景技术】
[0002]随着空间技术的不断发展,航天器的功能和结构越来越复杂,采样频率越来越高,飞行时间越来越长,导致航天器运行过程中产生的交换信息及监测信息亦越来越多。对信息判读工作而言,采用传统的文本存储及读取方法,判读人员在海量数据中定位故障点越来越困难,数据预处理在判读过程中所占比重越来越大,严重影响判读效率,且不利于判读自动化工具的开发,因此,判读工作开始前进行大数据预处理对提高判读效率显得尤为重要。对本地文件进行I/o操作进行数据预处理效率低下,内存映射通过映射本地文件到内存中,用内存操作取代I/o操作,从而极大提高原始数据存取速率。此外,数据库是目前广泛采用的管理大数据的有效工具,通过合理设计数据库结构及数据批处理方式,可以有效提高大数据预处理效率。因此,为航天器运行过程中产生的大量数据设计基于内存映射的海量数据预处理方法,可有效提高数据读写及处理效率,减小数据读写及处理在数据判读过程中所占比重,并为自动判读工作提供管理有序的数据源。
[0003]从文献中看,国内外航天器采用数据库管理的的数据量级在百兆,尚无针对航天器千兆级海量数据预处理方法设计的实例,因此,开发一种采用数据库管理的基于内存映射的具有高可靠性、适用于航天器系统的千兆海量数据预处理方法具有重要意义和实用价值。
【发明内容】
[0004]本发明的目的是提供了一种基于内存映射的海量数据预处理方法,依托数据库数据管理优势,有效提高千兆数据导入、数据预处理及数据读取效率,降低数据预处理时间在判读过程中的比重,高效可靠地在数据层面为判读工作提供数据依据,从而为提高数据判读效率及判读结果的有效性提供保障。
[0005]本发明是这样实现的,一种基于内存映射的海量数据预处理方法,它包括数据表生成模块、海量数据快速导入模块、海量数据快速预处理模块及海量数据快速检索模块,其中,海量数据快速导入模块中包含内存映射子模块。
[0006]所述的数据表生成模块的流程为:
[0007](I)获取航天器本次试验信息,如型号、批次、试验地点及试验名称等文本信息,分别检索型号检索获表、批次检索表及试验地点检索表获取型号、批次、试验地点ID信息;
[0008](2)判断上述ID信息是否非0,非O表示ID查询正常,将其插入数据库信息检索表,并根据ID信息生成对应且唯一的检索信息即试验ID ;
[0009](3)步骤(2)中,ID信息至少一个为O表示ID查询异常,跳出数据表生成模块;
[0010](4)查询数据库配置信息,在配置信息中遍历数据模版表的名称及属性,当表属性为复制表时,记录当前表名称;
[0011 ] (5)遍历数据模版表后获得需要复制的数据表名,调用数据库脚本复制表名、字符集、排序规则、字段数量、字段名称等信息生成新表;
[0012](6)查询信息检索表提取当次试验检索信息加入新表表名,表名格式为模版表名_检索信息,新表表名生成后跳出数据表生成模块。
[0013]所述的海量数据快速导入模块的流程为:
[0014](I)获取当次试验数据在本地的存储路径,数据分类记录在不同名称的文本文件中,存储在本地统一路径文件架中;
[0015](2)检索数据库配置信息中需要导入数据库的文件名;
[0016](3)判断获取的文件名是否为NULL,若文件名非NULL,表明应导入数据库的文件尚未导入完成,继续执行步骤5 ;
[0017](4)步骤⑶中,若文件名为NULL,表明应导入数据库的文件已完成导入,退出海量数据快速导入模块,为海量数据快速预处理模块进行数据处理完成数据准备;
[0018](5)检索数据库中文件名配置信息,遍历表中文件名字段,若文件名与表中某字段内容一致,则获取该字段对应的数据表名;
[0019](6)步骤(5)中,若文件名与文件名配置信息表中所有字段均不一致,表明数据库配置文件有误,退出海量数据快速导入模块,为海量数据快速预处理模块进行数据处理完成数据准备;
[0020](7)内存映射子模块通过步骤(I)、步骤(2)中获取的文件存储路径及文件名,将文件中数据、分隔符、分段符等信息快速映射到本地内存中,内存操作速度远大于文件I/o操作,从而为数据快速提取并插入数据库提供基础;
[0021](8)根据指定分段符从内存映射区域获取一行包括数据、分隔符的数据信息,若获取数据不为NULL,则根据指定分隔符提取当前行数据并依次插入对应数据表中;
[0022](9)步骤⑶中,若获取数据为NULL,表明本次文件从内存映射区域中已读取完毕并全部插入对应数据表,则退出海量数据快速导入模块,为海量数据快速预处理模块进行数据处理完成数据准备。
[0023]所述的海量数据快速预处理模块的流程为:
[0024](I)检索数据库中参数信息表,若检索结果不为空,表明海量数据快速预处理未结束;
[0025](2)步骤⑴中,若检索结果为NULL,表明海量数据快速预处理已结束,各参数处理结果已写入对应数据表中,为海量数据快速检索提供数据依据;
[0026](3)根据步骤(I)中检索结果,获取参数原始数据信息,包括参数字段名称、原始数据存储表等,从对应数据表中提取参数原始数据写入内存指定区域;
[0027](4)遍历内存指定区域的原始数据,获取参数最大值及最小值,同时完成参数均值运算,最值及均值运算结果写入对应数据表中;
[0028](5)判断当前参数处理类型,若为时标参数,时标原始数据为正值-O点-正值,遍历数据并提取时标O点前所有正值数据,各数据减固定值后,整个时标处理为负值-O点-正值,且时标从负到正依次增大,步长固定。处理完毕的时标作为新参数写入对应数据表中。
[0029](6)步骤(5)中,若为累加和参数,根据累加时间间隔及数据步长,计算单次累加帧数,从数据第一帧开始计算单次累加帧数之和,计算完毕结果插入对应数据表中,累加帧整体后移一帧直至计算完毕;
[0030](7)步骤(5)中,若为状态参数,检索状态判据表,根据步骤I中获取的参数检索信息从判据表中获取位判据,并对参数各位表示状态依次进行判断,判断结果以字符串类型写入参数解析表中;
[0031](8)步骤(5)中,若为非步骤(5)、(6)、(7)中所述参数类型,不进行参数处理。
[0032]所述的海量数据快速检索模块的流程为:
[0033](I)根据输入的试验及参数名称,分别在试验信息表及参数属性表中遍历名称,若与输入名称一致,则提取试验及参数信息;
[0034](2)步骤(I)中,若输入名称与查询名称均不一致,表明试验及参数名称输入有误,退出海量数据快速检索模块;
[0035](3)根据试验信息及参数信息中的原始数据表名、参数字段名,从对应数据表中提取参数原始数据;
[0036](4)根据试验信息及参数信息中的参数ID、处理类型从对应数据表中提取参数处理结果数据,汇同步骤(3)中获取的参数原始数据作为检索结果输出。
[0037]所述的内存映射子模块的流程为:
[0038](I)从海量数据导入模块获取导入文件的路径及文件名信息,根据路径及文件名创建映射文件句柄,作为获取映射文件信息的标志;
[0039](2)根据文件句柄获取当前文件的大小;
[0040](3)根据文件句柄创建可读写的文件内存映射句柄,该句柄作为获取映射数据的标志,可根据该句柄获取文件在内存中的位置;
[0041](4)通过文件内存映射句柄,将本地文件中的数据一次性映射到内存中,内存地址通过文件内存映射句柄确定,为快速获取并导入数据到数据库提供基础;
[0042](5)已映射到内存中的数据经过进程映射,输出内存首地址给进程,进城通过内存首地址及文件大小,即可在内存中获取映射文件的所有数据。
[0043]本发明的优点是,(I)通过本发明提供的适用于航天器海量信息数据库管理的基于内存映射的海量数据预处理方法,为航天器海量数据预处理建立合理高效的读写方式及数据库结构,根据试验状态为各次遥测信息生成带标识的数据表并建立索引,便于数据库中指定参数的快速检索及读取;(2)航天器千兆级信息按照分系统、参数名称、参数类型等分类依次快速插入对应数据库中,插入完成时间量级为秒;(3)根据航天器信息数据预处理要求对插入数据进行预处理,分别完成时标递增处理、参数最值计算、单位时间内累加和计算及参数位状态解析,预处理结果根据数据库配置表插入对应表;(4)根据试验标识及参数ID快速检索数据库,读取指定参数原始数据、最值、均值及其它相关预处理结果。检索完成时间量级为百毫秒级。通过本发明可显著提高千兆级海量数据预处理及数据库中的读写速度,有效降低数据预处理及读取时间占判读时间的比重,进一步提高判读效率,并为判读结果的有效性提供依据。因此,将该技术应用于工程实际具有重要意义。
【专利附图】
【附图说明】
[0044]图1为本发明所提供的一种基于内存映射的海量数据预处理方法流程图;
[0045]图2数据表生成模块工作流程图;
[0046]图3海量数据快速导入模块工作流程图;
[0047]图4海量数据快速预处理工作流程图;
[0048]图5海量数据快速检索模块工作流程图;
[0049]图6内存映射子模块工作流程图。
【具体实施方式】
[0050]下面结合附图和具体实施例对本发明进行详细介绍:
[0051]如图1所示,一种基于内存映射的海量数据预处理方法,它包括数据表生成模块、海量数据快速导入模块、海量数据快速预处理模块及海量数据快速检索模块。其中,海量数据快速导入模块中包含内存映射子模块。
[0052]数据表生成模块根据设计的数据表格式复制新的数据存储表,根据试验信息在数据库索引表中自动生成当次数据索引信息,该索引信息作为海量数据快速检索的依据和基础。
[0053]数据导入开始后,海量数据快速导入模块读取原始数据地址,根据数据库中原始文件配置表,依次读取原始TXT文件,通过适用于海量数据快速导入的数据导入方式从本地硬盘提取原始数据,根据原始文件配置表中的配置信息,依次将原始数据写入到对应数据表中直至所有原始数据全部写入数据库。
[0054]数据导入完成后,首先完成从数据库提取各参数,完成参数最值及均值运算,根据数据库中参数配置信息,选择已提取数据中需要进行二次处理的参数,分别进行时标递增处理、单位时间内累加和计算及参数位状态解析,处理结果加索引信息写入数据库中;
[0055]当外部需要检索指定参数原始数据或处理信息时,海量数据快速索引模块根据参数名称及检索信息在数据库中快速检索并提取数据。
[0056]如图2所示,数据表生成模块的流程为:
[0057](I)获取航天器本次试验信息,如型号、批次、试验地点及试验名称等文本信息,分别检索型号检索获表、批次检索表及试验地点检索表获取型号、批次、试验地点ID信息;
[0058](2)判断上述ID信息是否非0,非O表示ID查询正常,将其插入数据库信息检索表,并根据ID信息生成对应且唯一的检索信息即试验ID ;
[0059](3)步骤(2)中,ID信息至少一个为O表示ID查询异常,跳出数据表生成模块;
[0060](4)查询数据库配置信息,在配置信息中遍历数据模版表的名称及属性,当表属性为复制表时,记录当前表名称;
[0061](5)遍历数据模版表后获得需要复制的数据表名,调用数据库脚本复制表名、字符集、排序规则、字段数量、字段名称等信息生成新表;
[0062](6)查询信息检索表提取当次试验检索信息加入新表表名,表名格式为模版表名_检索信息,新表表名生成后跳出数据表生成模块。
[0063]如图3所示,海量数据快速导入模块的流程为:
[0064](I)获取当次试验数据在本地的存储路径,数据分类记录在不同名称的文本文件中,存储在本地统一路径文件架中;
[0065](2)检索数据库配置信息中需要导入数据库的文件名;
[0066](3)判断获取的文件名是否为NULL,若文件名非NULL,表明应导入数据库的文件尚未导入完成,继续执行步骤5 ;
[0067](4)步骤⑶中,若文件名为NULL,表明应导入数据库的文件已完成导入,退出海量数据快速导入模块,为海量数据快速预处理模块进行数据处理完成数据准备;
[0068](5)检索数据库中文件名配置信息,遍历表中文件名字段,若文件名与表中某字段内容一致,则获取该字段对应的数据表名;
[0069](6)步骤(5)中,若文件名与文件名配置信息表中所有字段均不一致,表明数据库配置文件有误,退出海量数据快速导入模块,为海量数据快速预处理模块进行数据处理完成数据准备;
[0070](7)内存映射子模块通过步骤(I)、步骤(2)中获取的文件存储路径及文件名,将文件中数据、分隔符、分段符等信息快速映射到本地内存中,内存操作速度远大于文件I/O操作,从而为数据快速提取并插入数据库提供基础;
[0071](8)根据指定分段符从内存映射区域获取一行包括数据、分隔符的数据信息,若获取数据不为NULL,则根据指定分隔符提取当前行数据并依次插入对应数据表中;
[0072](9)步骤(8)中,若获取数据为NULL,表明本次文件从内存映射区域中已读取完毕并全部插入对应数据表,则退出海量数据快速导入模块,为海量数据快速预处理模块进行数据处理完成数据准备。
[0073]如图4所示,海量数据快速预处理模块的流程为:
[0074](I)检索数据库中参数信息表,若检索结果不为空,表明海量数据快速预处理未结束;
[0075](2)步骤(I)中,若检索结果为NULL,表明海量数据快速预处理已结束,各参数处理结果已写入对应数据表中,为海量数据快速检索提供数据依据;
[0076](3)根据步骤(I)中检索结果,获取参数原始数据信息,包括参数字段名称、原始数据存储表等,从对应数据表中提取参数原始数据写入内存指定区域;
[0077](4)遍历内存指定区域的原始数据,获取参数最大值及最小值,同时完成参数均值运算,最值及均值运算结果写入对应数据表中;
[0078](5)判断当前参数处理类型,若为时标参数,时标原始数据为正值-O点-正值,遍历数据并提取时标O点前所有正值数据,各数据减固定值后,整个时标处理为负值-O点-正值,且时标从负到正依次增大,步长固定。处理完毕的时标作为新参数写入对应数据表中。
[0079](6)步骤(5)中,若为累加和参数,根据累加时间间隔及数据步长,计算单次累加帧数,从数据第一帧开始计算单次累加帧数之和,计算完毕结果插入对应数据表中,累加帧整体后移一帧直至计算完毕;
[0080](7)步骤(5)中,若为状态参数,检索状态判据表,根据步骤I中获取的参数检索信息从判据表中获取位判据,并对参数各位表示状态依次进行判断,判断结果以字符串类型写入参数解析表中;
[0081](8)步骤(5)中,若为非步骤(5)、(6)、(7)中所述参数类型,不进行参数处理。
[0082]如图5所示,海量数据快速检索模块的流程为:
[0083](I)根据输入的试验及参数名称,分别在试验信息表及参数属性表中遍历名称,若与输入名称一致,则提取试验及参数信息;
[0084](2)步骤(I)中,若输入名称与查询名称均不一致,表明试验及参数名称输入有误,退出海量数据快速检索模块;
[0085](3)根据试验信息及参数信息中的原始数据表名、参数字段名,从对应数据表中提取参数原始数据;
[0086](4)根据试验信息及参数信息中的参数ID、处理类型从对应数据表中提取参数处理结果数据,汇同步骤(3)中获取的参数原始数据作为检索结果输出。
[0087]如图6所示,内存映射子模块的流程为:
[0088](I)从海量数据导入模块获取导入文件的路径及文件名信息,根据路径及文件名创建映射文件句柄,作为获取映射文件信息的标志;
[0089](2)根据文件句柄获取当前文件的大小;
[0090](3)根据文件句柄创建可读写的文件内存映射句柄,该句柄作为获取映射数据的标志,可根据该句柄获取文件在内存中的位置;
[0091](4)通过文件内存映射句柄,将本地文件中的数据一次性映射到内存中,内存地址通过文件内存映射句柄确定,为快速获取并导入数据到数据库提供基础;
[0092](5)已映射到内存中的数据经过进程映射,输出内存首地址给进程,进城通过内存首地址及文件大小,即可在内存中获取映射文件的所有数据。
【权利要求】
1.一种基于内存映射的海量数据预处理方法,其特征在于:它包括数据表生成模块、海量数据快速导入模块、海量数据快速预处理模块及海量数据快速检索模块,其中,海量数据快速导入模块中包含内存映射子模块。
2.如权利要求1所述的一种基于内存映射的海量数据预处理方法,其特征在于:所述的数据表生成模块的流程为: (1)获取航天器本次试验信息,如型号、批次、试验地点及试验名称等文本信息,分别检索型号检索获表、批次检索表及试验地点检索表获取型号、批次、试验地点ID信息; (2)判断上述ID信息是否非O,非O表示ID查询正常,将其插入数据库信息检索表,并根据ID信息生成对应且唯一的检索信息即试验ID ; (3)步骤(2)中,ID信息至少一个为O表示ID查询异常,跳出数据表生成模块; (4)查询数据库配置信息,在配置信息中遍历数据模版表的名称及属性,当表属性为复制表时,记录当前表名称; (5)遍历数据模版表后获得需要复制的数据表名,调用数据库脚本复制表名、字符集、排序规则、字段数量、字段名称等信息生成新表; (6)查询信息检索表提取当次试验检索信息加入新表表名,表名格式为模版表名_检索信息,新表表名生成后跳出数据表生成模块。
3.如权利要求1所述的一种基于内存映射的海量数据预处理方法,其特征在于:所述的海量数据快速导入模块的流程为: (1)获取当次试验数据在本地的存储路径,数据分类记录在不同名称的文本文件中,存储在本地统一路径文件架中; (2)检索数据库配置信息中需要导入数据库的文件名; (3)判断获取的文件名是否为NULL,若文件名非NULL,表明应导入数据库的文件尚未导入完成,继续执行步骤5; (4)步骤(3)中,若文件名为NULL,表明应导入数据库的文件已完成导入,退出海量数据快速导入模块,为海量数据快速预处理模块进行数据处理完成数据准备; (5)检索数据库中文件名配置信息,遍历表中文件名字段,若文件名与表中某字段内容一致,则获取该字段对应的数据表名; (6)步骤(5)中,若文件名与文件名配置信息表中所有字段均不一致,表明数据库配置文件有误,退出海量数据快速导入模块,为海量数据快速预处理模块进行数据处理完成数据准备; (7)内存映射子模块通过步骤(I)、步骤(2)中获取的文件存储路径及文件名,将文件中数据、分隔符、分段符等信息快速映射到本地内存中,内存操作速度远大于文件I/O操作,从而为数据快速提取并插入数据库提供基础; (8)根据指定分段符从内存映射区域获取一行包括数据、分隔符的数据信息,若获取数据不为NULL,则根据指定分隔符提取当前行数据并依次插入对应数据表中; (9)步骤(8)中,若获取数据为NULL,表明本次文件从内存映射区域中已读取完毕并全部插入对应数据表,则退出海量数据快速导入模块,为海量数据快速预处理模块进行数据处理完成数据准备。
4.如权利要求1所述的一种基于内存映射的海量数据预处理方法,其特征在于:所述的海量数据快速预处理模块的流程为: (1)检索数据库中参数信息表,若检索结果不为空,表明海量数据快速预处理未结束; (2)步骤(I)中,若检索结果为NULL,表明海量数据快速预处理已结束,各参数处理结果已写入对应数据表中,为海量数据快速检索提供数据依据; (3)根据步骤(I)中检索结果,获取参数原始数据信息,包括参数字段名称、原始数据存储表等,从对应数据表中提取参数原始数据写入内存指定区域; (4)遍历内存指定区域的原始数据,获取参数最大值及最小值,同时完成参数均值运算,最值及均值运算结果写入对应数据表中; (5)判断当前参数处理类型,若为时标参数,时标原始数据为正值-O点-正值,遍历数据并提取时标O点前所有正值数据,各数据减固定值后,整个时标处理为负值-O点-正值,且时标从负到正依次增大,步长固定。处理完毕的时标作为新参数写入对应数据表中。 (6)步骤(5)中,若为累加和参数,根据累加时间间隔及数据步长,计算单次累加帧数,从数据第一帧开始计算单次累加帧数之和,计算完毕结果插入对应数据表中,累加帧整体后移一帧直至计算完毕; (7)步骤(5)中,若为状态参数,检索状态判据表,根据步骤I中获取的参数检索信息从判据表中获取位判据,并对参数各位表示状态依次进行判断,判断结果以字符串类型写入参数解析表中; (8)步骤(5)中,若为非步骤(5)、(6)、(7)中所述参数类型,不进行参数处理。
5.如权利要求1所述的一种基于内存映射的海量数据预处理方法,其特征在于:所述的海量数据快速检索模块的流程为: (1)根据输入的试验及参数名称,分别在试验信息表及参数属性表中遍历名称,若与输入名称一致,则提取试验及参数信息; (2)步骤(I)中,若输入名称与查询名称均不一致,表明试验及参数名称输入有误,退出海量数据快速检索模块; (3)根据试验信息及参数信息中的原始数据表名、参数字段名,从对应数据表中提取参数原始数据; (4)根据试验信息及参数信息中的参数ID、处理类型从对应数据表中提取参数处理结果数据,汇同步骤(3)中获取的参数原始数据作为检索结果输出。
6.如权利要求1所述的一种基于内存映射的海量数据预处理方法,其特征在于:所述的内存映射子模块的流程为: (1)从海量数据导入模块获取导入文件的路径及文件名信息,根据路径及文件名创建映射文件句柄,作为获取映射文件信息的标志; (2)根据文件句柄获取当前文件的大小; (3)根据文件句柄创建可读写的文件内存映射句柄,该句柄作为获取映射数据的标志,可根据该句柄获取文件在内存中的位置; (4)通过文件内存映射句柄,将本地文件中的数据一次性映射到内存中,内存地址通过文件内存映射句柄确定,为快速获取并导入数据到数据库提供基础; (5)已映射到内存中的数据经过进程映射,输出内存首地址给进程,进城通过内存首地址及文件大小,即可在内存中获取映射文件的所有数据。
【文档编号】G06F17/30GK104331446SQ201410587559
【公开日】2015年2月4日 申请日期:2014年10月28日 优先权日:2014年10月28日
【发明者】窦小明, 杨飞, 吴晓蕊, 谭佳琳, 李亮 申请人:北京临近空间飞行器系统工程研究所, 中国运载火箭技术研究院