掌桥专利:专业的专利平台
掌桥专利
首页

地震数据索引库的构建方法、装置、相关设备和索引库

文献发布时间:2024-01-17 01:15:20


地震数据索引库的构建方法、装置、相关设备和索引库

技术领域

本发明涉及计算机以及大数据处理技术领域,特别涉及一种地震数据索引库的构建方法、装置、相关设备和索引库。

背景技术

地震数据处理是石油勘探行业中的重要技术,其作用是能够根据特定的处理算法对野外采集的地震数据进行处理和计算,从而得出地下地质结构的图像,用于指导后续的钻井、石油开采等工作。随着新的勘探技术和高精度的采集技术在石油勘探中不断得到应用,从野外采集到的原始地震数据量增长迅速,目前单个数据体的规模已经超过PB级别,其地震道数可达千亿条。

地震应用程序处理的对象是通常就是这样一个庞大的地震数据体,地震数据体在逻辑上类似于关系型数据库中的数据表,是按照行的顺序进行组织的,每一行记录称为一个地震道。地震道由道头和道体两部分组成。其中道头中存储了与该地震道相关的属性信息,包括:炮点坐标、检波点坐标、采样点数、炮号、道号等信息,每个属性称为一个道头关键字。道体是一个浮点数组,每一个浮点数称为一个采样点。同时地震数据体是高维度结构化的数据,每个地震道都拥有上百种属性信息,存放在不同的道头关键字中。

然而,大量的交互式地震应用程序在访问地震数据体时,通常只对该地震数据体的部分数据集感兴趣。因此,大量的地震数据访问会对部分属性的取值范围进行指定,以过滤筛选出特定的数据集,同时还可能会指定以某些属性的顺序来决定查询结果的排序方式。

由于多维度范围查询是地震应用程序中最常见的数据查询模式,其查询速度对地震应用程序,尤其是交互式应用程序的性能以及用户使用体验至关重要。高效的索引查询是保证查询效率,降低地震数据查询延迟的基础。B+树索引作为一种为磁盘或者其他直接存取的辅助存储设备而设计的平衡搜索树,能够有效降低查询时的磁盘I/O操作数。并且由于B+树能够支持沿叶子节点的快速范围扫描,因此具有比较好的范围查询性能。

发明内容

但是,发明人发现传统的B+树构建方法是将每一条记录插入空树中,其过程会包含很多复杂的操作,如节点的分裂、旋转等。对于千亿道无序数据,这种传统构建方法的开销是巨大的,且很难进行多机并行化构建,在多线程环境下的加速比也比较有限。同时,如果将每一道数据都存入B+树中,最终树的规模也将是巨大的,查找时依然会面临效率低下的问题。此外,使用B+树仅能对单一关键字进行查找,在多关键字范围查找时,需要先查询符合第一关键字条件的全部数据,再对后续关键字进行筛选,这会导致查找效率大幅降低。因此,针对海量地震数据,需要设计一种不同于传统B+树结构的分布式索引构建方法,以提高索引构建效率、加速比、可扩展性以及查询效率。

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种地震数据索引库的构建方法、装置、相关设备和索引库。

第一方面,本发明实施例提供了一种地震数据索引库的构建方法,可以包括:

对获取的地震数据中包括的道头数据进行抽样预测,以生成道头关键字与分布式节点的节点分配模型;

基于所述节点分配模型,所有所述节点并行对其匹配的地震数据中的数据块中包括的道头数据进行关键字提取,以所述关键字和道号作为索引项,并基于所述索引项生成每个节点匹配的数据块对应的索引文件;

基于所述索引文件包括的索引项以及所述索引项在所述索引文件中的偏移量,构建所述地震数据的索引库。

可选的,所述对获取的地震数据中包括的道头数据进行抽样预测,以生成道头关键字与分布式节点的节点分配模型,可以包括:

基于服务器集群中包括的节点的个数对获取的地震数据进行划分,以确定所述地震数据划分后的数据块的个数与所述节点的个数相匹配;

各个所述节点按照预设间隔并行读取所述数据块中包括的地震道数据作为抽样数据,以提取所述地震道数据中的道头数据的关键字值;

基于所述抽样数据的关键字值和所述节点的序号,进行归一化处理,生成关键字-节点分配表;

将所述关键字-节点分配表作为训练样本集,输入到预设的神经网络模型中进行训练,以确定节点分配模型。

可选的,所述将所述关键字-节点分配表作为训练样本集,输入到预设的神经网络模型中进行训练,以确定节点分配模型,可以包括:

将所述关键字-节点分配表中的关键字值作为多层感知器神经网络模型的输入,将所述关键字对应的节点的序号作为所述多层感知器神经网络的输出进行训练,并对所述训练结果拟合关键字的累积分布函数,以确定节点分配模型。

可选的,所述基于所述节点分配模型,所有所述节点并行对其匹配的地震数据中的数据块中包括的道头数据进行关键字提取,以所述关键字和道号作为索引项,并基于所述索引项确定每个节点匹配的数据块对应的索引文件,可以包括:

所有所述节点并行对所述数据块中包括的地震道数据的道头进行划分,以确定道头数据块;

提取所述道头数据块中的关键字,并将所述关键字和所述地震道数据的道号作为索引项;

基于所述索引项和所述节点分配模型,对所述索引项进行排序,以确定每个节点匹配的数据块对应的索引文件。

可选的,所述提取所述道头数据块中的关键字,并将所述关键字和所述地震道数据的道号作为索引项,可以包括:

将所述关键字、关键字值以及道号转换为键-值数据结构,将所述键-值数据结构的关键字和道号作为索引项;

所述基于所述索引项和所述节点分配模型,对所述索引项进行排序,以确定每个节点匹配的数据块对应的索引文件,包括:

基于所述节点分配模型,确定所述索引项所在节点的编号,以对所有的索引项和索引文件进行排序;

根据排序结果,确定所述地震数据生成的有序索引文件。

可选的,所述基于所述索引项和所述节点分配模型,对所述索引项进行排序之后,还可以包括:

确定每个所述节点中的索引项在所述每个节点对应的索引文件中的偏移量,以确定每个所述节点对应的索引文件中有序的索引项。

可选的,所述基于所述索引文件包括的索引项以及所述索引项在所述索引文件中的偏移量,构建所述地震数据的索引库,可以包括:

分别读取所述索引文件,以提取所述索引文件中包括的每个索引项;

将所述索引项的索引信息包括的关键字的起始范围以及所述索引项在所述索引文件的偏移量作为SR+树的叶子节点项,存储在叶子节点中;

基于所述叶子节点的容量,分裂出新的叶子节点,直至所有的叶子节点项均写入到叶子节点;

基于所有的所述叶子节点,生成每个叶子节点的子节点,以构建SR+子树;其中,所述子节点中包括所述子节点内的所有叶子节点的关键字的起始范围和偏移量;

基于所述子节点生成所述子节点的根节点,以将所述子树构建成SR+树表征所述地震数据的索引库。

可选的,基于所述子节点生成所述子节点的根节点之前,还可以包括:

基于所述子节点构建树顶节点,并判断所述树顶节点的数量是否为1,若是,则将所述树顶节点作为所述根节点;否则,重复基于所述子节点构建树顶节点的步骤。

可选的,基于MapReduce框架对获取的地震数据中包括的道头数据进行抽样预测,以生成道头关键字与分布式节点的节点分配模型;和/或,基于MapReduce框架生成索引文件;和/或,基于MapReduce框架构建所述地震数据的索引库。

第二方面,本发明实施例提供了一种地震数据索引库,可以包括:

索引项,所述索引项的索引项信息包括:地震道头数据中选取的关键字值和地震道的道号;

所述索引项以及所述索引项的偏移量存储在SR+树的叶子节点中;

所述SR+树中的子节点包括其包括的叶子节点的所有索引项的关键字值的起始范围;

所述SR+树中的根节点包括所述地震数据中选取的关键字的起始范围。

第三方面,本发明实施例提供了一种地震数据的查询方法,可以包括:

根据待查询地震道的关键字的值,与预先构建的地震数据索引库进行查找,以确定所述地震道的道号;

其中,所述预先构建的地震数据索引库是根据第一方面所述的方法构建的。

可选的,在地震数据索引库中进行查找具体包括:

从所述索引库的根节点以下的子节点逐一对子节点组成的子树进行查找,判断所述待查询地震道的关键字的值是否在所述子节点的关键字值的起始范围内;

若是,则查找所述子节点包括的子节点、非叶子节点和叶子节点,以根据所述关键字值匹配的索引项的偏移量,确定所述索引项在所述叶子节点中的位置,以确定待查询地震道的关键字匹配的所有的所述地震道的道号;

否则,在所述根节点以下的下一个子节点进行查找。

第四方面,本发明实施例提供了一种地震数据索引库的构建装置,可以包括:

预测模块,用于对获取的地震数据中包括的道头数据进行抽样预测,以生成道头关键字与分布式节点的节点分配模型;

提取模块,用于基于所述节点分配模型,所有所述节点并行对其匹配的地震数据中的数据块中包括的道头数据进行关键字提取,以所述关键字和道号作为索引项,并基于所述索引项生成每个节点匹配的数据块对应的索引文件;

构建模块,用于基于所述索引文件包括的索引项以及所述索引项在所述索引文件中的偏移量,构建所述地震数据的索引库。

