CN112347045A - 一种海量电缆隧道状态信号数据的存储方法 - Google Patents
一种海量电缆隧道状态信号数据的存储方法 Download PDFInfo
- Publication number
- CN112347045A CN112347045A CN202011372694.3A CN202011372694A CN112347045A CN 112347045 A CN112347045 A CN 112347045A CN 202011372694 A CN202011372694 A CN 202011372694A CN 112347045 A CN112347045 A CN 112347045A
- Authority
- CN
- China
- Prior art keywords
- variable
- file
- time
- operator
- cable tunnel
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 33
- 238000003491 array Methods 0.000 claims description 18
- 238000004458 analytical method Methods 0.000 abstract description 3
- 238000013500 data storage Methods 0.000 abstract description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003449 preventive effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/1734—Details of monitoring file system events, e.g. by the use of hooks, filter drivers, logs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q50/00—Information and communication technology [ICT] specially adapted for implementation of business processes of specific business sectors, e.g. utilities or tourism
- G06Q50/06—Energy or water supply
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Health & Medical Sciences (AREA)
- Economics (AREA)
- Water Supply & Treatment (AREA)
- Tourism & Hospitality (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- Primary Health Care (AREA)
- Marketing (AREA)
- Human Resources & Organizations (AREA)
- General Health & Medical Sciences (AREA)
- Public Health (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种基于时间块冗余存储结构体的海量电缆隧道状态信号数据存储方法。对于输入的电缆隧道状态信号,构造了冗余存储结构体并以该结构体为单位构建存储块,最终将块存储于云服务器。利用本发明存储的电缆隧道状态信号是以分钟为单位的存储的,每一个存储结构体中包含着当前时间点,以及基于当前时间点之前时间点数据变化统计,使得相关的分析算法可以在一次读取中获得更多的数据信息,防止在读取数据时出现频繁的跨越不同的云存储文件访问的现象,极大的提高访问效率。
Description
技术领域:
本发明公开一种海量电缆隧道状态信号数据的存储方法,涉及一种基于时间块冗余存储结构体的海量电缆隧道状态信号数据存储方法,属于电缆隧道状态信号处理技术领域。
背景技术:
电缆隧道故障影响电力电网建设效能的发挥。因此,如何应用科学手段实现对电力电缆隧道状态及环境的监控、预警和定位、以便及时提醒维护人员提前采取预防措施显得十分的紧迫和必要,在这一过程中需要对海量的电缆隧道状态信号进行存储。
对应海量的电缆隧道状态信号当前存储方法有三种:一是,采用传统的关系数据库进行存储,这种方式最易于实现,但是这种方式需要以数据库查询语句的形式获取单独信号数据,所以这种方法读取效率较低;二是,顺次的将信号数据写入到本地的文件系统中,受到单一计算机存储能力的限制,写入本地文件的数据量有限,于此同时单机存储会给数据在一个大系统范围内共享带来阻碍;三是,将信号数据写入到云存储中(如Hadoop存储集群),这种方式比数据库方式快的多又能容纳和共享较大数据量,所以这种存储模式会获得较佳的应用效果;然而,在进行海量电缆隧道状态信号分析的过程中信号数据不是独立的,而是需要与一定时间范围内的数据进行比较,而模式就可能导致频繁的跨越不同的云存储文件甚至不同的存储服务器的访问,这种模式会引起大量的磁盘争用或者在存储集群管理端的I/O网络流量瓶颈。
因此需要提出一种方法,一方面可以将电缆隧道状态信号存储于与服务器上,又可以有效降低频繁的跨越不同的云存储文件访问,从而提高电缆隧道状态信号在云服务器上的访问效率。
发明内容
本发明提供一种海量电缆隧道状态信号数据的存储方法,基于时间块冗余存储结构体的海量电缆隧道状态信号数据存储方法,对于输入的电缆隧道状态信号,本发明构造了冗余存储结构体并以该结构体为单位构建存储块,最终将块存储于云服务器。
本发明提供了一种海量电缆隧道状态信号数据的存储方法,包括以下步骤:
S1, 输入一分钟内电缆隧道状态信号的个数SNum,建立时间块冗余存储结构体TimeBlockStruct;
S101,输入一分钟内电缆隧道状态信号的个数SNum,SNum的默认值为600;
S102,时间块冗余存储结构TimeBlock,该存储结构包含以下字段:
CurrentBlock:当前时间电缆隧道状态信号数据,为SNum个的浮点型数组;
PrevBlock1:前一分钟电缆隧道状态信号差异数据,为SNum个的浮点型数组;
PrevBlock2:前二分钟电缆隧道状态信号差异数据,为SNum个的浮点型数组;
PrevDayBlock1:与当前时间对应的前一天电缆隧道状态信号差异数据,为SNum个的浮点型数组;
PrevDayBlock2:与当前时间对应的前两天电缆隧道状态信号差异数据,为SNum个的浮点型数组;
StBlock:截止当前时间为止电缆隧道状态信号数据的统计量,为SNum个的浮点型数组;
S2, 建立时间编码算子TimeCodeOpt,输入为算子输入日期时间变量OptInput,输出为编码字符串变量OptOutput;
S201,建立时间编码算子TimeCodeOpt,输入为算子输入日期时间变量OptInput;
S202,算子年变量OptYear=获得OptInput中的年并将数据类型转换为4个字符长度的字符串,算子月变量OptMonth=获得OptInput中的月并将数据类型转换为2个字符长度的字符串,算子日变量OptDay=获得OptInput中的日并将数据类型转换为2个字符长度的字符串,算子分钟变量OptMinute=获得OptInput是一天中的第几分钟并将数据类型转换为4个字符长度的字符串;
S203,编码字符串变量OptOutput=OptYear+OptMonth+OptDay+OptMinute,在该等式中“+”表示进行字符串连接;
S204,输出OptOutput;
S3,输入起始时间点变量StartTime,输入结束时间点变量EndTime,利用TimeCodeOpt建立基于TimeBlockStruct结构体的文件,获取所有TimeBlockStruct结构体文件的个数变量StructFileNums,获取文件名列表StructFileList;
S301,输入起始时间点变量StartTime,输入结束时间点变量EndTime;
S302,迭代时间点ItTime=StartTime; 结构体文件的个数变量StructFileNums=0;文件名列表StructFileList=空列表;
S303,迭代文件名ItFile=利用时间编码算子TimeCodeOpt进行计算,算子的输入OptInput=ItTime输出结果为OptOutput;
S304,迭代空白结构体变量ItEmptyStruct=新建一个TimeBlockStruct结构体,结构体内所有变量的值设置为0;
S305,建立名为ItFile的文件,将ItEmptyStruct存储到ItFile之中;
S306,ItTime=ItTime的下一分钟所对应的时间;StructFileNums=StructFileNums+1;将ItFile追加到StructFileList之中;
S307,如果ItTime>EndTime则转到S308,否则转到S303;
S308,该步骤执行结束;
S4,持续输入StartTime到EndTime电缆隧道状态信号,对于每一组电缆隧道状态信号的输入包含一个时间点CurrentTime和对应的一分钟内电缆隧道状态信号数据Array,将数据存储到TimeBlockStruct结构体的文件之中;
S401,持续输入StartTime到EndTime电缆隧道状态信号,对于每一组电缆隧道状态信号的输入包含一个时间点CurrentTime和对应的一分钟内电缆隧道状态信号数据Array;
S402,后一分钟时间变量SaveAft1=CurrentTime的后一分钟对应的时间;
S403,后两分钟时间变量SaveAft2=CurrentTime的后两分钟对应的时间;
S404,后一天时间变量SaveDay1=与CurrentTime的当前时间对应的后一天的时间;
S405,后两天时间变量SaveDay2=与CurrentTime的当前时间对应的后两天的时间;
S406,CurrentTime对应文件名FileCurrentTime=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=CurrentTime输出结果为OptOutput;
S407,SaveAft1对应文件名FileSaveAft1=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=SaveAft1输出结果为OptOutput;
S408,SaveAft2对应文件名FileSaveAft2=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=SaveAft2输出结果为OptOutput;
S409,SaveDay1对应文件名FileSaveDay1=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=SaveDay1输出结果为OptOutput;
S410,SaveDay2对应文件名FileSaveDay1=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=SaveDay2输出结果为OptOutput;
S411,建立TimeBlockStruct类型的暂存结构体第一变量TempStruct1, 建立TimeBlockStruct类型的暂存结构体第二变量TempStruct2;
S412,读取文件FileCurrentTime的内容到TempStruct1之中,TempStruct1,CurrentBlock=Array, TempStruct1,StBlock=(TempStruct1,StBlock+Array)/2;
S413, 读取文件FileSaveAft1的内容到TempStruct2之中,TempStruct2,PrevBlock1=Array,TempStruct2,StBlock=TempStruct1,StBlock, 将TempStruct2写入到FileSaveAft1之中;
S414, 读取文件FileSaveAft2的内容到TempStruct2之中,TempStruct2,PrevBlock2=Array,将TempStruct2写入到FileSaveAft2之中;
S415, 读取文件FileSaveDay1的内容到TempStruct2之中,TempStruct2,PrevDayBlock1=Array,将TempStruct2写入到FileSaveDay1之中;
S416, 读取文件FileSaveDay2的内容到TempStruct2之中,TempStruct2,PrevDayBlock2=Array,将TempStruct2写入到FileSaveDay2之中;
S417, TempStruct1,PrevBlock1=Tanh(TempStruct1,PrevBlock1-Array), 其中Tanh为双曲正切函数;
S418, TempStruct1,PrevBlock2=Tanh(TempStruct1,PrevBlock2-Array), 其中Tanh为双曲正切函数;
S419, TempStruct1,PrevDayBlock1=ABS(TempStruct1,PrevDayBlock1-Array), 其中ABS为求绝对值
S420,TempStruct1,PrevDayBlock2=ABS(TempStruct1,PrevDayBlock2-Array), 其中ABS为求绝对值;
S421, 将TempStruct1写入到FileCurrentTime之中;
S5,设定云存储文件块大小MaxSize,获得每个云存储文件块包含结构体数量Blocks,获得文件块数变量BlocksNum,顺次将所有TimeBlockStruct结构体文件写入到云存储之中,获取云存储文件名链接列表CloudList中;
S501,每个云存储文件块包含结构体数量Blocks=floor(MaxSize/(SNum×6×8)), 其中floor为去除一个数的小数部分;
S502,文件块数变量BlocksNum=Round(StructFileNums/Blocks), 其中Round为进行小数部分的四舍五入;
S503, 如果StructFileNums%Blocks不等于0则BlocksNum=BlocksNum+1;其中%表示求余操作;
S504,块计数器BSCounter=1;云存储文件名链接列表CloudList=空列表;
S505,文件列表起始位置BSStart=(BSCounter-1)×Blocks+1;文件列表结束位置BSEnd=(BSCounter-1)×Blocks+Blocks;
S506,如果BSEnd>StructFileNums则BSEnd=StructFileNums;
S507,读取StructFileList中的第BSStart至BSEnd中的所有对应文件,并将读取到的数据内容顺次放入云存储块数据变量BigBlob中;
S508,将BigBlob存储到云服务器之中,将存储对应的文件链接追加到CloudList中;
S509,BSCounter=BSCounter+1;
S510,如果BSCounter>BlocksNum则转到S511,否则转到S505;
S511,存储过程结束;
S6,指定要读取数据的时间点CloudReadTime,读取对应该数据到读取结果变量CloudStruct;
S601,CloudReadTime对应文件名CloudReadTimeFile=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=CloudReadTime算子的输出结果为OptOutput;
S602,列表位置RPos=获得CloudReadTimeFile在StructFileList中的位置;
S603,云位置CloudPos= Round(RPos/Blocks+0,5), 其中Round为进行小数部分的四舍五入;
S604,记录位置RecodPos=RPos-(RPos%Blocks×Blocks);
S605,读取云服务器上CloudList[CloudPos]所对应文件的内容到云文件内容变量CloudBlob;
S606,CloudStruct=以TimeBlockStruct为读取单位获取CloudBlob中第RecodPos个记录的内容;
S607,读取过程结束。
本发明的有益效果是:提供一种基于时间块冗余存储结构体的海量电缆隧道状态信号数据存储方法。对于输入的电缆隧道状态信号,本方法构造了冗余存储结构体并以该结构体为单位构建存储块,最终将块存储于云服务器。利用本发明发明存储的电缆隧道状态信号是以分钟为单位的存储的,每一个存储结构体中包含着当前时间点,以及基于当前时间点之前时间点数据变化统计,使得相关的分析算法可以在一次读取中获得更多的数据信息,防止在读取数据时出现频繁的跨越不同的云存储文件访问的现象,极大的提高访问效率。
具体实施方式
通过以下实施例进一步举例描述本发明,并不以任何方式限制本发明,在不背离本发明的技术解决方案的前提下,对本发明所作的本领域普通技术人员容易实现的任何改动或改变都将落入本发明的权利要求范围之内。
实施例1
以北方某地区的电缆隧道为例,利用本发明对电缆隧道信号数据进行存储:
S1, 输入一分钟内电缆隧道状态信号的个数SNum,建立时间块冗余存储结构体TimeBlockStruct;
S101,输入一分钟内电缆隧道状态信号的个数SNum,SNum的默认值为600;
S102,时间块冗余存储结构TimeBlock,该存储结构包含以下字段:
CurrentBlock:当前时间电缆隧道状态信号数据,为SNum个的浮点型数组;
PrevBlock1:前一分钟电缆隧道状态信号差异数据,为SNum个的浮点型数组;
PrevBlock2:前二分钟电缆隧道状态信号差异数据,为SNum个的浮点型数组;
PrevDayBlock1:与当前时间对应的前一天电缆隧道状态信号差异数据,为SNum个的浮点型数组;
PrevDayBlock2:与当前时间对应的前两天电缆隧道状态信号差异数据,为SNum个的浮点型数组;
StBlock:截止当前时间为止电缆隧道状态信号数据的统计量,为SNum个的浮点型数组;
输入SNum=600;
建立时间块冗余存储结构体TimeBlockStruct;
S2, 建立时间编码算子TimeCodeOpt,输入为算子输入日期时间变量OptInput,输出为编码字符串变量OptOutput;
S201,建立时间编码算子TimeCodeOpt,输入为算子输入日期时间变量OptInput;
S202,算子年变量OptYear=获得OptInput中的年并将数据类型转换为4个字符长度的字符串,算子月变量OptMonth=获得OptInput中的月并将数据类型转换为2个字符长度的字符串,算子日变量OptDay=获得OptInput中的日并将数据类型转换为2个字符长度的字符串,算子分钟变量OptMinute=获得OptInput是一天中的第几分钟并将数据类型转换为4个字符长度的字符串;
S203,编码字符串变量OptOutput=OptYear+OptMonth+OptDay+OptMinute,在该等式中“+”表示进行字符串连接;
S204,输出OptOutput;
S3,输入起始时间点变量StartTime,输入结束时间点变量EndTime,利用TimeCodeOpt建立基于TimeBlockStruct结构体的文件,获取所有TimeBlockStruct结构体文件的个数变量StructFileNums,获取文件名列表StructFileList;
S301,输入起始时间点变量StartTime,输入结束时间点变量EndTime;
S302,迭代时间点ItTime=StartTime; 结构体文件的个数变量StructFileNums=0; 文件名列表StructFileList=空列表;
S303,迭代文件名ItFile=利用时间编码算子TimeCodeOpt进行计算,算子的输入OptInput=ItTime输出结果为OptOutput;
S304,迭代空白结构体变量ItEmptyStruct=新建一个TimeBlockStruct结构体,结构体内所有变量的值设置为0;
S305,建立名为ItFile的文件,将ItEmptyStruct存储到ItFile之中;
S306,ItTime=ItTime的下一分钟所对应的时间;StructFileNums=StructFileNums+1;将ItFile追加到StructFileList之中;
S307,如果ItTime>EndTime则转到S308,否则转到S303;
S308,该步骤执行结束;
输入起始时间点变量StartTime=2018-01-01;
输入结束时间点变量EndTime=2019-12-31;
利用TimeCodeOpt建立基于TimeBlockStruct结构体的文件,获取所有TimeBlockStruct;结构体文件的个数变量StructFileNums=720;
获取文件名列表StructFileList,StructFileList为720个元素的列表;
S4,持续输入StartTime到EndTime电缆隧道状态信号,对于每一组电缆隧道状态信号的输入包含一个时间点CurrentTime和对应的一分钟内电缆隧道状态信号数据Array,将数据存储到TimeBlockStruct结构体的文件之中;
S401,持续输入StartTime到EndTime电缆隧道状态信号,对于每一组电缆隧道状态信号的输入包含一个时间点CurrentTime和对应的一分钟内电缆隧道状态信号数据Array;
S402,后一分钟时间变量SaveAft1=CurrentTime的后一分钟对应的时间;
S403,后两分钟时间变量SaveAft2=CurrentTime的后两分钟对应的时间;
S404,后一天时间变量SaveDay1=与CurrentTime的当前时间对应的后一天的时间;
S405,后两天时间变量SaveDay2=与CurrentTime的当前时间对应的后两天的时间;
S406, CurrentTime对应文件名FileCurrentTime=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=CurrentTime输出结果为OptOutput;
S407, SaveAft1对应文件名FileSaveAft1=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=SaveAft1输出结果为OptOutput;
S408, SaveAft2对应文件名FileSaveAft2=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=SaveAft2输出结果为OptOutput;
S409, SaveDay1对应文件名FileSaveDay1=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=SaveDay1输出结果为OptOutput;
S410, SaveDay2对应文件名FileSaveDay1=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=SaveDay2输出结果为OptOutput;
S411,建立TimeBlockStruct类型的暂存结构体第一变量TempStruct1, 建立TimeBlockStruct类型的暂存结构体第二变量TempStruct2;
S412,读取文件FileCurrentTime的内容到TempStruct1之中,TempStruct1,CurrentBlock=Array, TempStruct1,StBlock=(TempStruct1,StBlock+Array)/2;
S413, 读取文件FileSaveAft1的内容到TempStruct2之中,TempStruct2,PrevBlock1=Array,TempStruct2,StBlock=TempStruct1,StBlock, 将TempStruct2写入到FileSaveAft1之中;
S414, 读取文件FileSaveAft2的内容到TempStruct2之中,TempStruct2,PrevBlock2=Array,将TempStruct2写入到FileSaveAft2之中;
S415, 读取文件FileSaveDay1的内容到TempStruct2之中,TempStruct2,PrevDayBlock1=Array,将TempStruct2写入到FileSaveDay1之中;
S416, 读取文件FileSaveDay2的内容到TempStruct2之中,TempStruct2,PrevDayBlock2=Array,将TempStruct2写入到FileSaveDay2之中;
S417, TempStruct1,PrevBlock1=Tanh(TempStruct1,PrevBlock1-Array), 其中Tanh为双曲正切函数;
S418, TempStruct1,PrevBlock2=Tanh(TempStruct1,PrevBlock2-Array), 其中Tanh为双曲正切函数;
S419, TempStruct1,PrevDayBlock1=ABS(TempStruct1,PrevDayBlock1-Array), 其中ABS为求绝对值;
S420,TempStruct1,PrevDayBlock2=ABS(TempStruct1,PrevDayBlock2-Array), 其中ABS为求绝对值;
S421, 将TempStruct1写入到FileCurrentTime之中;
S5,设定云存储文件块大小MaxSize,获得每个云存储文件块包含结构体数量Blocks,获得文件块数变量BlocksNum,顺次将所有TimeBlockStruct结构体文件写入到云存储之中,获取云存储文件名链接列表CloudList中;
S501,每个云存储文件块包含结构体数量Blocks=floor(MaxSize/(SNum×6×8)), 其中floor为去除一个数的小数部分;
S502,文件块数变量BlocksNum=Round(StructFileNums/Blocks), 其中Round为进行小数部分四舍五入;
S503, 如果StructFileNums%Blocks不等于0则BlocksNum=BlocksNum+1;其中%表示求余操作;
S504,块计数器BSCounter=1;云存储文件名链接列表CloudList=空列表;
S505,文件列表起始位置BSStart=(BSCounter-1)×Blocks+1;文件列表结束位置BSEnd=(BSCounter-1)×Blocks+Blocks;
S506,如果BSEnd>StructFileNums则BSEnd=StructFileNums;
S507,读取StructFileList中的第BSStart至BSEnd中的所有对应文件,并将读取到的数据内容顺次放入云存储块数据变量BigBlob中;
S508,将BigBlob存储到云服务器之中,将存储对应的文件链接追加到CloudList中;
S509,BSCounter=BSCounter+1;
S510,如果BSCounter>BlocksNum则转到S511,否则转到S505;
S511,存储过程结束。
设定云存储文件块大小MaxSize=640000;
获得每个云存储文件块包含结构体数量Blocks=22;
文件块数变量BlocksNum=33;
顺次将所有TimeBlockStruct结构体文件写入到云存储之中,获取云存储文件名链接列表CloudList中, CloudList为33个元素的列表;
S6,指定要读取数据的时间点CloudReadTime,读取对应该数据到读取结果变量CloudStruct;
S601,CloudReadTime对应文件名CloudReadTimeFile=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=CloudReadTime算子的输出结果为OptOutput;
S602,列表位置RPos=获得CloudReadTimeFile在StructFileList中的位置;
S603,云位置CloudPos= Round(RPos/Blocks+0,5), 其中Round为进行小数部分四舍五入;
S604,记录位置RecodPos=RPos-(RPos%Blocks×Blocks);
S605, 读取云服务器上CloudList[CloudPos]所对应文件的内容到云文件内容变量CloudBlob;
S606,CloudStruct=以TimeBlockStruct为读取单位获取CloudBlob中第RecodPos个记录的内容;
S607,读取过程结束。
指定要读取数据的时间点CloudReadTime=2018-7-1;成功读取到对应的数据。
实施例2:
本发明的方法与传统数据库、传统文件系统和云存储作为比对的对象。以北方某地区的电缆隧道状态信号数据的存储和获取任务做为测试对象,在数据存储阶段4个方法均存储2016年1月至2020年10月的所有数据;在读取的时候,引入100个线程并行读取,每个线程随机读取50000个时间点数据。完成读取任务的访问时间如下。
完成读取任务的时间(秒) | |
本发明方法 | 237 |
传统数据库 | 3573 |
文件系统 | 2733 |
云存储 | 874 |
从表格可以看出,本发明方法完成任务的时间明显优于其他三个方法,说明本发明方法采用的存储结构更加适合海量电缆隧道状态信号数据的存储,可以获得更高的访问性能。
Claims (1)
1.一种海量电缆隧道状态信号数据的存储方法,包括以下步骤:
S1, 输入一分钟内电缆隧道状态信号的个数SNum,建立时间块冗余存储结构体TimeBlockStruct;
S101,输入一分钟内电缆隧道状态信号的个数SNum,SNum的默认值为600;
S102,时间块冗余存储结构TimeBlock,该存储结构包含以下字段:
CurrentBlock:当前时间电缆隧道状态信号数据,为SNum个的浮点型数组;
PrevBlock1:前一分钟电缆隧道状态信号差异数据,为SNum个的浮点型数组;
PrevBlock2:前二分钟电缆隧道状态信号差异数据,为SNum个的浮点型数组;
PrevDayBlock1:与当前时间对应的前一天电缆隧道状态信号差异数据,为SNum个的浮点型数组;
PrevDayBlock2:与当前时间对应的前两天电缆隧道状态信号差异数据,为SNum个的浮点型数组;
StBlock:截止当前时间为止电缆隧道状态信号数据的统计量,为SNum个的浮点型数组;
S2, 建立时间编码算子TimeCodeOpt,输入为算子输入日期时间变量OptInput,输出为编码字符串变量OptOutput;
S201,建立时间编码算子TimeCodeOpt,输入为算子输入日期时间变量OptInput;
S202,算子年变量OptYear=获得OptInput中的年并将数据类型转换为4个字符长度的字符串,算子月变量OptMonth=获得OptInput中的月并将数据类型转换为2个字符长度的字符串,算子日变量OptDay=获得OptInput中的日并将数据类型转换为2个字符长度的字符串,算子分钟变量OptMinute=获得OptInput是一天中的第几分钟并将数据类型转换为4个字符长度的字符串;
S203,编码字符串变量OptOutput=OptYear+OptMonth+OptDay+OptMinute,在该等式中“+”表示进行字符串连接;
S204,输出OptOutput;
S3,输入起始时间点变量StartTime,输入结束时间点变量EndTime,利用TimeCodeOpt建立基于TimeBlockStruct结构体的文件,获取所有TimeBlockStruct结构体文件的个数变量StructFileNums,获取文件名列表StructFileList;
S301,输入起始时间点变量StartTime,输入结束时间点变量EndTime;
S302,迭代时间点ItTime=StartTime; 结构体文件的个数变量StructFileNums=0;文件名列表StructFileList=空列表;
S303,迭代文件名ItFile=利用时间编码算子TimeCodeOpt进行计算,算子的输入OptInput=ItTime输出结果为OptOutput;
S304,迭代空白结构体变量ItEmptyStruct=新建一个TimeBlockStruct结构体,结构体内所有变量的值设置为0;
S305,建立名为ItFile的文件,将ItEmptyStruct存储到ItFile之中;
S306,ItTime=ItTime的下一分钟所对应的时间;StructFileNums=StructFileNums+1;将ItFile追加到StructFileList之中;
S307,如果ItTime>EndTime则转到S308,否则转到S303;
S308,该步骤执行结束;
S4,持续输入StartTime到EndTime电缆隧道状态信号,对于每一组电缆隧道状态信号的输入包含一个时间点CurrentTime和对应的一分钟内电缆隧道状态信号数据Array,将数据存储到TimeBlockStruct结构体的文件之中;
S401,持续输入StartTime到EndTime电缆隧道状态信号,对于每一组电缆隧道状态信号的输入包含一个时间点CurrentTime和对应的一分钟内电缆隧道状态信号数据Array;
S402,后一分钟时间变量SaveAft1=CurrentTime的后一分钟对应的时间;
S403,后两分钟时间变量SaveAft2=CurrentTime的后两分钟对应的时间;
S404,后一天时间变量SaveDay1=与CurrentTime的当前时间对应的后一天的时间;
S405,后两天时间变量SaveDay2=与CurrentTime的当前时间对应的后两天的时间;
S406,CurrentTime对应文件名FileCurrentTime=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=CurrentTime输出结果为OptOutput;
S407,SaveAft1对应文件名FileSaveAft1=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=SaveAft1输出结果为OptOutput;
S408,SaveAft2对应文件名FileSaveAft2=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=SaveAft2输出结果为OptOutput;
S409, SaveDay1对应文件名FileSaveDay1=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=SaveDay1输出结果为OptOutput;
S410,SaveDay2对应文件名FileSaveDay1=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=SaveDay2输出结果为OptOutput;
S411,建立TimeBlockStruct类型的暂存结构体第一变量TempStruct1, 建立TimeBlockStruct类型的暂存结构体第二变量TempStruct2;
S412,读取文件FileCurrentTime的内容到TempStruct1之中,TempStruct1,CurrentBlock=Array, TempStruct1,StBlock=(TempStruct1,StBlock+Array)/2;
S413, 读取文件FileSaveAft1的内容到TempStruct2之中,TempStruct2,PrevBlock1=Array,TempStruct2,StBlock=TempStruct1,StBlock, 将TempStruct2写入到FileSaveAft1之中;
S414, 读取文件FileSaveAft2的内容到TempStruct2之中,TempStruct2,PrevBlock2=Array,将TempStruct2写入到FileSaveAft2之中;
S415, 读取文件FileSaveDay1的内容到TempStruct2之中,TempStruct2,PrevDayBlock1=Array,将TempStruct2写入到FileSaveDay1之中;
S416, 读取文件FileSaveDay2的内容到TempStruct2之中,TempStruct2,PrevDayBlock2=Array,将TempStruct2写入到FileSaveDay2之中;
S417, TempStruct1,PrevBlock1=Tanh(TempStruct1,PrevBlock1-Array), 其中Tanh为双曲正切函数;
S418, TempStruct1,PrevBlock2=Tanh(TempStruct1,PrevBlock2-Array), 其中Tanh为双曲正切函数;
S419, TempStruct1,PrevDayBlock1=ABS(TempStruct1,PrevDayBlock1-Array), 其中ABS为求绝对值
S420,TempStruct1,PrevDayBlock2=ABS(TempStruct1,PrevDayBlock2-Array), 其中ABS为求绝对值;
S421, 将TempStruct1写入到FileCurrentTime之中;
S5,设定云存储文件块大小MaxSize,获得每个云存储文件块包含结构体数量Blocks,获得文件块数变量BlocksNum,顺次将所有TimeBlockStruct结构体文件写入到云存储之中,获取云存储文件名链接列表CloudList中;
S501,每个云存储文件块包含结构体数量Blocks=floor(MaxSize/(SNum×6×8)), 其中floor为去除一个数的小数部分;
S502,文件块数变量BlocksNum=Round(StructFileNums/Blocks), 其中Round为进行小数部分的四舍五入;
S503, 如果StructFileNums%Blocks不等于0则BlocksNum=BlocksNum+1;其中%表示求余操作;
S504,块计数器BSCounter=1;云存储文件名链接列表CloudList=空列表;
S505,文件列表起始位置BSStart=(BSCounter-1)×Blocks+1;文件列表结束位置BSEnd=(BSCounter-1)×Blocks+Blocks;
S506,如果BSEnd>StructFileNums则BSEnd=StructFileNums;
S507,读取StructFileList中的第BSStart至BSEnd中的所有对应文件,并将读取到的数据内容顺次放入云存储块数据变量BigBlob中;
S508,将BigBlob存储到云服务器之中,将存储对应的文件链接追加到CloudList中;
S509,BSCounter=BSCounter+1;
S510,如果BSCounter>BlocksNum则转到S511,否则转到S505;
S511,存储过程结束;
S6,指定要读取数据的时间点CloudReadTime,读取对应该数据到读取结果变量CloudStruct;
S601,CloudReadTime对应文件名CloudReadTimeFile=利用时间编码算子TimeCodeOpt进行计算,算子的OptInput=CloudReadTime算子的输出结果为OptOutput;
S602,列表位置RPos=获得CloudReadTimeFile在StructFileList中的位置;
S603,云位置CloudPos= Round(RPos/Blocks+0,5), 其中Round为进行小数部分的四舍五入;
S604,记录位置RecodPos=RPos-(RPos%Blocks×Blocks);
S605,读取云服务器上CloudList[CloudPos]所对应文件的内容到云文件内容变量CloudBlob;
S606,CloudStruct=以TimeBlockStruct为读取单位获取CloudBlob中第RecodPos个记录的内容;
S607,读取过程结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011372694.3A CN112347045B (zh) | 2020-11-30 | 2020-11-30 | 一种海量电缆隧道状态信号数据的存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011372694.3A CN112347045B (zh) | 2020-11-30 | 2020-11-30 | 一种海量电缆隧道状态信号数据的存储方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112347045A true CN112347045A (zh) | 2021-02-09 |
CN112347045B CN112347045B (zh) | 2022-07-26 |
Family
ID=74365203
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011372694.3A Active CN112347045B (zh) | 2020-11-30 | 2020-11-30 | 一种海量电缆隧道状态信号数据的存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112347045B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102646130A (zh) * | 2012-03-12 | 2012-08-22 | 华中科技大学 | 一种海量历史数据的存储及索引方法 |
CN104765876A (zh) * | 2015-04-24 | 2015-07-08 | 中国人民解放军信息工程大学 | 海量gnss小文件云存储方法 |
US20180191896A1 (en) * | 2016-12-30 | 2018-07-05 | Orange | Method for processing data associated with a caller party, and equipment for implementing the method |
CN108773379A (zh) * | 2017-11-08 | 2018-11-09 | 陆卫华 | 超级宽铁集群 |
CN110440711A (zh) * | 2019-08-15 | 2019-11-12 | 郑州联睿电子科技有限公司 | 一种电缆隧道三维激光扫描装置及其移动定位方法 |
US20200160733A1 (en) * | 2018-11-16 | 2020-05-21 | Ensco, Inc. | Autonomous aerial vehicle navigation systems and methods |
CN111601564A (zh) * | 2018-03-08 | 2020-08-28 | 爱惜康有限责任公司 | 评估超声端部执行器的状态以及用于此的控制系统 |
CN111854855A (zh) * | 2020-09-23 | 2020-10-30 | 国网江苏省电力有限公司电力科学研究院 | 多场景电缆火灾特征量在线监测方法和装置 |
-
2020
- 2020-11-30 CN CN202011372694.3A patent/CN112347045B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102646130A (zh) * | 2012-03-12 | 2012-08-22 | 华中科技大学 | 一种海量历史数据的存储及索引方法 |
CN104765876A (zh) * | 2015-04-24 | 2015-07-08 | 中国人民解放军信息工程大学 | 海量gnss小文件云存储方法 |
US20180191896A1 (en) * | 2016-12-30 | 2018-07-05 | Orange | Method for processing data associated with a caller party, and equipment for implementing the method |
CN108773379A (zh) * | 2017-11-08 | 2018-11-09 | 陆卫华 | 超级宽铁集群 |
CN111601564A (zh) * | 2018-03-08 | 2020-08-28 | 爱惜康有限责任公司 | 评估超声端部执行器的状态以及用于此的控制系统 |
US20200160733A1 (en) * | 2018-11-16 | 2020-05-21 | Ensco, Inc. | Autonomous aerial vehicle navigation systems and methods |
CN110440711A (zh) * | 2019-08-15 | 2019-11-12 | 郑州联睿电子科技有限公司 | 一种电缆隧道三维激光扫描装置及其移动定位方法 |
CN111854855A (zh) * | 2020-09-23 | 2020-10-30 | 国网江苏省电力有限公司电力科学研究院 | 多场景电缆火灾特征量在线监测方法和装置 |
Non-Patent Citations (2)
Title |
---|
孙宏彬等: "基于移动边缘计算的分布式光纤传感电缆隧道数据传输优化方法", 《机电信息》 * |
龚璐: "5G地铁信号覆盖方案研究", 《现代信息科技》 * |
Also Published As
Publication number | Publication date |
---|---|
CN112347045B (zh) | 2022-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102646130B (zh) | 一种海量历史数据的存储及索引方法 | |
CN107688999B (zh) | 一种基于区块链的并行交易执行方法 | |
CN104794123B (zh) | 一种为半结构化数据构建NoSQL数据库索引的方法及装置 | |
JP6262874B2 (ja) | データベース実現方法 | |
CN108197181B (zh) | 一种时序数据的压缩存储方法、电子设备及存储介质 | |
CN102411616B (zh) | 一种数据存储方法和系统及数据管理方法 | |
CN104504105B (zh) | 一种实时数据库的存储方法 | |
CN107832876B (zh) | 基于MapReduce框架的分区最大负荷预测方法 | |
CN104199986A (zh) | 基于hbase和geohash的矢量数据空间索引方法 | |
CN111104457A (zh) | 基于分布式数据库的海量时空数据管理方法 | |
CN114138907A (zh) | 数据处理方法、计算机设备、存储介质和计算机程序产品 | |
CN104021210B (zh) | 以GeoJSON格式半结构化方式存储地理数据的MongoDB集群的地理数据读写方法 | |
CN110879812B (zh) | 一种电商平台中基于spark的数据同步方法 | |
CN112347045B (zh) | 一种海量电缆隧道状态信号数据的存储方法 | |
CN112835908B (zh) | 一种时序数据存储方法、系统、存储设备和存储介质 | |
CN114036157A (zh) | 输电线路树障监控方法、装置、计算机设备和存储介质 | |
CN108647243B (zh) | 基于时间序列的工业大数据存储方法 | |
CN114877943A (zh) | 一种基于区块链的生态环境监测装置 | |
CN105975634B (zh) | 分布式数据存储系统中多维有序数据的存储方法 | |
JPWO2007032068A1 (ja) | データベース管理プログラム | |
CN114077581A (zh) | 一种基于数据汇聚存储方式的数据库 | |
CN103218450B (zh) | 一种多应用实时数据库数据同步方法 | |
CN116775771B (zh) | 数据同步方法、设备、系统及介质 | |
Lazarina et al. | Linking species richness curves from non-contiguous sampling to contiguous-nested SAR: an empirical study | |
CN114297250B (zh) | 基于频数的围标团体提名方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220708 Address after: No. 395, KUANPING Road, Chaoyang District, Changchun City, Jilin Province Applicant after: CHANGCHUN INSTITUTE OF TECHNOLOGY Applicant after: State Grid Jilin Electric Power Co., Ltd. Baishan power supply company Address before: No. 395, KUANPING Road, Chaoyang District, Changchun City, Jilin Province Applicant before: CHANGCHUN INSTITUTE OF TECHNOLOGY |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |