一种数据存储方法、存储平台及存储装置
技术领域
本发明涉及数据存储技术领域,尤其涉及到一种数据的存储方法、存储平台及存储装置。
背景技术
随着互联网的不断普及与发展,数据呈现爆炸式增长,社交网络、电子商务等各种应用往往能产生亿级、十亿级甚至是百亿级的小文件。以电力企业为例,每天均会产生大量的电网图像数据,这些电网图像数据分为多种数据类型格式,包括bmp、jpg、png、raw、tiff、gif等,而这些电网图像等数据,一般为几兆或更小,因而,当根据目前的存储方法对这些数据的内容进行单独存储时,将最终形成海量数据文件。
而为了能够挖掘有价值的数据,为企业决策层研究企业发展方向、发现存在的问题和决策提供基础数据,需要对这些数据进行挖掘,即需要访问这些海量数据文件。但是,由于对这些数据的内容进行单独存储形成了海量的文件,因此在实际访问的过程中,将需要不断地从一个文件跳转到另一个文件,导致数据的访问和读取效率较为低下。
发明内容
有鉴于此,本发明实施例提供了一种数据存储方法、存储平台及存储装置,以解决现有的海量数据文件的存储方法会导致对这些数据文件进行访问和读取时,效率较为低下的问题。
根据第一方面,本发明实施例提供了一种数据存储方法,包括如下步骤:接入实时产生的多个数据文件,并将数据文件存入缓存区;判断缓存区开始存储数据文件的时间是否达到预定时间;当缓存区开始存储数据文件的时间达到预定时间时,将缓存区中的数据文件对应的数据信息依次存入第一存储区,形成至少一个合并文件;将各个数据文件的名称、对应的合并文件的存储路径、在对应的合并文件中的起止位置数据写入第二存储区,形成对应的元数据;判断缓存区中的数据文件是否都写入第一存储区,当数据文件都存入第一存储区时,清空缓存区。
通过将数据文件对应的数据信息依次存入第一存储区,形成至少一个合并文件,减少了相同的数据信息对应的文件(从数据文件到合并文件)的数量,从而能够减少需要获取这些数据信息时的文件跳转次数,提高访问和读取的效率,缩短了时间。并且,由于将各个数据文件的名称、对应的合并文件的存储路径、在对应的合并文件中的起止位置数据写入第二存储区,形成了对应的元数据,因此,在需要获取一指定的数据文件对应的数据信息时,可以根据数据文件的名称在第二存储区中找到其对应的元数据,从而找到指定的数据文件对应的合并文件的存储路径以及在对应的合并文件中的起止位置,快速获取该指定的数据文件对应的数据信息,而无需遍历所欲内容,提高了读取效率。
此外,在接入实时产生的多个数据文件时,将其存入缓存区,并在缓存区开始存储数据文件的时间达到预定时间时才对缓存区的数据进行合并,能够防止在非预定时间合并文件占用计算资源,对数据文件接入速率产生影响,并且,在缓存区中的数据文件都存入第一存储区时,清空缓存区,使高速缓存区能够被重复利用,节约了硬件成本。
结合第一方面,在第一方面第一实施方式中,缓存区构建于一HDFS系统中,HDFS系统中还构建有HttpFS服务,接入实时产生的多个数据文件,并将数据文件存入缓存区的步骤,包括:通过HttpClient连接HttpFS服务的Rest API接口;调用Http协议中的Put方法接入实时产生的多个数据文件,并将数据文件存入缓存区。
结合第一方面第一实施方式,在第一方面第二实施方式中,第一存储区构建于HDFS系统中,合并文件为SequenceFile文件;和/或,第二存储区采用列式存储系统。
结合第一方面,在第一方面第三实施方式中,数据文件小于20M。
根据第二方面,本发明实施例提供了一种数据存储平台,包括:缓存区,用以接入和存储实时产生的多个数据文件;第一存储区,用以存储实时产生的多个数据文件合并形成的至少一个合并文件;合并文件包括缓存区中的至少一个数据文件对应的数据信息;第二存储区,用以存储由各个数据文件的名称、对应的合并文件的存储路径、在对应的合并文件中的起止位置数据形成的对应的元数据。
结合第二方面,在第二方面第一实施方式中,缓存区和第一存储区均构建于一HDFS系统中,HDFS系统中构建有HttpFS服务。
结合第二方面,在第二方面第二实施方式中,第二存储区采用列式存储系统。
根据第三方面,本发明实施例提供了一种数据存储装置,包括:数据接入模块,用于接入实时产生的多个数据文件,并将数据文件存入缓存区;时间判断模块,用于判断缓存区开始存储数据文件的时间是否达到预定时间;第一存储模块,用于当缓存区开始存储数据文件的时间达到预定时间时,将缓存区中的数据文件对应的数据信息依次存入第一存储区,形成至少一个合并文件;第二存储模块,用于将各个数据文件的名称、对应的合并文件的存储路径、在对应的合并文件中的起止位置数据写入第二存储区,形成对应的元数据;数据清空模块,用于判断缓存区中的数据文件是否都写入第一存储区,当数据文件都存入第一存储区时,清空缓存区。
根据第四方面,本发明实施例提供了一种电子设备,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行第一方面或者第一方面的任意一种实施方式中所述的数据存储方法。
根据第五方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行第一方面或者第一方面的任意一种实施方式中所述的数据存储方法。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种数据存储方法的一种方法流程图;
图2为本发明实施例提供的缓存区和第一存储区的示意图;
图3为本发明实施例提供的第一存储区和第二存储区的示意图;
图4为本发明实施例提供的一种数据存储方法的另一种方法流程图;
图5为本发明实施例提供的一种数据存储装置的原理框图;
图6为本发明实施例提供的一种电子设备的硬件结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要说明的是,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
实施例1
本发明实施例提供一种数据存储方法,适用于数据存储平台,该存储平台可以与多个客户端通讯,用以接入并存储客户端中基于用户操作或者其他外部设备采集产生的多个数据文件;该存储平台包括缓存区、第一存储区和第二存储区三个存储区域,其中缓存区用以缓存区用以接入和存储(多个客户端)实时产生的多个数据文件,第一存储区用以存储实时产生的多个数据文件合并形成的至少一个合并文件,第二存储区用以存储由各个数据文件的名称、对应的合并文件的存储路径、在对应的合并文件中的起止位置数据形成的对应的元数据。此外,数据存储平台与多个客户端通讯,还用以使客户端能够访问和下载数据存储平台中的数据文件(一般是指第一存储区中的合并文件)。
图1示出了本发明实施例的数据存储方法的流程图,如图1所示,该方法可以包括如下步骤:
S101:接入实时产生的多个数据文件,并将数据文件存入缓存区。在这里,缓存区为一存储介质,如只读存储记忆体(Read-Only Memory,ROM)或者随机存储记忆体(RandomAccess Memory,RAM)等,具体地,为了能够支持数据文件的快速接入存储,可以将缓存区设置为基于固态硬盘(Solid-State Drive,SSD)的缓存区。在这里,数据文件可以为任意大小的文件,其可以为20M以上的较大的文件,也可以为小于20M的,如3M、5M、10M等较小的文件。在这里,可以从手机、电脑等客户端接入实时产生的多个数据文件。
S102:判断缓存区开始存储数据文件的时间是否达到预定时间。在这里,当缓存区开始存储数据文件的时间达到预定时间时,执行步骤S103,当缓存区开始存储数据文件的时间未达到预定时间时,则继续接入实时产生的多个数据文件,并将数据文件存入缓存区,即继续执行步骤S101,直至缓存区开始存储数据文件的时间达到预定时间。
S103:当缓存区开始存储数据文件的时间达到预定时间时,将缓存区中的数据文件对应的数据信息依次存入第一存储区,形成至少一个合并文件。在这里,预定时间可以为预定周期中的任一时间点,例如,当预定周期为一天时,预定时间可以为一天的任一时间点,如每天的23时;当预定周期为一周时,预定时间可以为一周的任一时间点,如每周六的23时。在实际应用中,为了降低进行文件合并时占用的计算资源对数据文件上传速率的影响,一般将预定时间设置为需要接入的实时产生的数据文件较少的闲时,如每天的凌晨或者每周周一的凌晨等。
在这里,如图2所示,每个合并文件中均可以存入多个数据文件对应的数据信息,例如图2中的合并文件1中存入了数据信息1(缓存区中的数据文件1对应的数据信息)-数据信息5(缓存区中的数据文件5对应的数据信息)。当形成的合并文件为多个时,各个合并文件能够存储的数据的长度是固定的预定长度,例如图2中的合并文件1、合并文件2、合并文件3……,在实际应用中,为了方便读取指定数据文件对应的数据信息,一般将一个数据文件对应的所有数据信息存储在同一个合并文件中。具体地,在进行数据合并时,可以通过比较合并文件中未使用的数据长度是否大于待存入的数据文件对应的数据信息的数据长度,并在当合并文件中未使用的数据长度大于待存入的数据文件对应的数据信息的数据长度时,再将该待存入的数据文件对应的数据信息写入上述合并文件。
S104:将各个数据文件的名称、对应的合并文件的存储路径、在对应的合并文件中的起止位置数据写入第二存储区,形成对应的元数据。
沿用上例,如图3所示,将数据文件1的名称、对应的合并文件(图3中为合并文件1)的存储路径、在对应的合并文件中的起止位置数据写入第二存储区,形成元数据1;将数据文件2的名称、对应的合并文件(图3中为合并文件1)的存储路径、在对应的合并文件中的起止位置数据写入第二存储区,形成元数据2;……;将数据文件5的名称、对应的合并文件(图3中为合并文件1)的存储路径、在对应的合并文件中的起止位置数据写入第二存储区,形成元数据5。
S105:判断缓存区中的数据文件是否都写入第一存储区,当数据文件都存入第一存储区时,清空缓存区。在这里,当缓存区中的数据文件没有都存入第一存储区时,则继续执行步骤S103和步骤S104,直至缓存区中的数据文件都存入第一存储区。
在本发明实施例中,通过将数据文件对应的数据信息依次存入第一存储区,形成至少一个合并文件,减少了相同的数据信息对应的文件(从数据文件到合并文件)的数量,从而能够减少需要获取这些数据信息时的文件跳转次数,提高访问和读取的效率,缩短了时间。并且,由于将各个数据文件的名称、对应的合并文件的存储路径、在对应的合并文件中的起止位置数据写入第二存储区,形成了对应的元数据,因此,在需要获取一指定的数据文件对应的数据信息时,可以根据数据文件的名称在第二存储区中找到其对应的元数据,从而找到指定的数据文件对应的合并文件的存储路径以及在对应的合并文件中的起止位置,快速获取该指定的数据文件对应的数据信息,而无需遍历所欲内容,提高了读取效率。
此外,在接入实时产生的多个数据文件时,将其存入缓存区,并在缓存区开始存储数据文件的时间达到预定时间时才对缓存区的数据进行合并,能够防止在非预定时间合并文件占用计算资源,对数据文件接入速率产生影响,并且,在缓存区中的数据文件都存入第一存储区时,清空缓存区,使高速缓存区能够被重复利用,节约了硬件成本。
图4示出了根据本发明另一实施例的数据存储方法的流程图,在本实施例中,以缓存区和第一存储区均构建于一HDFS系统中,HDFS系统中还构建有HttpFS服务为例来描述本发明实施例的数据存储方法。如图4所示,该方法可以包括如下步骤:
S201:通过HttpClient连接HttpFS服务的Rest API接口。在这里,在HDFS系统上构建的HttpFS服务,可以用于提供REST HTTP接口的服务器,从而可以支持全部HDFS文件系统的操作(读和写),并通过webhdfs REST HTTP API(即Rest API接口)来进行交互。
S202:调用Http协议中的Put方法接入实时产生的多个数据文件,并将数据文件存入HDFS系统中的缓存区中。在这里,基于HDFS系统的异构存储功能,设置缓存区目录用于接入实时产生的多个数据文件,完成缓存区的构建,具体地,为了能够支持数据文件的快速接入存储,可以将缓存区目录的存储策略设置为ALL_SSD,使该目录下的所有数据文件都保存在固态硬盘(Solid-State Drive,SSD)中,即缓冲区为基于SSD的缓存区。在这里,数据文件的接入包括单个接入和批量接入两种接入方式,当进行批量接入时,通过并行化调用多个Rest API接口的方式进行接入。
具体地,S201和S202可以通过以下步骤实现:
1)创建HttpClient对象:
CloseableHttpClient client=HttpClients.createDefault();
2)创建请求方法的实例,并指定请求URL。在这里,由于需要发送的请求为PUT请求,因而需要创建的对象为HttpPut对象:
HttpPut httpPut=new HttpPut(url)。
3)设置HTTP请求头以及发送的请求参数。在这里,可以通过setHeader()方法来设置HTTP请求头,通过“?”符号将请求参数直接写在url后面,调用setEntity(InputStreamEntityentity)方法来设置所发送的文件流。
4)调用HttpClient对象的execute(HttpPut put)发送请求,该方法返回一个HttpResponse。
5)调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。
6)接入实时产生的多个数据文件,并将数据文件存入缓存区。
7)在数据接入完成后,关闭连接,释放资源。
具体地,主要通过以下代码对Rest API接口进行配置,从而实现上述步骤1)至7):
其中,fileStream为待接入数据文件的文件流;hdfsurl为数据文件的目的存储路径;imgformat为数据文件的文件格式。
S203:判断缓存区开始存储数据文件的时间是否达到预定时间。具体内容参考步骤S102所述。
S204:当缓存区开始存储数据文件的时间达到预定时间时,将缓存区中的数据文件对应的数据信息依次存入第一存储区,形成至少一个SequenceFile文件。在这里,依次将数据文件的文件名作为key,将其对应的数据信息(二进制内容)作为value,存储到第一存储区中的SequenceFile文件中。在这里,步骤S204的其他具体内容参考步骤S103来理解,在此不再赘述。
具体地,主要通过以下代码实现数据文件的合并以及存储:
其中,Hdfsurl为SequenceFile的HDFS存储路径;Imagelist为缓存区中的数据文件列表;getFileName(String image)为获取数据文件文件名称方法;imageToBytes(String image)为图像文件转换为Byte[]的方法。
S205:将各个数据文件的名称、对应的SequenceFile文件的存储路径、在对应的SequenceFile文件中的起止位置数据写入第二存储区,形成对应的元数据。在这里,步骤S205的具体内容可以参照步骤S104来理解,步骤S104中已经陈述过的内容,在此不再赘述。
在这里,可以在数据文件对应的数据信息被存入第一存储区时,形成该数据文件的元数据,也可以在将数据文件接入缓存区时,先将数据文件的初始元数据存入第二存储区,再在数据文件对应的数据信息被存入第一存储区时,对初始元数据进行更新(主要更新与SequenceFile文件相关的信息,如数据文件对应的SequenceFile文件的存储路径、在对应的SequenceFile文件中的起止位置数据等),形成该数据文件的元数据。
具体地,元数据还可以包括数据文件的编号,文件形成时间等,例如下表所示的各种信息。当然,下表所示的元数据具体信息仅为便于本领域技术人员理解本发明实施例的技术方案所举的具体示例,不应当对本发明实施例的技术方案构成任何限制。
在这里,第二存储区采用列式存储系统,如hbase,hive,Kudu等数据库,具体地,以第二存储区采用Kudu数据库为例,则可以在Kudu数据库上结合高速SQL查询引擎Impala,设计用于元数据的新增、更新以及查询的接口,从而实现将相关SQL命令通过JDBC的形式传输给Impala,并由Impala对相关SQL解释后提交给Kudu执行,实现元数据的新增、更新等操作,在这里,可以将对各接口做如下设置:
元数据新增接口:metaDataInsert(metaDataUnit unit);
元数据更新接口:metaDataUpdate(metaDataUnit unit,img_id);
元数据查询接口:metaDataSelect(img_id)。
S206:判断缓存区中的数据文件是否都写入第一存储区,当数据文件都存入第一存储区时,清空缓存区。具体内容参考步骤S105所述。
在本发明实施例中,将第一存储区构建与一HDFS系统上,使合并文件能够冗余存储在不同的服务器中,从而能够提高合并文件,即提高数据文件对应的数据信息的安全性;基于HDFS系统的异构存储功能在HDFS系统上构建缓存区,充分高效地利用了HDFS系统。
实施例2
图2和图3示出了根据本发明实施例的一种数据存储平台的示意图,实施例1或者其任意可选实施方式所述的数据村塾方法可以用于该数据存储平台中。该数据存储平台包括:缓存区,第一存储区和第二存储区。
缓存区用以接入和存储实时产生的多个数据文件。
第一存储区用以存储实时产生的多个数据文件合并形成的至少一个合并文件;合并文件包括缓存区中的至少一个数据文件对应的数据信息。
第二存储区用以存储由各个数据文件的名称、对应的合并文件的存储路径、在对应的合并文件中的起止位置数据形成的对应的元数据。
本实施例所述数据存储平台的具体内容可以参考实施例1来理解,在此不再赘述。
作为本发明实施例的可选实施方式,缓存区和第一存储区均构建于一HDFS系统中,HDFS系统中构建有HttpFS服务,和/或,第二存储区采用列式存储系统。
实施例3
图5示出了本发明实施例的一种数据存储装置的原理框图,该装置可以用于实现实施例1或者其任意可选实施方式所述的数据存储方法。如图5所示,该装置包括:数据接入模块10、时间判断模块20、第一存储模块30,第二存储模块40和数据清空模块50。
数据接入模块10用于接入实时产生的多个数据文件,并将所述数据文件存入缓存区。
时间判断模块20用于判断所述缓存区开始存储数据文件的时间是否达到预定时间。
第一存储模块30用于当所述缓存区开始存储数据文件的时间达到预定时间时,将所述缓存区中的数据文件对应的数据信息依次存入第一存储区,形成至少一个合并文件。
第二存储模块40用于将各个所述数据文件的名称、对应的合并文件的存储路径、在所述对应的合并文件中的起止位置数据写入第二存储区,形成对应的元数据。
数据清空模块50用于判断所述缓存区中的数据文件是否都写入第一存储区,当所述数据文件都存入第一存储区时,清空所述缓存区。
本发明实施例还提供了一种电子设备,如图6所示,该电子设备可以包括处理器61和存储器62,其中处理器61和存储器62可以通过总线或者其他方式连接,图6中以通过总线连接为例。
处理器61可以为中央处理器(Central Processing Unit,CPU)。处理器61还可以为其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
存储器62作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中的数据存储方法对应的程序指令/模块(如图5中的数据接入模块10、时间判断模块20、第一存储模块30,第二存储模块40和数据清空模块50)。处理器61通过运行存储在存储器62中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例中的数据存储方法。
存储器62可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器61所创建的数据等。此外,存储器62可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器62可选包括相对于处理器61远程设置的存储器,这些远程存储器可以通过网络连接至处理器61。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述一个或者多个模块存储在所述存储器62中,当被所述处理器61执行时,执行如图1-4所示实施例中的数据存储方法。
上述电子设备具体细节可以对应参阅图1至图4所示的实施例中对应的相关描述和效果进行理解,此处不再赘述。
本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)、随机存储记忆体(Random AccessMemory,RAM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,缩写:HDD)或固态硬盘(Solid-State Drive,SSD)等;所述存储介质还可以包括上述种类的存储器的组合。
显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变动仍处于本发明创造的保护范围之中。