第五方面,本发明实施例提供了一种一种地震数据的查询装置,可以包括:

查询模块,用于根据待查询地震道的关键字的值,与预先构建的地震数据索引库进行查找,以确定所述地震道的道号;

其中,所述预先构建的地震数据索引库是根据第一方面所述的方法构建的。

第六方面,本发明实施例提供了一种一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现第一方面所述的地震数据索引库的构建方法,或实现如第三方面所述的地震数据的查询方法。

第七方面,本发明实施例提供了一种一种计算机设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面所述的地震数据索引库的构建方法,或实现如第三方面所述的地震数据的查询方法。

本发明实施例提供的上述技术方案的有益效果至少包括:

本发明实施例提供了一种地震数据索引库的构建方法、装置、相关设备和索引库,该方法可以包括:对获取的地震数据中包括的道头数据进行抽样预测,以生成道头关键字与分布式节点的节点分配模型;基于节点分配模型,所有节点并行对其匹配的地震数据中的数据块中包括的道头数据进行关键字提取,以关键字和道号作为索引项,并基于索引项生成每个节点匹配的数据块对应的索引文件;基于索引文件包括的索引项以及索引项在索引文件中的偏移量,构建地震数据的索引库。

本发明实施例中提供的上述地震数据索引库的构建方法,集群各节点并行地抽取地震道道头数据,并通过抽样数据统计全体数据的大致分布规律,生成节点分配模型,在后续数据排序时使用;在数据排序部分,集群各节点并行地读取地震道道头数据并提取选定关键字的值和该道道号作为索引项,然后通过节点分配模型将不同范围的索引项发送给特定节点进行排序,最终生成多个文件内与文件间均有序的索引文件。在构建索引库时,并行地读取所有索引文件并等距地扫描索引项,获得每段索引项各关键字值的范围与起始偏移量,以构建地震数据的索引库。进一步的,本发明充分利用分布式并行模式提高索引构建效率,使用一种新型索引结构以实现地震数据索引的快速构建和快速查找与读取,且不限定关键字数量。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书以及附图中所特别指出的结构来实现和获得。

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:

图1为本发明实施例中提供的地震数据索引库的构建方法的流程图;

图2为本发明实施例中提供的步骤S11的具体流程图;

图3为本发明实施例中提供的基于MapReduce框架的抽样预测的流程图;

图4为本发明实施例中提供的步骤S12的具体流程图;

图5为本发明实施例中提供的基于MapReduce框架的生成索引文件的流程图;

图6为本发明实施例中提供的步骤S13的具体流程图;

图7为本发明实施例中提供的基于MapReduce框架的构建索引库的流程图;

图8为本发明实施例中提供的一个具体的地震数据索引库的构建方法的流程图;

图9为本发明实施例中提供的地震数据索引库的构建装置的结构示意图;

图10为本发明实施例中提供的地震数据查询方法的流程图;

图11为本发明实施例中提供的具体的地震数据查询方法的流程图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

本发明实施例中提供了一种地震数据索引库的构建方法,参照图1所示,该方法可以包括以下步骤:

步骤S11、对获取的地震数据中包括的道头数据进行抽样预测,以生成道头关键字与分布式节点的节点分配模型。

本步骤是通过对所有的地震数据进行抽样预测,以对样品数据进行分析之后,确定所有的地震数据的整体分布规律,以便于对地震数据分配给服务器集群中不同的节点进行并行处理。

需要说明的是,本发明实施例中提供的上述地震数据是一个区域、一个油田或者工作区的地震数据,即单个地震数据体,该单个地震数据体一经获得就不再进行更改。本领域技术人员应当可以理解的是,地震数据不同于导航领域中的POI等地理信息,在导航领域中POI数据可以增加、更新或者删除,但是地震数据在野外采集之后,每道地震数据的道头信息以及采样点采集的数据就不会在改变,本领域技术人员不应当对此产生歧义。因此,本方法生成的上述地震数据的索引库是不可更新的。

步骤S12、基于节点分配模型,所有节点并行对其匹配的地震数据中的数据块中包括的道头数据进行关键字提取,以关键字和道号作为索引项,并基于索引项生成每个节点匹配的数据块对应的索引文件。

本步骤是所有的节点并行提取节点对应的数据库中的关键字,以构建每道地震数据的索引项,进行生成所有地震道的有序的索引文件。

步骤S13、基于索引文件包括的索引项以及索引项在索引文件中的偏移量,构建地震数据的索引库。

本发明实施例中提供的上述地震数据索引库的构建方法,集群各节点并行地抽取地震道道头数据,并通过抽样数据统计全体数据的大致分布规律,生成节点分配模型,在后续数据排序时使用;在数据排序部分,集群各节点并行地读取地震道道头数据并提取选定关键字的值和该道道号作为索引项,然后通过节点分配模型将不同范围的索引项发送给特定节点进行排序,最终生成多个文件内与文件间均有序的索引文件。在构建索引库时,并行地读取所有索引文件并等距地扫描索引项,获得每段索引项各关键字值的范围与起始偏移量,以构建地震数据的索引库。

发明人发现,R树将B树的思想扩展到多维空间,是目前最为流行的动态空间索引结构,广泛的应用于各类空间数据库中。R树的结构将每个二维数据单元在二维坐标系中以点来表示,R树的每个非叶子节点表示一个包含了所有子树中的点的矩形,每个叶子节点包含多个指向数据单元的指针。基于这种存储结构,可以在仅遍历少数叶子节点的情况下实现多维度范围查询,且查询效率明显高于传统的B+树查询方法。

因此,针对传统B+树单一关键字查询的局限性和构建方法的低效性,本发明结合B+树和R树的思想设计了SR+树索引结构,并基于批量装载(Bulk-Loading)方法进行SR+树的构建。使用批量装载方法需要先对数据进行排序,然后将获得每段索引项各关键字值的范围与起始偏移量,将其作为SR+树的叶子节点项,有序批量地载入SR+树叶子节点中,设定叶子节点容量限制,每当节点大小超过设定值,就分裂一个新的节点继续载入,并为两个节点构建一个新的根节点,直至数据全部载入,这样就避免了SR+树构建时插入操作的巨大开销。SR+树的叶子节点存储各关键字值的范围及其在索引文件中的偏移量,非叶子节点仅存储各关键字值的范围,并通过其所在节点中的下标表示其对应的子节点序号。

在一个可选的实施例中,在实际地震道数据中,不同关键字的类型、取值范围和分布规律等属性均不相同,为避免出现服务器集群中的某些节点处理过多的数据而导致的木桶效应,使整体效率适得其反,所以需要保证每个节点分配的排序数据量是尽可能平均的。这就需要在排序前对整体数据进行一遍扫描,确定关键字的全部取值,以及每个值出现的道数,再根据每个值的道数将其尽可能均匀且有序地分配给不同节点。可以同样基于MapReduce框架实现对全部道头的扫描,首先在Map(映射)阶段各节点并行地读取道头关键字,统计所读关键字信息(即关键字值和该值包含的道数),将各节点的关键字信息发送给唯一节点;然后在Reduce(规约)阶段,负责接收信息的节点收集全部的关键字信息并合并为总关键字信息表。为每个节点按照关键字值分配尽可能平均的道数,最终生成各节点排序数据范围的分配表。此后,各节点在排序阶段均读取该分配表,将不同值发给指定节点,实现分段排序。之后对每个文件构建查找结构,结构间的有序性使其可以直接合并为一个整体索引查找结构,进行一次查找即可得到结果。

由于扫描全部数据的效率很低,且鉴于实际数据中相同关键字值的道数会很多,并不能使各节点完全平均地分配到相同的道数进行排序,可以采用抽样与机器学习结合的方法对数据的分布进行预测,参照图2和图3所示,上述步骤S11基于MapReduce框架对获取的地震数据中包括的道头数据进行抽样预测,以生成道头关键字与分布式节点的节点分配模型,具体可以包括以下步骤:

步骤S111、基于服务器集群中包括的节点的个数对获取的地震数据进行划分,以确定地震数据划分后的数据块的个数与节点的个数相匹配。

本步骤中,设定取样规模并设置Reducer数量为1,使用MapReduce框架将取样规模平均分配给各节点;在MapReduce框架中,Map阶段可以通过GetPartition函数将相同Key值的Value发送给同一个Reducer进行统一处理。因此,使用MapReduce框架进行排序时,可以将每个索引项数据发送至指定编号的Reducer。为每个Reducer设定有序、连续且互不相交的关键字范围,每个Mapper均将索引项发送给负责处理该索引项的Reducer,Reducer在排序后会生成多个有序的索引文件,且各文件间也是有序的。如此,便在排序时最大限度地利用了集群的并行性。

步骤S112、各个节点按照预设间隔并行读取数据块中包括的地震道数据作为抽样数据,以提取地震道数据中的道头数据的关键字值。

本步骤中,在Map阶段,各节点按照取样规模进行间隔性地震道读取,提取每个地震道中选定的关键字值,保证抽样读取的地震道数符合取样规模。

步骤S113、基于抽样数据的关键字值和节点的序号,进行归一化处理,生成关键字-节点分配表。

本步骤中,在Reduce阶段,将读取到的关键字信息进行整合,把抽样结果看作整体数据扫描结果来生成后续各节点排序数据范围的分配表。

步骤S114、将关键字-节点分配表作为训练样本集,输入到预设的神经网络模型中进行训练,以确定节点分配模型。

本步骤中,将关键字值作为输入,为该值指定的节点序号作为输出,归一化处理后按照关键字值的道数占比传入机器学习模型中进行训练,拟合该关键字的累积分布函数。

具体的,本步骤中将关键字-节点分配表中的关键字值作为多层感知器神经网络模型的输入,将关键字对应的节点的序号作为多层感知器神经网络的输出进行训练,并对训练结果拟合关键字的累积分布函数,以确定节点分配模型。

本发明实施例中,在抽样预测部分,集群各节点并行地抽取地震道道头数据,并通过抽样数据统计全体数据的大致分布规律,生成节点分配模型,在后续数据排序时使用。

在另一个可选的实施例中,传统分布式排序算法共分为两个部分:各节点内部排序和归并排序,在排序的最后阶段需要将每个节点的有序数据进行归并排序。然而归并步骤会将全部数据IO集中到某单一节点上,导致排序效率的严重降低,使耗时大幅增加。对此,可以使用分段排序的方法避免归并以提高排序效率。首先,通过扫描数据整体确定数据分布,然后平均地为每个节点分配互不相交的不同数值范围的数据,使排序后的文件内部和文件间均有序,从而得到整体有序的排序结果。作为SR+树索引构建流程的第二个部分,数据排序部分兼具排序和生成索引数据文件两个目的。参照图4和图5所示,上述步骤S12基于MapReduce框架生成索引文件,具体可以包括以下步骤:

步骤S121、所有节点并行对数据块中包括的地震道数据的道头进行划分,以确定道头数据块。

本步骤中,道头数据在Map阶段会被平均分成多段,每个Map任务负责一段数据的读取,然后将这些Map任务平均分配给集群中各节点的Map Worker完成。

步骤S122、提取道头数据块中的关键字,并将关键字和地震道数据的道号作为索引项。

具体的,将关键字、关键字值以及道号转换为键-值数据结构,将键-值数据结构的关键字和道号作为索引项。即Map Worker在收到Map任务后,开始对相应道头数据段进行处理。读取所有的道头,按顺序提取出每道中选定的关键字数据和该道道号作为索引项,并使用key/value对进行存储。

步骤S123、基于索引项和节点分配模型,对索引项进行排序,以确定每个节点匹配的数据块对应的索引文件。

具体的,基于节点分配模型,确定索引项所在节点的编号,以对所有的索引项和索引文件进行排序;即,Map Worker通过调用节点分配模型获得每个索引项对应的节点编号,以此来将每个key/value分别发送给对应的Reduce Worker进行排序,从而实现分段排序。

根据排序结果,确定地震数据生成的有序索引文件。即,Reduce Worker收到MapWorker发来的全部key/value对后,按照关键字顺序对key/value对中所存的索引数据进行排序,最后将排序后的索引数据存入该Reduce Worker所对应的文件中。同时,统计每一关键字的信息(不重复值、下一关键字最大值、下一关键字最小值等),写入对应的关键字信息文件中。至此,全部道头索引数据被提取并排序至多个索引文件中。

本发明实施例中在数据排序部分,集群各节点并行地读取地震道道头数据并提取选定关键字的值和该道道号作为索引项,然后通过节点分配模型将不同范围的索引项发送给特定节点进行排序,最终生成多个文件内与文件间均有序的索引文件。

在另一可选的实施例中,为构建索引库,基于索引项和节点分配模型,对索引项进行排序之后,还包括:确定每个节点中的索引项在每个节点对应的索引文件中的偏移量,以确定每个节点对应的索引文件中有序的索引项。

在另一个可选的实施例中,SR+树构建部分并行地读取所有索引文件并等距地扫描索引项,获得每段索引项各关键字值的范围与起始偏移量,将其作为SR+树的叶子节点项存入叶子节点中。设定叶子节点容量限制,若节点满则分裂新的节点进行存储。SR+树的叶子节点存储各关键字值的范围及其在索引文件中的偏移量,非叶子节点仅存储各关键字值的范围,并通过其所在节点中的下标表示其对应的子节点序号。参照图6和图7所示,SR+树结构基于MapReduce框架进行并行化构建,首先对多个有序索引文件分别构建SR+子树,然后为全部子树构建根节点,将所有子树合并成为一棵SR+树。上述步骤S13分布式SR+树构建具体可以包括以下步骤:

步骤S131、分别读取索引文件,以提取索引文件中包括的每个索引项。在Map阶段,每个Map任务负责一个索引文件的读取,然后将这些Map任务平均分配给集群中各节点的Map Worker完成。

