一种目标特性数据的存储方法和系统转让专利

申请号 : CN201710376521.0

文献号 : CN107180102B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王衍祺贾雨生翟佳

申请人 : 北京环境特性研究所

摘要 :

本发明提供了一种目标特性数据的存储方法和系统,其中的方法包括:预先设置多个用于存储数据的数据存储模块以及对应的存储控制器;客户端向分发器发送携带有数据信息的数据存储请求,数据信息包括:密级信息、共享信息、用户组信息和访问权限信息;分发器根据数据存储请求及各个存储控制器的负载情况选择一个存储控制器,将数据存储请求转发给所选择的存储控制器,并将所选择的存储控制器通知所述客户端;客户端与存储控制器直接进行通信,存储控制器为客户端提供统一的数据读写接口,将客户端上传的数据存储到与存储控制器对应的数据存储模块中。应用本发明可以降低数据存储成本,统一管理和维护数据,保障数据安全,方便数据共享和使用。

权利要求 :

1.一种目标特性数据的存储方法,其特征在于,该方法包括:预先设置多个用于存储数据的数据存储模块以及对应的存储控制器;所述数据存储模块包括:Oracle存储模块、HDFS存储模块、HBase存储模块和Cache存储模块;

客户端向分发器发送数据存储请求,所述数据存储请求中携带有数据信息,所述数据信息包括:密级信息、共享信息、用户组信息和访问权限信息;

分发器根据接收到的数据存储请求以及各个存储控制器的负载情况选择一个存储控制器,将数据存储请求转发给所选择的存储控制器,并将所选择的存储控制器通知所述客户端;

客户端与存储控制器直接进行通信,存储控制器为客户端提供统一的数据读写接口,将客户端上传的数据存储到与所述存储控制器对应的数据存储模块中;

其中,通过如下步骤从数据存储模块中读取所需的数据:

B1、设所需读取的数据为文件F,当用户U需要读取文件F时,发送数据读取请求以请求执行数据读取操作FP;所述数据读取请求中携带有用户信息,所述用户信息包括:用户组信息和访问权限信息;

B2、根据所述用户信息判断该用户U是否为文件F的所有者;如果是,执行FP并结束流程;否则,执行步骤B3;

B3、根据所述用户信息判断该用户U是否满足文件F的密级要求;如果是,执行步骤B4;

否则,向用户返回用户密级不匹配的错误提示信息并结束流程;

B4、判断所述文件F是否共享;如果是,执行步骤B5;否则,向用户返回无法访问私有文件的错误提示信息并结束流程;

B5、判断所述文件F的默认权限是否满足FP要求;如果是,执行FP并结束流程;否则,执行步骤B6;

B6、根据所述用户信息获取所述用户U所属的用户组以及对应的文件共享权限集合;

B7、判断文件共享权限集合中是否存在对文件F执行FP的权限;如果是,执行FP;否则,向用户返回无操作权限的错误提示信息。

2.根据权利要求1所述的方法,其特征在于,该方法进一步包括:所述分发器根据预设的分发策略将同一用户的所有请求分发给对应的存储控制器,每个存储控制器均可访问所有的数据存储模块;

其中,所述分发策略为:对用户地址进行一致性哈希分配策略分配对应的存储控制器。

3.根据权利要求1所述的方法,其特征在于,该方法进一步包括:通过文件共享表来为各个用户分配所拥有的对文件的操作权限;

预先设置一个或多个用户组,每一个用户组对应一组文件的操作权限,通过用户组的方式给用户授权。

4.根据权利要求1所述的方法,其特征在于,该方法进一步包括:当所需存储的数据为结构化数据时,所需存储的数据被存储到Oracle存储模块中;

当所需存储的数据为非结构化数据时,如果数据大小大于预设阈值,则所需存储的数据被存储到HDFS存储模块中;如果数据大小不大于预设阈值,则所需存储的数据被存储到HBase存储模块中。

5.根据权利要求4所述的方法,其特征在于:

在将数据存储到数据存储模块中之前,客户端将所需存储的数据分割成预设的固定大小的数据块,并为每个数据块设置全局唯一的标识,再将各个数据块分别独立地发送给数据存储模块;

各个数据存储模块根据各个数据块的全局唯一的标识进行数据重传和文件重构操作。

