一种存取海量时间序列数据的方法及装置的制造方法

xiaoxiao2020-10-23  9

一种存取海量时间序列数据的方法及装置的制造方法
【技术领域】
[0001]本发明涉及数据云存储技术领域,具体涉及一种存取海量时间序列数据的方法及
目.0
【背景技术】
[0002]随着物联网、云存储等方法的广泛发展和应用,如何存储和检索海量与时间相关的数据成为系统应用的难题,时间序列数据是指与时间紧密相关的数据,数据的存取除了与数据本身的关键字相关外还与时间密切相关,存储的结构通常按照时间排序,检索时通常按照数据关键字和时间进行检索,在特定领域,海量时间数据有其自身的特点:数据与时间高度相关,数据通常按照时间先后顺序传输与存储;数据本身小,但数据量巨大,存储时间长,存储频率高;通常每时每刻都有海量数据需要存储,但检索数据只有当业务需要才触发,这就造成检索数据的操作远小于存储数据的操作,时间序列数据一般包括:数据标识、时间和数值,在实际应用中,时间序列数据通常采用数据库的方式进行存取,有一定的局限性。

【发明内容】

[0003]本发明的目的在于提出一种存取海量时间序列数据的方法及装置,能够通过数据文件的方式并结合索引信息对时间序列数据进行存取,提高了存取效率。
[0004]为达此目的,本发明采用以下技术方案:
[0005]一种存取海量时间序列数据的方法,包括:
[0006]S10、接收时间序列数据,所述时间序列数据包括数据源标识、数据时间及数据信息;
[0007]S20、将所述数据源标识通过哈希算法生成若干个字节,建立与所述若干个字节对应的若干层目录;
[0008]S30、将所述时间序列数据以数据文件的形式存储到所述目录中,所述数据文件包括数据段和索引段,所述数据文件的文件名由所述数据时间生成;
[0009]S40、接收查询请求,所述查询请求包括数据源标识和数据时间,根据所述查询请求及索引段从所述目录中读取对应的时间序列数据。
[0010]优选地,所述数据段用于记录所述数据信息,所述索引段用于记录数据文件的基本信息以及索引信息。
[0011]优选地,所述基本信息包括数据文件开始时间、数据文件结束时间及数据源标识,所述索引信息包括第一索引信息和第二索引信息,所述第一索引信息按顺序记录每个数据段对应的开始时间和数据文件偏移位置,所述第二索引信息包括单条索引数据大小、索引段信息总大小、文件尾位置和文件总长。
[0012]优选地,所述步骤S20具体为:
[0013]将所述数据源标识通过哈希算法生成四个字节的整形数据,由所述四个字节的最后一个字节起,依次向前,建立与所述四个字节一一对应的根目录、一层目录、二层目录和三层目录。
[0014]优选地,所述步骤S30包括:
[0015]S31、查找目录中所有以.data结尾的数据文件,并查找文件名最大的数据文件,若不存在以.data结尾的数据文件,则新建数据文件,所述新建数据文件的文件名为:数据时间.data ;
[0016]S32、若找到以.data结尾的数据文件,读取文件尾信息,所述文件尾信息包含写入偏移量;
[0017]S33、将所述时间序列数据写入到所述数据文件中,所述时间序列数据的写入起始位置为所述写入偏移量;
[0018]S34、写入索引信息,将所述第一索引信息写入到文件尾对应的数据段索引中,将所述第二索引信息写入到文件尾的二级索引中。
[0019]优选地,所述步骤S34之后还包括:
[0020]步骤S35、若所述数据文件达到数据段最大长度,关闭所述数据文件,建立新的数据文件进行写入。
[0021 ] 优选地,所述步骤S40包括:
[0022]S41、接收查询请求,所述查询请求包括数据源标识和数据时间;
[0023]S42、将所述查询请求的数据源标识通过哈希算法生成若干个字节,将每个字节转化为16进制的字符串,并查找相对应的目录;
[0024]S43、对所述目录下的文件名按照倒序进行排序,找出第一个比所述查询请求的数据时间小的文件名;
[0025]S44、打开所述文件名对应的数据文件,并读取文件末尾的索引信息;
[0026]S55、根据所述索引信息读取查询请求的时间序列数据的数据信息。
[0027]作为本发明的另一个方面,提供的一种存取海量时间序列数据的装置,包括:
[0028]接收模块,用于接收时间序列数据,所述时间序列数据包括数据源标识、数据时间及数据信息;
[0029]转换模块,用于将所述数据源标识通过哈希算法生成若干个字节,建立与所述若干个字节一一对应的若干层目录;
[0030]存储模块,用于将所述时间序列数据以数据文件的形式存储到所述目录中,所述数据文件包括数据段和索引段,所述数据文件的文件名由所述数据时间生成;
[0031]读取模块,用于接收查询请求,所述查询请求包括数据源标识和数据时间,根据所述查询请求及索引段从所述目录中读取对应的时间序列数据。
[0032]优选地,所述存储模块包括:
[0033]数据文件建立单元,用于查找目录中所有以.data结尾的数据文件,并查找文件名最大的数据文件,若不存在以.data结尾的数据文件,则新建数据文件,所述新建数据文件的文件名为:数据时间.data ;
[0034]偏移量写入单元,用于找到以.data结尾的数据文件后,读取文件尾信息,所述文件尾信息包含写入偏移量;
[0035]数据信息写入单元,用于将所述时间序列数据写入到所述数据文件中,所述时间序列数据的写入起始位置为所述写入偏移量;
[0036]索引信息写入单元,用于写入索引信息,将所述第一索引信息写入到文件尾对应的数据段索引中,将所述第二索引信息写入到文件尾的二级索引中。
[0037]优选地,所述读取模块包括:
[0038]查询请求接收单元,用于接收查询请求,所述查询请求包括数据源标识和数据时间;
[0039]查询请求转换单元,用于将所述查询请求的数据源标识通过哈希算法生成若干个字节,将每个字节转化为16进制的字符串,并查找相对应的目录;
[0040]排序单元,用于对所述目录下的文件名按照倒序进行排序,找出第一个比所述查询请求的数据时间小的文件名;
[0041]索引信息读取单元,用于打开所述文件名对应的数据文件,并读取文件末尾的索引信息;
[0042]数据信息读取单元,用于根据所述索引信息读取查询请求的时间序列数据的数据信息。
[0043]本发明的有益效果为:一种存取海量时间序列数据的方法及装置,该方法包括:接收时间序列数据,所述时间序列数据包括数据源标识、数据时间及数据信息;将所述数据源标识通过哈希算法生成若干个字节,建立与所述若干个字节一一对应的若干层目录;将所述时间序列数据以数据文件的形式存储到所述目录中,所述数据文件包括数据段和索引段,所述数据文件的文件名由所述数据时间生成;接收查询请求,所述查询请求包括数据源标识和数据时间,根据所述查询请求及索引段从所述目录中读取对应的时间序列数据,本发明通过数据文件的方式并结合索引信息对时间序列数据进行存取,提高了存取效率。
【附图说明】
[0044]图1是本发明实施例一提供的一种存取海量时间序列数据的方法的流程图
[0045]图2是本发明实施例二提供的一种存取海量时间序列数据的方法的流程图
[0046]图3是本发明实施例三提供的一种存取海量时间序列数据的方法的流程图
[0047]图4是本发明实施例四提供的一种存取海量时间序列数据的装置的结构图。
[0048]图5是本发明实施例五提供的存储模块的装置的结构图。
[0049]图6是本发明实施例六提供的读取模块的装置的结构图。
【具体实施方式】
[0050]下面结合图1-图6并通过【具体实施方式】来进一步说明本发明的技术方案。
[0051]实施例一
[0052]图1是本实施例提供的一种存取海量时间序列数据的方法的流程图。
[0053]一种存取海量时间序列数据的方法,包括:
[0054]S10、接收时间序列数据,所述时间序列数据包括数据源标识DKey、数据时间Time及数据信息Value ;
[0055]S20、将所述数据源标识通过哈希算法生成若干个字节,建立与所述若干个字节--对应的若干层目录;
[0056]S30、将所述时间序列数据以数据文件DFile的形式存储到所述目录中,所述数据文件包括数据段和索引段,所述数据文件的文件名由所述数据时间生成;
[0057]S40、接收查询请求,所述查询请求包括数据源标识和数据时间,根据所述查询请求及索引段从所述目录中读取对应的时间序列数据。
[0058]在本实施例中,通过数据文件的方式并结合索引信息对时间序列数据进行存取,不再依赖于现有技术中的数据库,提高了存取效率。
[0059]在本实施例中,所述数据段用于记录所述数据信息,所述索引段用于记录数据文件的基本信息以及索引信息。
[0060]在本实施例中,所示数据段信息包括:
[0061]数据段最大长度maxsize,根据实际情况配置,例如1GB,当文件存储大于该值时,关闭该文件,创建新文件进行存储。
[0062]数据块大小:BlockSize,可通过配置设定,默认1MB。
[0063]数据块最大数=MaxBlockNum通过maxsize/BlockSize计算出来,默认位IK个。
[0064]数据块序号=BlockSeqno可通过当前数据写入的Offset计算出来(BlockSeqno=Offset *MaxB1ckNum/max s i z e)。
[0065]在本实施例中,所述基本信息包括数据文件开始时间、数据文件结束时间及数据源标识,所述索引信息包括第一索引信息和第二索引信息,所述第一索引信息将数据段数据分成MaxBlockNum个块,按顺序记录每个数据段对应的开始时间和数据文件偏移位置,所述第二索引信息在第一部分的MaxBlockNum个记录中选取4个记录,包括单条索引数据大小、索引段信息总大小、文件尾位置和文件总长。
[0066]在本实施例中,单条索引数据大小:BIndexSize= ST (8byte)+Offset (32byte)=40byte ;
[0067]索引段信息总大小:MaxBIndexSize= (MaxBlockNum+4)^BIndexSize ;
[0068]文件尾位置:tailOffset= maxsize+MaxBIndexSize ;
[0069]文件总长:TotalFileSize= tailOffset+ST (8byte) +ET (8byte) +offset (32byte)。
[0070]在本实施例中,所述步骤S20具体为:
[0071]将所述数据源标识通过哈希算法生成四个字节的整形数据,由所述四个字节的最后一个字节起,依次向前,建立与所述四个字节一一对应的根目录、一层目录、二层目录和三层目录。
[0072]在本实施例中,所示数据文件的文件名=该文件记录的开始时间.data。
[0073]实施例二
[0074]如图2所示,在本实施例中,所述步骤S30包括:
[0075]S31、查找目录中所有以.data结尾的数据文件,并查找文件名最大的数据文件,若不存在以.data结尾的数据文件,则新建数据文件,所述新建数据文件的文件名为:数据时间time, data ;在文件尾tailOffset位置记录文件基本信息{startTime,0,0}其中,开始时间为数据time,结束时间为O表示未结束,当前数据段写入位置0,并记录到内存中的文件句柄的数据结构中。
[0076]S32、若找到以.data结尾的数据文件,读取文件尾信息,所述文件尾信息包含写入偏移量offset ;读取文件尾记录信息{startTime,0,offset},其中,开始时间为数据time,结束时间为O表示未结束,当前数据段写入位置offset,并将文件写入偏移量设置为off set,并记录到内存中的文件句柄的数据结构中。
[0077]S33、将所述时间序列数据写入到所述数据文件中,所述时间序列数据的写入起始位置为所述写入偏移量offset ;
[0078]S34、写入索引信息,将所述第一索引信息写入到文件尾对应的数据段索引中,将所述第二索引信息写入到文件尾的二级索引中。
[0079]在本实施例中,所述步骤S34之后还包括:
[0080]步骤S35、若所述数据文件达到数据段最大长度,关闭所述数据文件,建立新的数据文件进行写入。
[0081]实施例三
[0082]如图3所示,在本实施例中,所述步骤S40包括:
[0083]S41、接收查询请求,所述查询请求包括数据源标识和数据时间;
[0084]S42、将所述查询请求的数据源标识通过哈希算法生成若干个字节,将每个字节转化为16进制的字符串,并查找相对应的目录;
[0085]S43、对所述目录下的文件名按照倒序进行排序,找出第一个比所述查询请求的数据时间小的文件名;
[0086]S44、打开所述文件名对应的数据文件,并读取文件末尾的索引信息;
[0087]S55、根据所述索引信息读取查询请求的时间序列数据的数据信息。
[0088]实施例四
[0089]如图4所示,一种存取海量时间序列数据的装置,包括:
[0090]接收模块10,用于接收时间序列数据,所述时间序列数据包括数据源标识、数据时间及数据信息;
[0091]转换模块20,用于将所述数据源标识通过哈希算法生成若干个字节,建立与所述若干个字节对应的若干层目录;
[0092]存储模块30,用于将所述时间序列数据以数据文件的形式存储到所述目录中,所述数据文件包括数据段和索引段,所述数据文件的文件名由所述数据时间生成;
[0093]读取模块40,用于接收查询请求,所述查询请求包括数据源标识和数据时间,根据所述查询请求及索引段从所述目录中读取对应的时间序列数据。
[0094]实施例五
[0095]如图5所示,在本实施例中,所述存储模块30包括:
[0096]数据文件建立单元31,用于查找目录中所有以.data结尾的数据文件,并查找文件名最大的数据文件,若不存在以.data结尾的数据文件,则新建数据文件,所述新建数据文件的文件名为:数据时间.data ;
[0097]偏移量写入单元32,用于找到以.data结尾的数据文件后,读取文件尾信息,所述文件尾信息包含写入偏移量offset ;
[0098]数据信 息写入单元33,用于将所述时间序列数据写入到所述数据文件中,所述时间序列数据的写入起始位置为所述写入偏移量offset ;
[0099]索引信息写入单元34,用于写入索引信息,将所述第一索引信息写入到文件尾对应的数据段索引中,将所述第二索引信息写入到文件尾的二级索引中。
[0100]实施例六
[0101]如图6所示,在本实施例中,所述读取模块40包括:
[0102]查询请求接收单元41,用于接收查询请求,所述查询请求包括数据源标识和数据时间;
[0103]查询请求转换单元42,用于将所述查询请求的数据源标识通过哈希算法生成若干个字节,将每个字节转化为16进制的字符串,并查找相对应的目录;
[0104]排序单元43,用于对所述目录下的文件名按照倒序进行排序,找出第一个比所述查询请求的数据时间小的文件名;
[0105]索引信息读取单元44,用于打开所述文件名对应的数据文件,并读取文件末尾的索引信息;
[0106]数据信息读取单元45,用于根据所述索引信息读取查询请求的时间序列数据的数据信息。
[0107]以上所述仅为本发明的【具体实施方式】,这些描述只是为了解释本发明的原理,而不能以任何方式解释为对本发明保护范围的限制。基于此处的解释,本领域的技术人员不需要付出创造性的劳动即可联想到本发明的其它具体实施方法,这些方式都将落入本发明的保护范围之内。
【主权项】
1.一种存取海量时间序列数据的方法,其特征在于,包括: S10、接收时间序列数据,所述时间序列数据包括数据源标识、数据时间及数据信息; S20、将所述数据源标识通过哈希算法生成若干个字节,建立与所述若干个字节一一对应的若干层目录; 530、将所述时间序列数据以数据文件的形式存储到所述目录中,所述数据文件包括数据段和索引段,所述数据文件的文件名由所述数据时间生成; 540、接收查询请求,所述查询请求包括数据源标识和数据时间,根据所述查询请求及索引段从所述目录中读取对应的时间序列数据。2.根据权利要求1所述的一种存取海量时间序列数据的方法,其特征在于,所述数据段用于记录所述数据信息,所述索引段用于记录数据文件的基本信息以及索引信息。3.根据权利要求2所述的一种存取海量时间序列数据的方法,其特征在于,所述基本信息包括数据文件开始时间、数据文件结束时间及数据源标识,所述索引信息包括第一索引信息和第二索引信息,所述第一索引信息按顺序记录每个数据段对应的开始时间和数据文件偏移位置,所述第二索引信息包括单条索引数据大小、索引段信息总大小、文件尾位置和文件总长。4.根据权利要求3所述的一种存取海量时间序列数据的方法,其特征在于,所述步骤S20具体为: 将所述数据源标识通过哈希算法生成四个字节的整形数据,由所述四个字节的最后一个字节起,依次向前,建立与所述四个字节一一对应的根目录、一层目录、二层目录和三层目录。5.根据权利要求4所述的一种存取海量时间序列数据的方法,其特征在于,所述步骤S30包括: 531、查找目录中所有以.data结尾的数据文件,并查找文件名最大的数据文件,若不存在以.data结尾的数据文件,则新建数据文件,所述新建数据文件的文件名为:数据时间.data ; 532、若找到以.data结尾的数据文件,读取文件尾信息,所述文件尾信息包含写入偏移量; 533、将所述时间序列数据写入到所述数据文件中,所述时间序列数据的写入起始位置为所述写入偏移量; 534、写入索引信息,将所述第一索引信息写入到文件尾对应的数据段索引中,将所述第二索引信息写入到文件尾的二级索引中。6.根据权利要求5所述的一种存取海量时间序列数据的方法,其特征在于,所述步骤S34之后还包括: 步骤S35、若所述数据文件达到数据段最大长度,关闭所述数据文件,建立新的数据文件进彳丁与入。7.根据权利要求1所述的一种存取海量时间序列数据的方法,其特征在于,所述步骤S40包括: 541、接收查询请求,所述查询请求包括数据源标识和数据时间; 542、将所述查询请求的数据源标识通过哈希算法生成若干个字节,将每个字节转化为16进制的字符串,并查找相对应的目录; 543、对所述目录下的文件名按照倒序进行排序,找出第一个比所述查询请求的数据时间小的文件名; 544、打开所述文件名对应的数据文件,并读取文件末尾的索引信息; S55、根据所述索弓I信息读取查询请求的时间序列数据的数据信息。8.一种存取海量时间序列数据的装置,其特征在于,包括: 接收模块,用于接收时间序列数据,所述时间序列数据包括数据源标识、数据时间及数据信息; 转换模块,用于将所述数据源标识通过哈希算法生成若干个字节,建立与所述若干个字节一一对应的若干层目录; 存储模块,用于将所述时间序列数据以数据文件的形式存储到所述目录中,所述数据文件包括数据段和索引段,所述数据文件的文件名由所述数据时间生成; 读取模块,用于接收查询请求,所述查询请求包括数据源标识和数据时间,根据所述查询请求及索引段从所述目录中读取对应的时间序列数据。9.根据权利要求8所述的一种存取海量时间序列数据的装置,其特征在于,所述存储丰吴块包括: 数据文件建立单元,用于查找目录中所有以.data结尾的数据文件,并查找文件名最大的数据文件,若不存在以.data结尾的数据文件,则新建数据文件,所述新建数据文件的文件名为:数据时间.data ; 偏移量写入单元,用于找到以.data结尾的数据文件后,读取文件尾信息,所述文件尾信息包含写入偏移量; 数据信息写入单元,用于将所述时间序列数据写入到所述数据文件中,所述时间序列数据的写入起始位置为所述写入偏移量; 索引信息写入单元,用于写入索引信息,将所述第一索引信息写入到文件尾对应的数据段索引中,将所述第二索引信息写入到文件尾的二级索引中。10.根据权利要求8所述的一种存取海量时间序列数据的装置,其特征在于,所述读取丰吴块包括: 查询请求接收单元,用于接收查询请求,所述查询请求包括数据源标识和数据时间;查询请求转换单元,用于将所述查询请求的数据源标识通过哈希算法生成若干个字节,将每个字节转化为16进制的字符串,并查找相对应的目录; 排序单元,用于对所述目录下的文件名按照倒序进行排序,找出第一个比所述查询请求的数据时间小的文件名; 索引信息读取单元,用于打开所述文件名对应的数据文件,并读取文件末尾的索引信息; 数据信息读取单元,用于根据所述索引信息读取查询请求的时间序列数据的数据信息。
【专利摘要】本发明涉及数据云存储技术领域,具体涉及一种存取海量时间序列数据的方法及装置,该方法包括:接收时间序列数据,所述时间序列数据包括数据源标识、数据时间及数据信息;将所述数据源标识通过哈希算法生成若干个字节,建立与所述若干个字节一一对应的若干层目录;将所述时间序列数据以数据文件的形式存储到所述目录中,所述数据文件包括数据段和索引段,所述数据文件的文件名由所述数据时间生成;接收查询请求,所述查询请求包括数据源标识和数据时间,根据所述查询请求及索引段从所述目录中读取对应的时间序列数据,本发明通过数据文件的方式并结合索引信息对时间序列数据进行存取,提高了存取效率。
【IPC分类】G06F17/30
【公开号】CN104881481
【申请号】CN201510300297
【发明人】徐君
【申请人】安科智慧城市技术(中国)有限公司
【公开日】2015年9月2日
【申请日】2015年6月3日
转载请注明原文地址:https://www.famiwei.com/read-8138594.html

最新回复(0)