步骤S132、将索引项的索引信息包括的关键字的起始范围以及索引项在索引文件的偏移量作为SR+树的叶子节点项,存储在叶子节点中。

本步骤中,Map Worker在收到Map任务后,对索引文件的每一索引项进行逐一扫描,并每隔固定范围保存一个索引项信息(即各关键字的起始范围和该项在索引文件中的偏移量)作为SR+树的叶子节点项。设定SR+树叶子节点的容量限制,每达到限额则分裂出新的叶子节点,直至所有叶子节点项写入叶子节点。

步骤S133、基于叶子节点的容量,分裂出新的叶子节点,直至所有的叶子节点项均写入到叶子节点。

步骤S134、基于所有的叶子节点,生成每个叶子节点的子节点,以构建SR+子树;其中,子节点中包括子节点内的所有叶子节点的关键字的起始范围和偏移量。

本步骤中,生成全部叶子节点后,自底向上地为每个叶子节点构建父节点(子节点或根节点),SR+树的每个非叶子节点保存该节点所包含所有子节点的各关键字值起始范围。当父节点达到容量上限时,申请新的父节点继续写入,直至父节点构建完成。

步骤S135、基于子节点构建树顶节点,并判断树顶节点的数量是否为1,若是,则将树顶节点作为根节点;否则,重复基于子节点构建树顶节点的步骤。

步骤S136、基于子节点生成子节点的根节点,以将子树构建成SR+树表征地震数据的索引库。

本步骤中,当索引文件对应的SR+树构建完成,将该SR+树所存各关键字范围和SR+树编号存入key/value对,通过Map Worker将所有key/value对发送给唯一的ReduceWorker。ReduceWorker收到MapWorker发来的key/value对后,按照SR+树编号顺序地将SR+树信息写入SR+树信息文件中。至此,SR+树结构构建完成。

本发明实施例中提供的上述地震数据索引库的构建方法,SR+树索引结构的设计思路具有以下几个主要的特征:基于批量装载方法进行SR+树索引的构建,构建流程分为抽样预测、数据排序和SR+树构建三个部分;在抽样预测时使用机器学习模型进行数据分布的预测,并通过模型分配的节点序号进行分段排序来实现高效的大规模数据排序;索引构建流程的各部分均基于MapReduce编程模型进行分布式构建;索引文件数量与集群节点数量相同,SR+子树数量与索引文件数量相同;通过对索引文件进行等距扫描来构建SR+树,查找时可以同时对全部关键字范围进行筛选;SR+树非叶子节点通过下标指向子节点,叶子节点通过所存索引偏移量指向索引;不限定索引关键字的数量。

在一个具体的实施例中,上述地震数据索引库的构建方法的具体实现可以参照图8所示,主要将SR+树索引的构建分为两个部分:数据排序和构建SR+树,其中数据排序部分又可细分为抽样扫描和分段排序两部分。首先,基于MapReduce框架与机器学习模型进行数据抽样和分布规律的学习,生成节点分配模型;然后,基于MapReduce框架使用节点分配模型进行索引生成和分段排序,生成多个有序索引文件;最后,使用MapReduce框架对每个索引文件并行化构建SR+树。SR+树索引查询时,自根节点逐一扫描节点项,自顶向下地查找可能存在匹配索引项的索引块,最终汇总符合各关键字范围条件的索引项。每部分的具体实现步骤如下:

基于MapReduce框架与机器学习模型的数据抽样与数据分布学习:

在Map阶段,调用MLTraceScanInputFormat类进行数据块划分,依据集群中可用节点数量决定划分的数据块个数,并放入InputSplit类中进行存储。其中,MLTraceScan为用户自定义模块,可以理解为机器学习地震道扫描。

MapWorker收到任务后,使用MLTraceScanRecordReader类对每个数据块按隔空随机抽取的方式进行道头数据的读取,每次读取一道道头数据,并提取出该道道头中选定的关键字值存入key/value对中。

MapWorker通过Partitioner类的划分函数GetPartition(conststd::string&key,conststd::string&value,intnumPartitions),将每个key/value对发送给唯一的Reduce任务。

ReduceWorker收到MapWorker发来的全部key/value对后,使用MLTraceScanComparator类的Compare(conststd::string&key1,conststd::string&key2)函数对收到的索引项样本数据进行排序。

在Reduce部分完成后,统计有序索引样本的各关键字不同值的数量,并尽可能均匀地将索引项样本有序的分配给各节点,生成关键字-节点分配表。

基于Libtorch框架构建MLP模型,并将关键字-节点分配表中的关键字值和节点编号分别作为模型的输入和输出传入模型进行训练。

最后将训练完成的模型连同各参数信息存入非易失性存储。

基于MapReduce编程模型的数据排序:

