
本发明涉及测井
技术领域:
,特别涉及一种测井数据动态高效存取方法。
背景技术:
:石油勘探过程中,必须依赖测井技术采集地下岩石的各种物理方法,如电法,声波,核等,的响应数据,然后对测井数据进行处理解释,最终得到地下岩石的孔隙度,渗透率和含油饱和度等信息。随着物理,电子及信息技术的发展,测井仪器中数据采集的传感器已经实现阵列化,如声电成像和阵列声波等,采集数据中包含的信息越来越丰富,数据量也越来越大,例如电成像xrmi测井数据,深度采样间隔为0.00254米,每个深度上采集144个数据点,随着测量深度的增加,所采集数据量从几十kb到数百mb乃至数gb,这对测井数据处理解释软件在处理解释过程中的数据存取效率提出了更高的要求。目前,测井数据处理解释软件的数据存取,主要有两种方案:(1)将测井数据中的层级关系,如工区-井-井次等关系通过建立相应层级的文件夹来表达,将一个井次采集的测井数据的属性信息和数据体都存放在一个定义良好的二进制文件中(如马玲华,eclips5700测井系统xtf文件格式分析);(2)将测井数据中的层级关系和采集的测井数据的属性信息等存在数据库的相应结构体中,将一个井次采集的测井数据数据体则以通用二进制形式存放在外部文件或者数据库中(如cn201010506077,一种测井曲线数据的检索方法及装置)。现有方案存在三个缺点:1)成像测井数据量过大:以电成像xrmi测井数据为例,xrmi测井数据深度采样间隔为0.00254米,每个深度上采集144个数据点,随着测量深度的增加,所采集数据量从几十kb到数百mb乃至数gb,一般采集的原始数据都会有数百兆,经过处理形成的数据量则会更大,数gb都是常事。过大的数据量,不适合数据的交换、共享和网络传输等;2)大数据量的测井曲线数据操作效率低:测井处理解释软件在进行数据处理时,会不断生成新的曲线,以及修改曲线的某些数值、插入或删除某些数值等操作。目前现有技术是对曲线进行整体操作处理,对于成像测井数据,单条曲线数据量往往较大,几十到几百mb,上述操作效率低;3)无法判断已经损坏的数据体:软件在运行过程中,会不断的修改和删除数据体中的数据。由于写入数据量较大,写入过程往往会持续一段时间,持续时间从几十毫秒到几十秒不等,一旦写入过程因各种原因而中断,会导致存盘的数据体不完整或者损坏。另外,目前计算机病毒活动猖獗,也会损坏已经存盘的数据体。但现有技术都没有给出如何检测被损坏的数据文件。技术实现要素:本发明要解决的技术问题是:本发明通过将单条数据量较大的测井曲线数据动态拆分为多个数据量较小的数据块,以及将多个数据量较小的数据块动态合并为较大的数据块,以此实现曲线数据的插入、修改、删除等高效操作;本发明通过对拆分后的数据量较小的数据块压缩后存入文件或数据库中,以此解决测井数据体积过大的问题;本发明计算已存盘压缩数据体的哈希值,并保存到文件或数据库相应表中,以此解决数据损坏检测的问题。为了解决上述技术问题,本发明所采用的技术方案是:一种测井数据动态高效存取方法,包括如下步骤:步骤1,将测井数据中的曲线数据按照指定数据个数进行拆分,拆分为多个数据块,再将数据块压缩后存入文件或数据库中;步骤2,由应用模块请求,找到相应的一个或多个数据块,对比哈希值,解压缩,组合成一个数据体,从中筛选出符合要求的数据传递给应用模块;步骤3,利用数据块的创建与删除,数据块大小动态切分及合并,实现数据增加、删除和修改等的高效操作。优选的,所述步骤1包含:s11,将测井数据拆分为多个数据块:对一维曲线数据,按照索引顺序每隔指定数据个数将数据拆分为多个数据块;对二维曲线数据,按照先时间维,再深度维将数据由二维组合为一维数据,按照索引顺序每隔指定数据个数将数据拆分为多个数据块;对于三维曲线数据,按照时间维,传感器维,深度维将数据由三维组合为一维数据,最后按照索引顺序每隔指定数据个数将数据拆分为多个数据块;对拆分所形成的多个数据块进行命名或者取id;将拆分所形成的多个数据块暂存在内存中;s12,对拆分后得到数据块进行压缩处理;s13,将压缩后的数据块存入文件或数据库中;s14,对压缩后的数据块计算哈希值;s15,更新文件或数据库相关表格信息:在文件或数据库的相应结构体中记录一条曲线总共拆分的数据块的个数,每个数据块的名字或id,每个数据块所包含的数据索引范围,每个数据块存储的位置信息,以及每个数据块的哈希值。优选的,所述步骤2包含:s21,应用模块请求读取某一条件数据;s22,根据测井曲线名字和/或数据索引范围,在文件或数据库中找到相应的一个或多个数据块;s23,将找到的一个或多个数据块,读取到内存中,计算找到的数据块的哈希值;s24,将找到的数据块的哈希值,与保存在文件或数据库中的该数据块相应的哈希值进行比较,如果一致,则继续后续步骤,否则退出;s25,使用解压缩算法将找到的一个或多个数据块解压缩,获得原始数据,保存在内存中;s26,根据文件或数据库中所保存的上述一个或多个数据块在索引上的关系,将解压后的数据组合成一个数据体;s27,将所述组合的数据体中符合请求要求的数据传递给应用模块。优选的,所述步骤3包含:s31,在数据块中插入数据后,如果新生成的数据块中包含数据个数不超过规定个数,则保留;如果新生成的数据块中包含数据个数超出了设定的数据个数上限,则将新生成的数据块按照指定数据个数进行拆分,生成多个新的、较小的数据块;s32,在数据块中删除数据后,如果新生成的数据块中包含数据个数不少于规定个数,则保留;如果新生成的数据块中包含数据个数少于设定的数据个数下限,则将本数据块与上一个数据块合并;s33,在数据块中修改数据后,保留新生成的数据块;s34,对新生成的数据块进行压缩,存入文件或数据库中,计算哈希值,同时更新文件或数据库中相应结构中的数据块名字或id,数据索引范围和数据个数;s35,将所读取的原始数据块从文件或数据库中删除。优选的,步骤1中,所述指定数据个数由用户指定,形成的数据块大小由用户指定。本发明技术方案带来的有益效果是:1)本发明对测井曲线数据进行拆分,后续的修改,删除和增加等操作就只需要在对应的拆分后的较小的数据块中进行操作,不再需要对整条曲线进行读写操作,效率显著提升;2)本发明对拆分后的数据块进行压缩,显著减小了存储的数据量;3)本发明计算压缩后的数据块的哈希值,如果数据块有微小变化,那么其变化后的数据块的哈希值就与原始哈希值不一样,以此判断存储在磁盘或数据库中的数据块是否有损坏或篡改;4)本发明数据块的二次动态切分和合并,使得删除或插入数据后的数据块的大小趋于合理,不至于过大或者过小;5)本发明由于数据块是被压缩后存储的,所以数据的每次操作(删除、插入和修改等)都在内存中进行,然后直接保存新的数据块,删除旧的数据块。由于数据块不大,这种操作的效率很高。附图说明图1本发明一种测井数据动态高效存取方法流程示意图。图2本发明一种测井数据动态高效存取方法步骤1流程示意图。图3本发明一种测井数据动态高效存取方法步骤2流程示意图。图4本发明一种测井数据动态高效存取方法步骤3流程示意图。具体实施方式下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好的理解本发明并能予以实施,但所举实施例不作为对本发明的限定。如图1所示,本发明一种测井数据动态高效存取方法包括如下步骤:步骤1:将测井数据中的曲线数据按照指定数据个数进行拆分(初始拆分时,形成的数据块大小是由用户指定的,但数据块的数据个数并非固定,而是可以在一定范围内波动),拆分为多个数据块,再将数据块压缩后存入文件或数据库中;步骤2:由应用模块请求,找到相应的一个或多个数据块,对比哈希值,解压缩,组合成一条完整的曲线数据,将筛选符合要求的曲线数据传递给应用模块;步骤3:利用数据块的创建与删除,数据块大小动态调整及合并,实现数据增加、删除和修改等的高效操作。如图2所示,本发明一种测井数据动态高效存取方法的步骤1包含:s11,将测井数据拆分为多个数据块;s12,对拆分后得到数据块进行压缩处理;s13,将压缩后的数据块存入文件或数据库中;s14,对压缩后的数据块计算哈希值;s15,更新文件或数据库相关表格信息。其中,s11,将测井数据拆分为多个数据块,具体为:1)对一维曲线数据,按照索引(x轴)顺序每隔指定数据个数将数据(value)拆分为多个数据块。假如表1中的一维曲线数据伽马(gr)曲线每3个数据点拆分组成一个数据块,那表1中gr曲线数据则可以拆分为3个数据块,分别为gr块1(35.9,33.7,32.1),gr块2(31.5,34.1,38.6)和gr块3(45.3和51.1)。表1一维曲线数据示意深度(米)gr3000.135.93000.233.73000.332.13000.431.53000.534.13000.638.63000.745.33000.851.12)对二维曲线数据,按照先时间维(y轴),再深度索引维(x轴)将数据(value)由二维组合为一维数据,按照索引顺序每隔指定数据个数将数据拆分为多个数据块。将表2中的二维曲线数据核磁共振回波串(echo)曲线先按照时间维再深度维,将二维数据转换为一维曲线数据,转换后结果如表3所示,然后在拆分。假如每3个数据点拆分组成一个数据块,那么表3中的echo曲线数据可以拆分为4个数据块,分别为echo块1(25.5,14.5,16.3),echo块2(8.1,31.6,26.3),echo块3(27.4,20.3,30.2)和echo块4(27.3,24.8,19.2)。表2二维曲线数据示意表3二维曲线数据转换为一维曲线数据示意深度(米)echo3000.125.53000.114.53000.116.33000.18.13000.231.63000.226.33000.227.43000.220.33000.330.23000.327.33000.324.83000.319.23)对于三维曲线数据,按照时间维(z轴),传感器维(y轴),深度索引维(x轴)将数据(value)由三维组合为一维数据,最后按照索引顺序每隔指定数据个数将数据拆分为多个数据块。将表4中的三维曲线数据阵列声波波形(tfwv01)曲线先按照时间维,传感器维再深度维,将三维数据转换为一维曲线数据,转换后结果如表5所示,然后再拆分。假如每3个数据点拆分组成一个数据块,那么表5中的tfwv01曲线数据可以拆分为6个数据块,分别为tfwv01块1(36,-33,-21),tfwv01块2(-63,54,34),tfwv01块3(30,19,103),tfwv01块4(117,74,109),tfwv01块5(-203,-129,-177)和tfwv01块6(-112)。表4三维曲线数据示意表5三维曲线数据转换为一维曲线数据示意深度(米)tfwv013000.1363000.1-333000.1-213000.1-633000.1543000.1343000.1303000.1193000.21033000.21173000.2743000.21093000.2-2033000.2-1293000.2-1773000.2-112对拆分所形成的多个数据块进行命名或者取id;将拆分所形成的多个数据块暂存在内存中。s12,对拆分后得到数据块进行压缩处理:目前,数据压缩算法和算法库很成熟,可以根据需要进行选择适用。例如使用zlib压缩库中的压缩函数compress()对拆分形成的数据块进行压缩处理,得到压缩后的二进制数据块。对拆分并压缩得到的多个数据块进行命名或者取id,并存储到相应的表格中。如将上述一维曲线gr,二维曲线echo和三维曲线tfwv01拆分压缩后形成的数据块名字存在表6中。表6拆分压缩后数据块名与id对应表数据块id数据块名1gr块12gr块23gr块34echo块15echo块26echo块37echo块48tfwv01块19tfwv01块210tfwv01块311tfwv01块412tfwv01块513tfwv01块6s13,将压缩后的二进制数据块存入文件或数据库的相应结构中:将经过压缩处理得到的二进制数据块以二进制方式写入外部文件中,或者将二进制数据块以blob的方式保存到数据库相应结构的字段中,如表8中的存储位置字段中。s14,计算压缩后的二进制数据块的哈希值:目前,数据块的哈希值(如md5,sha1,sha224,sha256,sha384,sha512等)计算算法和算法库也很成熟,可以根据开发语言选择相应的算法库进行计算。如python语言的hashlib,c#语言的system.security.cryptography,c++语言的hashlib++等。s15,更新文件或数据库相关表格信息:在文件或数据库的相应结构中记录一条曲线总共拆分的数据块的个数,每个数据块的名字或id,每个数据块所包含的数据索引范围,每个数据块存储的位置信息,以及每个数据块的哈希值。将曲线及曲线拆分相关信息存储到表7中,表中记录了曲线id,曲线名字,拆分后形成的数据块数,曲线维数及每一维上的数据点数。将拆分后形成的数据块信息存储到表8中,表中记录了曲线id,拆分后形成的数据块id,数据块名字,当前数据块中存储的数据个数,数据对应的x轴范围,数据块中数据的排序编号,数据块存储位置(如果存储在文件中,则为文件路径;如果存储在数据库中,则为blob存放的表格id等)和当前数据块对应的哈希值。表7曲线拆分数据块信息表curveid曲线名字数据块数维数x轴点数y轴点数z轴点数1gr311112echo421413tfwv0163124表8数据块信息存储表如图3所示,本发明一种测井数据动态高效存取方法的步骤2包含:s21,应用模块请求读取某一范围数据:例如,当应用模块请求读取测井曲线gr的3000.2-3000.7的数据时,应用模块将上述曲线名字gr和深度索引范围3000.2-3000.7发给数据存取管理模块;s22,根据测井曲线名字和/或数据索引范围等信息,在文件或数据库中找到相应的一个或多个数据块:例如,数据存取管理模块接到应用模块提交的曲线名字gr和深度索引范围3000.2-3000.7后,在表7中检索到曲线gr的曲线id,曲线被拆分为了3个数据块,以及曲线gr的维度信息。然后根据曲线gr的曲线id在表8中检索到曲线gr拆分后形成的三个数据块,及每个数据块存储数据对应的x轴范围。与应用模块提交的深度范围3000.2-3000.7进行对比,可以找到应用模块需要的数据存储在gr块1,gr块2和gr块3中;s23,将找到的一个或多个数据块,读取到内存中,计算找到的数据块的哈希值:例如,将找到的gr块1,gr块2和gr块3读取到内存中,使用哈希算法库中的相关哈希值(如md5,sha1,sha224,sha256,sha384,sha512等)计算函数计算出gr块1,gr块2和gr块3对应的哈希值;s24,将找到的数据块的哈希值,与保存在文件或数据库中的该数据块相应的哈希值进行比较,如果一致,则继续后续步骤,否则退出:例如,将计算的gr块1,gr块2和gr块3的哈希值与保存在表8中的哈希值进行比较,如果一致,则说明数据块完整,否则提示数据块被损坏,退出;s25,使用解压缩算法将找到的一个或多个数据块解压缩,获得原始数据,保存在内存中:例如,使用数据压缩算法库,如zlib中的解压缩函数uncompress()对gr块1,gr块2和gr块3进行解压缩处理,还原出原始的数值;s26,根据文件或数据库中所保存的上述一个或多个数据块在索引上的关系,将解压后的数据组合成一个数据体:例如,根据表8中记录的gr块1,gr块2和gr块3的数据对应的排序编号(1-8)和x轴范围(3000.1-3000.8)可以将数据恢复组合出如表1所示的一个数据体;s27,将符合请求条件的数据传递给应用模块:例如,根据应用模块传递的曲线深度范围(3000.2-3000.7),在恢复组合出的如表1所示曲线中通过深度对比找到所需要的数据[(3000.2,33.7);(3000.3,32.1);(3000.4,31.5);(3000.5,34.1);(3000.6,38.6);(3000.7,45.3)]。然后将上述数据传递应用模块。如图4所示,本发明一种测井数据动态高效存取方法的步骤3包含:s31,在数据块中插入数据后,如果新生成的数据块中包含数据个数不超过规定个数,则保留;如果新生成的数据块中包含数据个数超出了设定的数据个数上限,则将新生成的数据块按照指定数据个数进行拆分,生成多个新的、较小的数据块。假如用户需要将深度为3000.32,数值为28.4的数据插入到测井曲线gr中,通过本发明的步骤2可以找到新数据(3000.32,28.4)插入的位置为深度3000.3之后,深度3000.4之前。因为深度3000.32与3000.3更加接近,所以将数据插入到解压后的gr块1的数据末尾。如果长度没有超过规定个数,则压缩后形成新的gr块1,命名为gr块4,更新表8形成表9,最后删除与gr块1对应的存储在磁盘中文件或数据库中的blob。表9数据块中插入数据后的信息存储表假设每个数据块中数据不能超过3个,则插入增加一个数据后,新生成的数据块gr块4有4个数据,已经超过规定的3个,将gr块4拆分为2个数据块,每个数据块有2个数据,压缩后形成的数据块分别命名gr块5和gr块6,更新表9形成表10,最后删除与gr块4对应的存储在磁盘中的文件或数据库中的blob。表10数据块中插入数据并拆分后的信息存储表s32,在数据块中删除数据后,如果新生成的数据块中包含数据个数不少于规定个数,则保留;如果新生成的数据块中包含数据个数少于设定的数据个数下限,则将本数据块与上一个数据块合并。假如用户需要将深度为3000.4和3000.5的2个数据从测井曲线gr中删除,通过本发明的步骤2可以找到删除数据所在数据块为gr块2.将解压后的数据块gr块2中对应的2个数据删除后,本数据块只剩下1个数据,但并没有小于规定个数,则压缩后形成新的gr块2,命名为gr块7,更新表10形成表11,最后删除与gr块2对应的存储在磁盘中文件或数据库中的blob。表11数据块中删除数据后的信息存储表假设每个数据块中数据不能少于2个,则删除2个数据新生成的gr块7只有1个数据,不满足条件,将其与下一个数据块gr块3进行合并,根据数据块删除数据流程图(见图4)将gr块7和gr块3合并为一个包含有3个数据的数据块,压缩后形成的数据块命名gr块8,更新表11形成表12,最后删除与gr块7和gr块3对应的存储在磁盘中的文件或数据库中的blob。表12数据块中删除数据并合并后的信息存储表s33,在数据块中修改数据后,保留新生成的数据块;假如用户需要对测井曲线gr深度为3000.7的数值进行修改,通过步骤2可以找到删除数据所在数据块为gr块8,将gr块8的数据读取到内存中,解压后,修改深度3000.7对应的数值,然后压缩生成新的数据块gr块9,更新表12形成表13,后删除与gr块8对应的存储在磁盘中的文件或数据库中的blob。表13数据块中删除数据并合并后的信息存储表s34,对新生成的数据块进行压缩,存入文件或数据库中,计算哈希值,同时更新文件或数据库中相应结构中的数据块名字或id,数据索引范围和数据个数等内容;s35,将所读取的原始数据块从文件或数据库中删除。以上所述实施例仅是为充分说明本发明而所举的较佳的实施例,本发明的保护范围不限于此。本
技术领域:
的技术人员在本发明基础上所作的等同替代或变换,均在本发明的保护范围之内。本发明的保护范围以权利要求书为准。当前第1页12