6.根据权利要求5所述的方法,其特征在于:

当所述数据块需要存储在HDFS存储模块中时,对应的存储控制器将所述数据块写入到预先设置的HDFS写入缓冲区中,再通过HDFS写入线程从所述HDFS写入缓冲区中读取数据块,并根据各个数据块的全局唯一的标识依次将各个数据块写入所述HDFS存储模块中;其中,所述HDFS写入缓冲区按照生产者-消费者的多线程同步方式管理。

7.根据权利要求5所述的方法,其特征在于:

当所述数据块需要存储在HBase存储模块中时,对应的存储控制器将所述数据块写入到预先设置的HBase写入缓冲区中,预先设置的写入线程池中的多个HBase写入线程分别从所述HBase写入缓冲区中读取数据块,并根据各个数据块的全局唯一的标识依次将各个数据块写入所述HBase存储模块中。

8.根据权利要求7所述的方法,其特征在于,所述将所需存储的数据分割成预设的固定大小的数据块,并为每个数据块设置全局唯一的标识包括:读取所需存储的数据,设所需存储的数据为文件F;

获取所述文件F的元数据并存储到Oracle存储模块中,记录文件F的文件状态为不可用;

在HBase存储模块中创建一条记录,所述记录的RowKey为Oracle存储模块中的文件F的文件ID;

根据预设的固定大小,将文件F分割成若干个数据块并为每个数据块设置全局唯一的标识,根据分割后的各个数据块形成文件块列表FC。

9.根据权利要求8所述的方法,其特征在于,所述根据各个数据块的全局唯一的标识依次将各个数据块写入所述HBase存储模块中包括如下步骤:A1、初始化时间戳T=0,根据数据块的全局唯一的标识,逆序排列所述文件块列表FC中的所有数据块;

A2、对于逆序排列后的所述文件块列表FC中的第T+1个文件块C,将文件块C的内容、大小、MD5值及时间戳T存储到HBase存储模块中;时间戳自增:T=T+1;

A3、判断判断当前的时间戳T的取值是否大于预设的时间戳阈值,如果是,则执行步骤A4;否则,返回执行步骤A1;

A4、将存储在Oracle存储模块中的文件F的文件状态设置为可用。

10.根据权利要求9所述的方法,其特征在于,通过如下的步骤从所述HBase存储模块读取所存储的数据:从Oracle存储模块中获取所需读取的数据的元数据,设所需读取的数据为文件F;

根据所述元数据中的文件F的读取范围,计算HBase存储模块中与文件F对应的各个文件块的时间戳区间TC;

从HBase存储模块中获取时间戳区间TC对应的文件块;

从HBase存储模块中依次下载所获取的所有文件块,并计算文件块的MD5值,以保证数据正确下载;对未正确下载的文件块进行重试;若重试N次仍未成功则返回错误;其中,N为预设的数值。

11.根据权利要求1所述的方法,其特征在于,该方法进一步包括:多个客户端同时通过客户端读取线程对存储控制器发送数据读取请求,远程调用存储控制器中的存储控制线程池中的各个存储控制线程,对HDFS存储模块和HBase存储模块中所存储的对应的数据块进行并行读取,实现多线程数据下载。

说明书 :

一种目标特性数据的存储方法和系统

技术领域

[0001] 本申请涉及数据存储技术领域,尤其涉及一种目标特性数据的存储方法和系统。

背景技术

[0002] 在现有技术中,随着现代战场环境日趋复杂,目标特性数据的容量越来越大、增长速度越来越快、数据类型越来越多样,传统关系型数据库系统(RDBMS)由于存储容量、性能等限制,难以满足海量特性数据的存储与管理。
[0003] 在目标特性领域主要存在两类数据:结构化数据和非结构化数据。结构化数据具有一定的数据格式,可被解析并存储到关系型数据库(RDBMS)中。非结构化数据的格式和规模不固定,无法直接解析,如原始雷达、红外测量数据等。在目标特性领域,非结构化数据在数据规模和容量上远多于结构化数据。随着测量、仿真次数的增多,非结构数据增长迅速。因此,如何统一存储和管理这些特性文件,解决大量小文件查询效率问题以及大文件存储、上传、下载效率问题,为后续分析处理提供数据支持,已成为目标特性行业中亟需解决的难题。

发明内容

[0004] 有鉴于此,本发明提供了一种目标特性数据的存储方法和系统,从而可以降低数据存储成本,统一管理和维护数据,保障数据安全,方便数据共享和使用。
[0005] 本发明的技术方案具体是这样实现的:
[0006] 一种目标特性数据的存储方法,该方法包括:
[0007] 预先设置多个用于存储数据的数据存储模块以及对应的存储控制器;所述数据存储模块包括:Oracle存储模块、HDFS存储模块、HBase存储模块和Cache存储模块;
[0008] 客户端向分发器发送数据存储请求,所述数据存储请求中携带有数据信息,所述数据信息包括:密级信息、共享信息、用户组信息和访问权限信息;
[0009] 分发器根据接收到的数据存储请求以及各个存储控制器的负载情况选择一个存储控制器,将数据存储请求转发给所选择的存储控制器,并将所选择的存储控制器通知所述客户端;
[0010] 客户端与存储控制器直接进行通信,存储控制器为客户端提供统一的数据读写接口,将客户端上传的数据存储到与所述存储控制器对应的数据存储模块中。
[0011] 较佳的,该方法进一步包括:
[0012] 所述分发器根据预设的分发策略将同一用户的所有请求分发给对应的存储控制器,每个存储控制器均可访问所有的数据存储模块;
[0013] 其中,所述分发策略为:对用户地址进行一致性哈希分配策略分配对应的存储控制器。
[0014] 较佳的,该方法进一步包括:
[0015] 通过文件共享表来为各个用户分配所拥有的对文件的操作权限;
[0016] 预先设置一个或多个用户组,每一个用户组对应一组文件的操作权限,通过用户组的方式给用户授权。
[0017] 较佳的,该方法进一步包括:
[0018] 当所需存储的数据为结构化数据时,所需存储的数据被存储到Oracle存储模块中;
[0019] 当所需存储的数据为非结构化数据时,如果数据大小大于预设阈值,则所需存储的数据被存储到HDFS存储模块中;如果数据大小不大于预设阈值,则所需存储的数据被存储到HBase存储模块中。
[0020] 较佳的,在将数据存储到数据存储模块中之前,客户端将所需存储的数据分割成预设的固定大小的数据块,并为每个数据块设置全局唯一的标识,再将各个数据块分别独立地发送给数据存储模块;
[0021] 各个数据存储模块根据各个数据块的全局唯一的标识进行数据重传和文件重构操作。
[0022] 较佳的,当所述数据块需要存储在HDFS存储模块中时,对应的存储控制器将所述数据块写入到预先设置的HDFS写入缓冲区中,再通过HDFS写入线程从所述HDFS写入缓冲区中读取数据块,并根据各个数据块的全局唯一的标识依次将各个数据块写入所述HDFS存储模块中;其中,所述HDFS写入缓冲区按照生产者-消费者的多线程同步方式管理。
[0023] 较佳的,当所述数据块需要存储在HBase存储模块中时,对应的存储控制器将所述数据块写入到预先设置的HBase写入缓冲区中,预先设置的写入线程池中的多个HBase写入线程分别从所述HBase写入缓冲区中读取数据块,并根据各个数据块的全局唯一的标识依次将各个数据块写入所述HBase存储模块中。
[0024] 较佳的,所述将所需存储的数据分割成预设的固定大小的数据块,并为每个数据块设置全局唯一的标识包括:
[0025] 读取所需存储的数据,设所需存储的数据为文件F;
[0026] 获取所述文件F的元数据并存储到Oracle存储模块中,记录文件F的文件状态为不可用;
[0027] 在HBase存储模块中创建一条记录,所述记录的RowKey为Oracle存储模块中的文件F的文件ID;
[0028] 根据预设的固定大小,将文件F分割成若干个数据块并为每个数据块设置全局唯一的标识,根据分割后的各个数据块形成文件块列表FC。
[0029] 较佳的,所述根据各个数据块的全局唯一的标识依次将各个数据块写入所述HBase存储模块中包括如下步骤:
[0030] A1、初始化时间戳T=0,根据数据块的全局唯一的标识,逆序排列所述文件块列表FC中的所有数据块;
[0031] A2、对于逆序排列后的所述文件块列表FC中的第T+1个文件块C,将文件块C的内容、大小、MD5值及时间戳T存储到HBase存储模块中;时间戳自增:T=T+1;
[0032] A3、判断判断当前的时间戳T的取值是否大于预设的时间戳阈值,如果是,则执行步骤A4;否则,返回执行步骤A1;
[0033] A4、将存储在Oracle存储模块中的文件F的文件状态设置为可用。
[0034] 较佳的,通过如下的步骤从所述HBase存储模块读取所存储的数据:
[0035] 从Oracle存储模块中获取所需读取的数据的元数据,设所需读取的数据为文件F;
[0036] 根据所述元数据中的文件F的读取范围,计算HBase存储模块中与文件F对应的各个文件块的时间戳区间TC;
[0037] 从HBase存储模块中获取时间戳区间TC对应的文件块;
[0038] 从HBase存储模块中依次下载所获取的所有文件块,并计算文件块的MD5值,以保证数据正确下载;对未正确下载的文件块进行重试;若重试N次仍未成功则返回错误;其中,N为预设的数值。
[0039] 较佳的,通过如下步骤从数据存储模块中读取所需的数据:
[0040] B1、设所需读取的数据为文件F,当用户U需要读取文件F时,发送数据读取请求以请求执行数据读取操作FP;所述数据读取请求中携带有用户信息,所述用户信息包括:用户组信息和访问权限信息;
[0041] B2、根据所述用户信息判断该用户U是否为文件F的所有者;如果是,执行FP并结束流程;否则,执行步骤B3;
[0042] B3、根据所述用户信息判断该用户U是否满足文件F的密级要求;如果是,执行步骤B4;否则,向用户返回用户密级不匹配的错误提示信息并结束流程;
[0043] B4、判断所述文件F是否共享;如果是,执行步骤B5;否则,向用户返回无法访问私有文件的错误提示信息并结束流程;
[0044] B5、判断所述文件F的默认权限是否满足FP要求;如果是,执行FP并结束流程;否则,执行步骤B6;
[0045] B6、根据所述用户信息获取所述用户U所属的用户组以及对应的文件共享权限集合;
[0046] B7、判断文件共享权限集合中是否存在对文件F执行FP的权限;如果是,执行FP;否则,向用户返回无操作权限的错误提示信息。
[0047] 较佳的,该方法进一步包括:
[0048] 多个客户端同时通过客户端读取线程对存储控制器发送数据读取请求,远程调用存储控制器中的存储控制线程池中的各个存储控制线程,对HDFS存储模块和HBase存储模块中所存储的对应的数据块进行并行读取,实现多线程数据下载。
[0049] 如上可见,在本发明的技术方案中,提出了一种基于Oracle和Hadoop的目标特性数据存储方法和系统,从而可以利用Hadoop的分布式处理和存储能力,弥补Oracle在海量数据存储的不足,降低数据存储成本,统一管理和维护数据,保障数据安全,解决数据孤岛和单点故障问题,方便数据共享和使用,为后续目标特性数据处理、挖掘和应用研究等提供数据和存储支持。