在Map阶段,调用MLTraceSortInputFormat类进行数据块划分,依据集群中可用节点数量决定划分的数据块个数,并放入InputSplit类中进行存储。

MapWorker收到任务后,使用MLTraceSortRecordReader类对每个数据块进行道头数据的读取,提取出每道道头中选定的关键字值,连同当前道号一起存入key/value对中。

MapWorker通过MLTraceSortPartitioner类的划分函数GetPartition读取节点分配模型,将每个索引项的关键字值输入模型,得到相应的节点编号,以此来将每个key/value对发送给对应的Reduce任务。

ReduceWorker收到MapWorker发来的key/value对后,使用MLTraceSortComparator类的Compare函数对收到的索引数据进行排序,最后使用MLTraceSortRecordWriter类将索引数据和关键字信息写入非易失性存储。

基于MapReduce编程模型的SR+树构建:

在Map阶段,调用MakeRtreeIndexInputFormat类进行数据块划分,依据索引文件数量决定数据块个数,并放入InputSplit类中进行存储。

MapWorker收到任务后,使用MakeRtreeIndexRecordReader类对每个数据块进行索引数据的读取,每读取一段固定数量的索引项就统计一次所读索引的各关键字值范围,连同该段在索引文件中的起始偏移量,通过addToRTreeLeaf(RTreeLeafNodeItem*item)函数存入叶子节点中。待全部叶子节点创建完成后,使用buildRTree()函数自底向上完成SR+子树的构建,并将SR+子树的根节点信息存入key/value对中。

MapWorker将每个key/value对发送给唯一Reduce任务(在任务开始前,已通过SetNumReduceTasks(intnum)函数设定Reduce数量为1)。

ReduceWorker收到MapWorker发来的key/value对后,汇总SR+树信息,并生成根节点写入非易失性存储。

本发明设计并实现的基于MapReduce编程模型分布式SR+树索引构建算法,能够利用多节点的高性能集群计算资源快速并发构建索引,极大提高了效率。

基于同一发明构思,本发明实施例中还提供了一种地震数据索引库的构建装置,参照图9所示,可以包括:预测模块91、提取模块92和构建模块93,其工作原理如下:

预测模块91用于对获取的地震数据中包括的道头数据进行抽样预测,以生成道头关键字与分布式节点的节点分配模型;

提取模块92用于基于所述节点分配模型,所有所述节点并行对其匹配的地震数据中的数据块中包括的道头数据进行关键字提取,以所述关键字和道号作为索引项,并基于所述索引项生成每个节点匹配的数据块对应的索引文件;

构建模块93用于基于所述索引文件包括的索引项以及所述索引项在所述索引文件中的偏移量,构建所述地震数据的索引库。

在一个可选的实施例中,预测模块91具体用于:

基于服务器集群中包括的节点的个数对获取的地震数据进行划分,以确定所述地震数据划分后的数据块的个数与所述节点的个数相匹配;

各个所述节点按照预设间隔并行读取所述数据块中包括的地震道数据作为抽样数据,以提取所述地震道数据中的道头数据的关键字值;

基于所述抽样数据的关键字值和所述节点的序号,进行归一化处理,生成关键字-节点分配表;

将所述关键字-节点分配表作为训练样本集,输入到预设的神经网络模型中进行训练,以确定节点分配模型。

更具体的,预测模块91将所述关键字-节点分配表中的关键字值作为多层感知器神经网络模型的输入,将所述关键字对应的节点的序号作为所述多层感知器神经网络的输出进行训练,并对所述训练结果拟合关键字的累积分布函数,以确定节点分配模型。

在另一个可选的实施例中,提取模块92具体用于:

所有所述节点并行对所述数据块中包括的地震道数据的道头进行划分,以确定道头数据块;

提取所述道头数据块中的关键字,并将所述关键字和所述地震道数据的道号作为索引项;具体的,将所述关键字、关键字值以及道号转换为键-值数据结构,将所述键-值数据结构的关键字和道号作为索引项;

基于所述索引项和所述节点分配模型,对所述索引项进行排序,以确定每个节点匹配的数据块对应的索引文件。具体的,基于所述节点分配模型,确定所述索引项所在节点的编号,以对所有的索引项和索引文件进行排序;根据排序结果,确定所述地震数据生成的有序索引文件。

在另一个可选的实施例中,提取模块92还用于:确定每个所述节点中的索引项在所述每个节点对应的索引文件中的偏移量,以确定每个所述节点对应的索引文件中有序的索引项。

在另一个可选的实施例中,构建模块93具体用于:

分别读取所述索引文件,以提取所述索引文件中包括的每个索引项;

将所述索引项的索引信息包括的关键字的起始范围以及所述索引项在所述索引文件的偏移量作为SR+树的叶子节点项,存储在叶子节点中;

基于所述叶子节点的容量,分裂出新的叶子节点,直至所有的叶子节点项均写入到叶子节点;

基于所有的所述叶子节点,生成每个叶子节点的子节点,以构建SR+子树;其中,所述子节点中包括所述子节点内的所有叶子节点的关键字的起始范围和偏移量;

基于所述子节点构建树顶节点,并判断所述树顶节点的数量是否为1,若是,则将所述树顶节点作为所述根节点;否则,重复基于所述子节点构建树顶节点的步骤;

基于所述子节点生成所述子节点的根节点,以将所述子树构建成SR+树表征所述地震数据的索引库。

基于同一发明构思,本发明实施例中还提供了一种地震数据索引库,可以包括:

索引项,索引项的索引项信息包括:地震道头数据中选取的关键字值和地震道的道号;

索引项以及索引项的偏移量存储在SR+树的叶子节点中;

SR+树中的子节点包括其包括的叶子节点的所有索引项的关键字值的起始范围;

SR+树中的根节点包括地震数据中选取的关键字的起始范围。

基于同一发明构思,本发明实施例中还提供了一种地震数据的查询方法,可以包括:

根据待查询地震道的关键字的值,与预先构建的地震数据索引库进行查找,以确定地震道的道号;

其中,预先构建的地震数据索引库是根据上述地震数据索引库的构建方法构建的。

在一个可选的实施例中,参照图10和图11所示,在地震数据索引库中进行查找具体包括:

步骤S101、从索引库的根节点以下的子节点逐一对子节点组成的子树进行查找。

步骤S102、判断待查询地震道的关键字的值是否在子节点的关键字值的起始范围内;若是,执行步骤S103;否则,执行步骤S101,在根节点以下的下一个子节点进行查找。

步骤S103、则查找子节点包括的子节点、非叶子节点和叶子节点,以根据关键字值匹配的索引项的偏移量,确定索引项在叶子节点中的位置,以确定待查询地震道的关键字匹配的所有的地震道的道号。

参照图11所示,从根节点开始逐一比较节点项,若该节点项范围可能存在符合条件的索引项,则进入其子树继续查找,直至叶子节点;否则,对下一节点项进行匹配判断,直至结束。

在叶子节点中逐一比较节点项,查找可能存在符合条件的索引项的索引块(一段索引项),直至结束。

根据查询出的叶子结点项所存的偏移量读取其对应的索引数据文件中的索引块,并继续逐一筛选该索引块所包含的所有索引项,得到全部符合关键字条件的索引项集合。

通过索引项中所存道号读取符合条件的索引项集合对应的地震道数据,从而完成多维度关键字的范围查找。至此,SR+树索引查询完成。

多维度范围查询:通过给定的索引路径获取当前索引的信息,读取第一关键字信息文件和SR+树根节点文件。通过search_index函数,从SR+树根节点开始,对给定的各关键字起止范围进行检索,并将所有符合条件的索引项存入keyDatas数组中。汇总全部索引项结果,继续其它属性的筛选(如分组、容差等),将符合全部条件的索引项存入BATraceIndexs类中。

相比于传统的B+树和R树索引结构,本发明具有以下优势:

1)将R树的多维度索引思想与B+树相结合,使得一次查询即可筛选出全部关键字的范围,大幅提高多维度查询效率;同时,SR+树可沿叶子节点快速范围扫描,使其具有更好的范围查询性能。

2)使用批量装载思想进行SR+树构建,先将数据排序成总索引文件,再构建SR+树。两层索引结构使得在保证查询效率的情况下,SR+树索引的构建开销大幅减小,SR+树的容量大幅减小。

3)设计并实现了一种基于MapReduce编程模型的分布式索引构建算法,能够利用多节点的计算资源快速并发构建索引,且可扩展性好,提升了构建索引的效率并提高了交互式应用的用户使用体验。

4)设计整体索引结构不限制索引关键字数量。

基于同一发明构思,本发明实施例中还提供了一种地震数据的查询装置,可以包括:查询模块,用于根据待查询地震道的关键字的值,与预先构建的地震数据索引库进行查找,以确定所述地震道的道号;其中,预先构建的地震数据索引库是根据上述地震数据索引库的构建方法构建的。

基于同一发明构思,本发明实施例中还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述地震数据索引库的构建方法,或实现上述地震数据的查询方法。

基于同一发明构思,本发明实施例中还提供了一种计算机设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述地震数据索引库的构建方法,或实现上述地震数据的查询方法。

本发明实施例中的上述装置、介质、相关设备和索引库所解决问题的原理与前述地震数据索引库的构建方法相似,因此其实施可以参见前述方法的实施,重复之处不再赘述。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

技术分类

06120116087566