附图说明

[0050] 图1为本发明实施例中的目标特性数据的存储方法的流程图。
[0051] 图2为本发明实施例中的访问控制模型E-R图。
[0052] 图3为本发明实施例中的多线程数据上传逻辑流程示意图。
[0053] 图4为本发明实施例中的将数据存储到HBase存储模块的逻辑流程示意图。
[0054] 图5为本发明实施例中的从HBase存储模块中读取数据的逻辑流程示意图。
[0055] 图6为本发明实施例中从数据存储模块中读取所需的数据的流程示意图。
[0056] 图7为本发明实施例中的多线程数据下载逻辑流程示意图。
[0057] 图8为本发明实施例中的目标特性数据存储系统的结构示意图。
[0058] 图9为本发明实施例中的目标特性数据存储系统的实际部署示意图。

具体实施方式

[0059] 为使本发明的技术方案及优点更加清楚明白,以下结合附图及具体实施例,对本发明作进一步详细的说明。
[0060] 图1为本发明实施例中的目标特性数据的存储方法的流程图。如图1所示,本发明实施例中的目标特性数据的存储方法包括如下所述步骤:
[0061] 步骤101,预先设置多个用于存储数据的数据存储模块以及对应的存储控制器;所述数据存储模块包括:Oracle存储模块、HDFS存储模块、HBase存储模块和Cache存储模块。
[0062] 在现有技术中,Oracle数据库是一种已经广泛应用到各个领域的通用数据库,可以提供相应的数据管理功能。因此,在本发明的技术方案中,Oracle存储模块可以使用Oracle数据库的方式来存储相应的数据。但是,Oracle数据库由于存储容量、性能等限制,在海量特性数据存储方面还存在一定的不足之处,而且数据存储成本较高。因此,如图8所示,在本发明的技术方案中,除了Oracle存储模块之外,还可以使用HDFS存储模块、HBase存储模块和Cache存储模块来存储数据,为系统提供底层存储服务,从而可以利用Hadoop的分布式处理和存储能力,弥补Oracle在海量数据存储的不足,降低数据存储成本,统一管理和维护数据,保障数据安全,解决数据孤岛和单点故障问题,方便数据共享和使用,为后续目标特性数据处理、挖掘和应用研究等提供数据和存储支持。
[0063] 其中,现有技术中的Hadoop是一个由Apache基金会所开发的分布式系统基础架构,其具体的实现可以是一个Hadoop分布式文件系统(HDFS,Hadoop Distributed File System)。HDFS具有高容错性的特点,并且设计用来部署在低廉的硬件上;而且还可以提供高吞吐量来访问应用程序的数据。
[0064] 另外,HBase是Apache的Hadoop项目的子项目,是一个分布式的、面向列的开源数据库,适合于非结构化数据存储的数据库。Hadoop和HBase可运行在廉价的计算机上,为系统提供安全、快速、可扩展的数据存储集群服务,有效降低数据存储成本。
[0065] 此外,在本发明的技术方案中,当设置了多个数据存储模块之后,分发器可以根据预设的分发策略将同一用户的所有请求分发给对应的存储控制器,每个存储控制器均可访问所有的数据存储模块。
[0066] 另外,较佳的,在本发明的具体实施例中,所述分发策略可以包括:轮训、随机分配或一致性哈希分配等分发策略。
[0067] 在本发明的一个较佳实施例中,采用对用户地址进行一致性哈希分配策略分配对应的存储控制器,实现系统的负载均衡。
[0068] 由于在本发明的技术方案中设置了多个数据存储模块和多个存储控制器,因此还可以有效地防止由于单点故障导致整个系统瘫痪的问题,还可以有效地提高系统吞吐率。
[0069] 步骤102,客户端向分发器发送数据存储请求,所述数据存储请求中携带有数据信息,所述数据信息包括:密级信息、共享信息、用户组信息和访问权限信息。
[0070] 在目标特性数据领域,由于行业的保密性质,特定文件只能在特定范围内使用。为了在保密的前提下更大范围地满足文件共享的需要,且现有技术中的Hadoop的权限机制不能满足该要求,因此在本发明的技术方案中,对文件系统权限进行了重新设计。例如,可以预先对所需存储的数据或文件设立密级属性(即密级信息),并预先对访问数据或文件的用户也建立的相应的岗位密级。所以,在本发明的技术方案中,对于特定的数据或文件,只有满足相应的密级要求的用户才有访问该数据或文件的权限。因此,用户在上传数据或文件进行存储的同时,需要表明该数据或文件的密级以及是否可以共享(即共享信息),从而确保只有特定范围的人员才能访问该数据或文件。
[0071] 因此,为了更好地挖掘目标特性数据的价值,在本发明的技术方案中设计了文件共享功能。数据或文件的所有者在通过客户端向分发器发送数据存储请求之前,可以预先根据所需存储的数据或文件的情况创建或选择特定的用户组(即用户组信息),同时设定对应的访问权限(即访问权限信息)。例如,只有属于特定的用户组的用户才具有该文件的访问权限。
[0072] 所以,在本步骤中,用户在通过客户端向分发器发送数据存储请求时,将在该数据存储请求中携带与所需存储的数据相关的数据信息,该数据信息可以包括:密级信息、共享信息、用户组信息和访问权限信息等信息。
[0073] 另外,在本发明的技术方案中,还可以为不同的用户设置不同的访问权限。例如,较佳的,在本发明的一个具体实施例中,所述访问权限信息中的访问权限可以包括:读权限(r)、写权限(w)、执行权限(x)和无权限(0)等。
[0074] 另外,较佳的,在本发明的一个具体实施例中,可以对所需存储的数据或文件的权限以及具有相应权限的用户组预先进行设计。例如,图2为本发明实施例中的访问控制模型E-R图,如图2所示,在本发明的技术方案中,可以借鉴基于角色的访问控制技术,通过文件共享表来为各个用户分配所拥有的对文件的操作权限。为方便管理和维护,可以预先设置一个或多个用户组,每一个用户组对应一组文件的操作权限,通过用户组的方式给用户授权。
[0075] 例如,如图2所示,“用户文件表”与“用户表”之间存在一对多关系,“用户表”和“用户组”之间通过“用户所属组”组成多对多关系,“用户组”和“用户文件表”之间也属于多对多关系。其中,用户表中记录了用户的用户名、密码、用户状态、岗位密级等信息;用户文件表定义了存储文件的文件名、保存路径、所有者、密级、文件类型、文件大小、文件状态、创建时间、修改时间、是否共享、默认权限、备注等信息。用户所属组表中记录了用户ID和项目组ID等信息。用户组表中记录了组名称和备注等信息。文件共享表中记录了文件ID、用户组ID和访问权限等信息。其中,文件名及文件类型由文件所有者定义,其保存路径对应该文件在系统中的存储位置,当文件(即所需存储的数据)大小超过阈值时,该文件被保存到HDFS上,保存路径对应HDFS中的文件路径;当文件大小不超过阈值时,则被存储到HBase中,保存路径则对应HBase中的一条记录。文件状态标记该文件是否可用,一个文件被删除时会被标记为不可用,待系统执行清理任务才被真正删除;系统定期执行删除任务,在执行删除任务前,仍可恢复该文件,防止数据误删。当文件所有者上传文件时,可设置该文件是否可以被共享以及其他用户的默认权限等,如文件F可被共享且默认权限为只读时,若用户U的岗位密级不低于文件F的密级时,用户U默认具有文件F的只读权限。通过设置文件的默认权限,可减少文件共享表存储的记录数。
[0076] 步骤103,分发器根据接收到的数据存储请求以及各个存储控制器的负载情况选择一个存储控制器,将数据存储请求转发给所选择的存储控制器,并将所选择的存储控制器通知所述客户端。
[0077] 由于在本发明的技术方案中,预先设置了多个数据存储模块和存储控制器,因此,分发器在收到客户端发送的数据存储请求之后,将根据各个存储控制器的负载情况为该客户端选择一个存储控制器,然后将数据存储请求转发给所选择的存储控制器,并将所选择的存储控制器通知所述客户端。
[0078] 步骤104,客户端与存储控制器直接进行通信,存储控制器为客户端提供统一的数据读写接口,将客户端上传的数据存储到与所述存储控制器对应的数据存储模块中。
[0079] 其中,当所需存储的数据为结构化数据时,所需存储的数据被存储到系型数据库(即Oracle存储模块)中;
[0080] 而当所需存储的数据为非结构化数据时,数据大小大于预设阈值的数据被存储到HDFS存储模块中,数据大小不大于预设阈值的数据被存储到HBase存储模块中。
[0081] 另外,在本发明的技术方案中,为提高数据传输效率,在将数据存储到数据存储模块中之前,客户端将所需存储的数据或文件分割成预设的固定大小的数据块,并为每个数据块设置全局唯一的标识(例如,文件唯一编号+文件块下标等),然后再将各个数据块分别独立地发送给数据存储模块,数据存储模块可以根据各个数据块的标识进行数据重传和文件重构等操作。
[0082] 此外,在本发明的技术方案中,为提高数据传输效率,还可以使用多线程的数据上传方法来存储数据。
[0083] 例如,图3为本发明实施例中的多线程数据上传逻辑流程示意图,如图3所示,由于HDFS存储模块在写入数据时,只支持单线程方式,因此,较佳的,在本发明的一个具体实施例中,当所述数据块需要存储在HDFS存储模块中时,对应的存储控制器将所述数据块写入到预先设置的HDFS写入缓冲区中,然后再通过HDFS写入线程从所述HDFS写入缓冲区中读取数据块,并根据各个数据块的标识依次将各个数据块写入所述HDFS存储模块中。
[0084] 其中,所述HDFS写入缓冲区可以按照生产者-消费者的多线程同步方式管理。
[0085] 再例如,较佳的,在本发明的一个具体实施例中,当所述数据块需要存储在HBase存储模块中时,对应的存储控制器将所述数据块写入到预先设置的HBase写入缓冲区中,然后,预先设置的写入线程池中的多个HBase写入线程分别从所述HBase写入缓冲区中读取数据块,并根据各个数据块的标识依次将各个数据块写入所述HBase存储模块中。
[0086] 另外,在本发明的技术方案中,由于在HBase中,列簇是数据存储和访问控制的基本单元,同一列簇的列通常具有相同的类型。因此,为了充分利用HBase存储模块的存储特性,提高存储效率,在本发明的一个具体实施例中可以预先设置如表1所示的存储模型:
[0087]
[0088]
[0089] 表1
[0090] 因此,可以根据上述表1中所示的存储模型进行数据的存储。
[0091] 例如,较佳的,在本发明的一个具体实施例中,在将数据存储到HBase存储模块中之前,可以根据预设的固定大小,将所需存储的数据(例如,一个文件)分割成若干个数据块(Chunk),存储到列簇Content的Chunk列中,每个文件可以对应HBase数据库中的一行,以Oracle中的文件ID作为行键(RowKey)进行索引。同时,记录各个数据块的大小和MD5值,存储在MetaInfo列簇中的大小(Size)和MD5列中,以方便数据块的读取和校验。
[0092] 例如,图4为本发明实施例中的将数据存储到HBase存储模块的逻辑流程示意图,如图4所示,较佳的,在本发明的一个具体实施例中,当所需存储的数据需要存储在HBase存储模块中时,所述将所需存储的数据分割成若干个数据块可以包括如下的步骤:
[0093] 步骤401,读取所需存储的文件F(即所需存储的数据)。
[0094] 步骤402,获取所述文件F的元数据并存储到Oracle存储模块中,记录文件F的文件状态为不可用。
[0095] 步骤403,在HBase存储模块中创建一条记录,该记录的RowKey为Oracle存储模块中的文件F的文件ID。
[0096] 步骤404,根据预设的固定大小(即ChunkSize),将文件F分割成若干个数据块并为每个数据块设置全局唯一的标识(例如,文件唯一编号+文件块下标等),根据分割后的各个数据块形成文件块列表(FC)。
[0097] 在将文件F分割成若干个数据块之后,即可对各个数据块进行存储。
[0098] 例如,较佳的,在本发明的一个具体实施例中,所述根据各个数据块的标识依次将各个数据块写入所述HBase存储模块中可以包括如下步骤:
[0099] 步骤405,初始化时间戳T=0,根据数据块的全局唯一的标识,逆序排列所述文件块列表FC中的所有数据块。
[0100] 步骤406,对于逆序排列后的所述文件块列表FC中的第T+1个文件块C,将文件块C的内容、大小、MD5值及时间戳T存储到HBase存储模块中;时间戳自增:T=T+1;从而可以保证在后续过程中从HBase存储模块中读取数据时,所获得的文件块列表是根据数据块的全局唯一的标识正序排列的;
[0101] 步骤407,判断所述文件块列表FC是否遍历完成(即判断当前的时间戳T的取值是否大于预设的时间戳阈值),如果是,则执行步骤408;否则,返回执行步骤405;
[0102] 步骤408,将存储在Oracle存储模块中的文件F的文件状态设置为可用。
[0103] 通过上述的步骤401~408,即可将所需存储的数据存储到HBase存储模块中。
[0104] 更进一步的,在本发明的一个具体实施例中,图5为本发明实施例中的从HBase存储模块中读取数据的逻辑流程示意图,如图5所示,当需要从所述HBase存储模块读取上述所存储的数据时,可以通过如下的步骤实现:
[0105] 步骤501,从Oracle存储模块中获取所需读取的文件F(即所需读取的数据)的元数据。
[0106] 步骤502,根据所述元数据中的文件F的读取范围,计算HBase存储模块中与文件F对应的各个文件块的时间戳区间TC。
[0107] 步骤503,从HBase存储模块中获取时间戳区间TC对应的文件块Chunk。
[0108] 步骤504,从HBase存储模块中依次下载所获取的所有文件块,并计算文件块的MD5值,以保证数据正确下载;对未正确下载的文件块进行重试;若重试N次仍未成功则返回错误;其中,N为预设的数值,例如,N=3。
[0109] 通过上述的步骤501~504,即可从所述HBase存储模块读取上述所存储的数据。
[0110] 另外,在本发明的技术方案中,可以根据用户的要求,从各个数据存储模块中读取所需的数据。
[0111] 例如,图6为本发明实施例中从数据存储模块中读取所需的数据的流程示意图,如图6所示,较佳的,在本发明的一个具体实施例中,可以通过如下步骤从数据存储模块中读取所需的数据:
[0112] 步骤601,当用户U需要读取文件F(即所需读取的数据)时,发送数据读取请求以请求执行数据读取操作(FP);所述数据读取请求中携带有用户信息,所述用户信息包括:用户组信息和访问权限信息。
[0113] 步骤602,根据所述用户信息判断该用户U是否为文件F的所有者;如果是,执行FP并结束流程;否则,执行步骤603;
[0114] 步骤603,根据所述用户信息判断该用户U是否满足文件F的密级要求;如果是,执行步骤604;否则,向用户返回用户密级不匹配的错误提示信息并结束流程;
[0115] 步骤604,判断所述文件F是否共享;如果是,执行步骤605;否则,向用户返回无法访问私有文件的错误提示信息并结束流程;
[0116] 步骤605,判断所述文件F的默认权限是否满足FP要求;如果是,执行FP并结束流程;否则,执行步骤606;
[0117] 步骤606,根据所述用户信息获取所述用户U所属的用户组(UG)以及对应的文件共享权限集合(PG);
[0118] 步骤607,判断PG中是否存在对文件F执行FP的权限;如果是,执行FP;否则,向用户返回无操作权限的错误提示信息。
[0119] 通过上述的步骤601~607,即可从数据存储模块中读取所需的数据。
[0120] 另外,由于在本发明的技术方案中,HDFS存储模块和HBase存储模块都可以支持多线程并发读取,因此,本发明中可以对所需读取的数据进行多线程下载。
[0121] 例如,图7为本发明实施例中的多线程数据下载逻辑流程示意图,如图7所示,较佳的,在本发明的一个具体实施例中,多个客户端可以同时通过客户端读取线程对存储控制器发送数据读取请求,远程调用存储控制器中的存储控制线程池中的各个存储控制线程,对HDFS存储模块和HBase存储模块中所存储的对应的数据块进行并行读取,从而实现多线程数据下载。
[0122] 此外,在数据或文件的下载过程中,还可以将经常访问的文件元数据和文件块进行缓存,从而可以有效地减少磁盘I/O,提高系统响应速度。
[0123] 图9为本发明实施例中的目标特性数据存储系统的实际部署示意图,如图9所示,在本发明的一个较佳的具体实施例中,Oracle存储模块、HDFS存储模块和HBase存储模块可以分别采用Oracle 11g、Hadoop2.6和HBase 1.1作为数据持久化存储模块,然后采用内存数据库Redis作为全局缓存,使用Thrift进行远程调用。Hadoop/HBase集群对应一个主节点和多个子节点,主节点部署HDFS的名称节点(NameNode)(用于存储HDFS的元数据)和HBase的HMaster(用于存储HBase的元数据);子节点部署HDFS的数据节点(DataNode)(用于存储HDFS中的数据)和HBase的HRegionServer(用于存储HBase中的数据)。存储控制器、分发器和客户端可以分别部署在10台个人计算机(例如,DELL 7010)上,通过千兆以太网连接。其中,存储控制器及Hadoop集群(即HDFS存储模块和HBase存储模块)可根据实际具体应用情况的需要增加节点;Thrift是跨平台和支持多语言的远程调用框架,可方便数据处理程序调用。
[0124] 综上所述,在本发明的技术方案中,提出了一种基于Oracle和Hadoop的目标特性数据存储方法和系统,从而可以利用Hadoop的分布式处理和存储能力,弥补Oracle在海量数据存储的不足,降低数据存储成本,统一管理和维护数据,保障数据安全,解决数据孤岛和单点故障问题,方便数据共享和使用,为后续目标特性数据处理、挖掘和应用研究等提供数据和存储支持。
[0125] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。