一种基于NoSQL的海量航空物流小文件存储结构及其存取方法

文档序号:10612957阅读:221来源:国知局
一种基于NoSQL的海量航空物流小文件存储结构及其存取方法
【专利摘要】本发明公开了一种基于NoSQL的海量航空物流小文件存储结构及其存取方法,其中基于NoSQL的海量航空物流小文件存储结构包括数据缓存区、数据活跃区和数据永久区;基于NoSQL的海量航空物流小文件存储结构的文件存取方法包括文件存储、文件访问和文件永久化处理三个过程;该基于NoSQL的海量航空物流小文件存储结构及其存取方法设计多级存储机制,并采用文件的预取机制,有效提高了小文件的存取效率,显著地降低了集群NameNode的内存消耗,有效提高了磁盘的利用率。
【专利说明】
一种基于NoSQL的海量航空物流小文件存储结构及其存取方法
技术领域
[0001]本发明属于数据存储技术领域,特别涉及一种基于NoSQL的海量航空物流小文件存储结构及其存取方法。
【背景技术】
[0002]针对航空物流行业来说,由于大多数信息的交换都是以报文的形式存在,而且报文的类型也比较多,主要类型有3种:xml、cimp、typeb,其中xml类型的数据占80%以上,每个报文的大小基本在l_3kB左右。航空物流信息系统的iLink平台上每天的数据交换量在1G左右,对于1G大小的数据来说,大约有上千万个报文。随着民航信息产业的不断发展,导致海量数据信息呈爆炸式增长,传统的数据存储方式已经不能应对当前产业的需求,原因主要存在两方面:一方面是存储效率不高,另一方面是响应时间过长;因此,各企业单位为了满足生产的需要,逐渐将数据接入云存储平台存储。
[0003]目前,最典型的云存储平台是Hadoop分布式文件系统(HDFS),相对于传统的存储介质,Hadoop分布式文件系统(HDFS)通过多台廉价的机器支持大规模的文件存储,伸缩性强,解决了存储空间的限制性问题;与此同时,HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用,而且即使在出错的情况下也能保证数据存储的可靠;然而HDFS是专门针对大文件存储的分布式系统,存储小文件效率极其低下,在HDFS存储小文件的时候,分布式集群NameNode会消耗大量的内存空间去管理每个小文件的元数据,使得文件的访问效率大大降低,另外HDFS的存储是按照数据块存储的,大量的小文件存储就会极大地浪费磁盘空间,导致存储效率不高。

【发明内容】

[0004]本发明的目的是提供一种基于NoSQL的海量航空物流小文件存储结构及其存取方法。
[0005]为此,本发明技术方案如下:
[0006]一种基于NoSQL的海量航空物流小文件存储结构包括数据缓存区、数据活跃区和数据永久区;其中数据活跃区位于数据缓存区和数据永久区之间;
[0007]所述的数据缓存区位于每个数据节点的节点内存中,采用Redis内存数据库做缓存,且各数据节点的Redis数据库之间自建集群,用于存储小文件的索引和缓存数据预取机制的文件;
[0008]所述的数据活跃区属于HDFS的数据节点的数据存储区,用于存储在活跃区内的文件数据;
[0009]所述的数据永久区属于HDFS的数据节点的数据存储区,并采用数据块的压缩式存储方式对数据进行存储;
[0010]所述的基于NoSQL的海量航空物流小文件存储结构的文件存取方法包括文件存储、文件访问和文件永久化处理三个过程;
[0011]所述的文件存储过程包括按顺序进行的下列步骤:
[0012]步骤I):将海量的小文件批量的读取到Redis内存中,解析小文件,将文件的航班号和文件类型提取出来;
[0013]步骤2):将提取出的文件航班号、文件类型和文件一起批量的存储到数据缓存区的Redis缓存中,并利用Redis的客户端分片功能来扩展写的性能;
[0014]步骤3):将一次航班的业务性报文和非业务性报文分别聚集起来,并将它们加入文件合并进程,在数据缓存区的Redis缓存中建立每个小文件的索引,在合并的文件中建立内部索引,将文件在大文件中的偏移量返回给Redis;
[0015]步骤4):将合并好的文件提交至HDFS客户端,将文件存储到HDFS上。
[0016]所述的文件访问过程包括按顺序进行的下列步骤:
[0017]a、接收应用程序的文件访问请求,再将请求提交给Redis客户端;
[0018]b、在数据缓存区的Redis数据库中搜索要读取的文件,如果能找到,立即将报文反馈给应用程序,并结束访问,否则进入步骤c;
[0019]c、在Redis数据库中搜索文件索引表,找到要读取的文件对应的索引,根据索引找到在HDFS上存储的位置;
[0020]d、据步骤c查找的文件索引,解析文件索引中读取的文件是否已经持久化,若没有持久化,生成一条文件读取命令提交给HDFS的客户端,从HDFS上读取想要的文件,否则进入步骤e;
[0021]e、向HDFS的客户端提交一个数据块解压缩命令,将要访问的数据块从数据永久级解压缩成数据活跃级;
[0022]f、从HDFS读取想要的文件,并转存到数据缓存区的Redis数据库中,并将文件反馈给应用程序;
[0023]g、数据预存机制被触发,根据上一时刻读取文件在数据块中的偏移量,通过数据块内部索引确定要预取的数据的偏移量和长度,将数据发送到数据缓存区并存储到Redis。
[0024]所述的文件永久化处理过程包括按顺序进行的下列步骤:
[0025]I)永久化监视器向Redis客户端提交一次统计查询,将属于同一数据块的文件做一次统计,判断这一数据块的文件的上一次访问时间是否都超过了设定的永久化时间,没有超过继续监视,否则进入步骤2);
[0026]2)向HDFS的客户端提交一次数据块永久化任务;
[0027]3)HDFS客户端接到数据永久化任务,针对这些数据块进行一次压缩,将这些数据从数据活跃区转移到数据永久区。
[0028]与现有技术相比,该发明提供的基于NoSQL的海量航空物流小文件存储结构及其存取方法主要结合当前最流行的云存储平台,又结合使用内存数据库Redis,并根据航空物流数据的基于时间的有效性,设计多级存储机制,并采用文件的预取机制,有效提高了小文件的存取效率,显著地降低了集群NameNode的内存消耗,控制了磁盘数据的快速增长,有效提高了磁盘的利用率。
【附图说明】
[0029]图1为分布式多级存储结构。
[0030]图2为数据块内部索引结构示意图。
[0031]图3为文件存储流程图。
[0032]图4为文件访问流程图。
[0033]图5为文件永久化处理流程图。
[0034]图6为本发明的存取方法与原生的HDFS存储时间对比图。
[0035]图7为本发明的存取方法与原生的HDFS内存占用量对比图。
[0036]图8为本发明的存取方法与原生的HDFS随机读取时所用时间对比图。
[0037]图9为本发明的存取方法与原生的HDFS顺序读取时所用时间对比图。
[0038]图10为本发明的存取方法与原生的HDFS随时间增长文件存储量对比图。
【具体实施方式】
[0039]下面结合附图及具体实施例对本发明做进一步的说明,但下述实施例绝非对本发明有任何限制。
[°04°]如图1-5所示,该基于NoSQL的海量航空物流小文件存储结构包括数据缓存区、数据活跃区和数据永久区;其中数据活跃区位于数据缓存区和数据永久区之间;
[0041]所述的数据缓存区位于每个数据节点的节点内存中,采用Redis内存数据库做缓存,且各数据节点的Redis数据库之间自建集群,用于存储小文件的索引和缓存数据预取机制的文件;
[0042]所述的数据活跃区属于HDFS的数据节点的数据存储区,用于存储在活跃区内的文件数据;
[0043]所述的数据永久区属于HDFS的数据节点的数据存储区,并采用数据块的压缩式存储方式对数据进行存储;
[0044]所述的基于NoSQL的海量航空物流小文件存储结构的文件存取方法包括文件存储、文件访问和文件永久化处理三个过程;
[0045]所述的文件存储过程包括按顺序进行的下列步骤:
[0046]步骤I):将海量的小文件批量地读取到Redis内存中,解析小文件,将文件的航班号和文件类型提取出来;
[0047]步骤2):将提取出的文件航班号、文件类型和文件一起批量地存储到数据缓存区的Redis缓存中,并利用Redis的客户端分片功能来扩展写的性能;
[0048]步骤3):将一次航班的业务性报文和非业务性报文分别聚集起来,并将它们加入文件合并进程,在数据缓存区的Redis缓存中建立每个小文件的索引,在合并的文件中建立内部索引,将文件在大文件中的偏移量返回给Redis;
[0049]步骤4):将合并好的文件提交至HDFS客户端,将文件存储到HDFS上。
[0050]所述的文件访问过程包括按顺序进行的下列步骤:
[0051 ] a、接收应用程序的文件访问请求,再将请求提交给Redis客户端;
[0052]b、在数据缓存区的Redis数据库中搜索要读取的文件,如果能找到,立即将报文反馈给应用程序,并结束访问,否则进入步骤c;
[0053]c、在Redis数据库中搜索文件索引表,找到要读取的文件对应的索引,根据索引找到在HDFS上存储的位置;
[0054]d、据步骤c查找的文件索引,解析文件索引中读取的文件是否已经持久化,若没有持久化,生成一条文件读取命令提交给HDFS的客户端,从HDFS上读取想要的文件,否则进入步骤e;
[0055]e、向HDFS的客户端提交一个数据块解压缩命令,将要访问的数据块从数据永久级解压缩成数据活跃级;
[0056]f、从HDFS读取想要的文件,并转存到数据缓存区的Redis数据库中,并将文件反馈给应用程序;
[0057]g、数据预存机制被触发,根据上一时刻读取文件在数据块中的偏移量,通过数据块内部索引确定要预取的数据的偏移量和长度,将数据发送到数据缓存区并存储到Redis。
[0058]所述的文件永久化处理过程包括按顺序进行的下列步骤:
[0059]I)永久化监视器向Redis客户端提交一次统计查询,将属于同一数据块的文件做一次统计,判断这一数据块的文件的上一次访问时间是否都超过了设定的永久化时间,没有超过继续监视,否则进入步骤2);
[0060]2)向HDFS的客户端提交一次数据块永久化任务;
[0061]3)HDFS客户端接到数据永久化任务,针对这些数据块进行一次压缩,将这些数据从数据活跃区转移到数据永久区。
[0062]本发明提供的基于NoSQL的海量航空物流小文件存储结构及其存取方法的实施方式如下:
[0063]采用64位Cent0S7操作系统、2.6.4的Hadoop版本和3.0的Redis版本来搭建5个节点的集群环境,每个节点拥有I个CHJ和2G内存,HDFS的数据副本设置2份,本实验的数据为由某航空物流部门提供的某一周内的部分航空物流数据;
[0064]为了对比原生的HDFS方法和本发明提供的存取方法在文件存储效率和集群NameNode的内存占用量,分别进行五次实验,这五次实验分别存储10000个,50000个,100000个,150000个,200000个小文件进行对比,实验结果如图6和图7所示;
[0065]从图6可以看出来,随着存储文件数据量的增长,原生的HDFS方法所用的存储时间越来越长,而本发明提供的存取方法存储文件的时间增长缓慢,相比之下,本发明提供的存取方法存储文件的效率要高很多;从图7可以看出来,随着文件数量的增多,原生的HDFS的集群NameNode内存占用量呈直线增长趋势,而本发明提供的存取方法的集群NameNode的内存占用量增长率基本为零。
[0066]为了对比原生的HDFS和本发明提供的存取方法对小文件的读取效率,选取15万个小文件,分别采用随机读取和顺序读取方式进行试验,结果如图8和图9所示;
[0067]从图8可以看出,当对文件进行随机读取时,原生的HDFS和本发明提供的存取方法的文件读取效率基本上是一致的,且有时本发明提供的文件存取方法的读取效率比原生的HDFS要高;从图9可以看出,当采用顺序读取方式读取文件时,本发明提供的文件存取方法采用了缓存机制和数据预取机制,文件读取效率明显地高于原生的HDFS,本发明提供的文件存取方法的文件读取时间基本上是160毫秒左右,极大减少了多次磁盘I/O的时间,提高了文件的读取效率。
[0068]为了将本发明提供的文件存取方法和原生的HDFS对磁盘的利用率进行对比,每天存储15万个小文件进行实验,设置数据持久化的时间间隔为一天,若是在一天之内数据没有被访问,则表明该数据要做持久化存储,而实际环境中则需要根据以往经验进行设置;图10记录的是连续五天两个存储方案的数据增长趋势;
[0069]从图10可以看出,随着时间的变化,采用原生的HDFS存储的数据增长速度很快,而本发明提供的文件存取方法存储数据的增长速度非常缓慢,本发明提供的文件存取方法的存储方式是将向文件合并存储,同时将不经常被访问的数据进行压缩式存储,极大地节省磁盘空间。
【主权项】
1.一种基于NoSQL的海量航空物流小文件存储结构,其特征在于,所述的基于NoSQL的海量航空物流小文件存储结构包括数据缓存区、数据活跃区和数据永久区;其中数据活跃区位于数据缓存区和数据永久区之间。2.根据权利要求1所述的基于NoSQL的海量航空物流小文件存储结构,其特征在于,所述的数据缓存区位于每个数据节点的节点内存中,采用Redis内存数据库做缓存,且各数据节点的Redis数据库之间自建集群,用于存储小文件的索引和缓存数据预取机制的文件。3.根据权利要求1所述的基于NoSQL的海量航空物流小文件存储结构,其特征在于,所述的数据活跃区属于HDFS的数据节点的数据存储区,用于存储在活跃区内的文件数据。4.根据权利要求1所述的基于NoSQL的海量航空物流小文件存储结构,其特征在于,所述的数据永久区属于HDFS的数据节点的数据存储区,并采用数据块的压缩式存储方式对数据进行存储。5.—种如权利要求1所述的基于NoSQL的海量航空物流小文件存储结构的文件存取方法,其特征在于,所述的文件存取方法包括文件存储、文件访问和文件永久化处理三个过程。6.根据权利要求5所述的文件存取方法,其特征在于,所述的文件存储过程包括按顺序进行的下列步骤: 步骤I):将海量的小文件批量的读取到Redis内存中,解析小文件,将文件的航班号和文件类型提取出来; 步骤2):将提取出的文件航班号、文件类型和文件一起批量的存储到数据缓存区的Redis缓存中,并利用Redis的客户端分片功能来扩展写的性能; 步骤3):将一次航班的业务性报文和非业务性报文分别聚集起来,并将它们加入文件合并进程,在数据缓存区的Redi s缓存中建立每个小文件的索引,在合并的文件中建立内部索引,将文件在大文件中的偏移量返回给Redis; 步骤4):将合并好的文件提交至HDFS客户端,将文件存储到HDFS上。7.根据权利要求5所述的文件存取方法,其特征在于,所述的文件访问过程包括按顺序进行的下列步骤: a、接收应用程序的文件访问请求,再将请求提交给Redi s客户端; b、在数据缓存区的Redis数据库中搜索要读取的文件,如果能找到,立即将报文反馈给应用程序,并结束访问,否则进入步骤c; C、在Redis数据库中搜索文件索引表,找到要读取的文件对应的索引,根据索引找到在HDFS上存储的位置; d、据步骤c查找的文件索引,解析文件索引中读取的文件是否已经持久化,若没有持久化,生成一条文件读取命令提交给HDFS的客户端,从HDFS上读取想要的文件,否则进入步骤e; e、向HDFS的客户端提交一个数据块解压缩命令,将要访问的数据块从数据永久级解压缩成数据活跃级; f、从HDFS读取想要的文件,并转存到数据缓存区的Redis数据库中,并将文件反馈给应用程序; g、数据预存机制被触发,根据上一时刻读取文件在数据块中的偏移量,通过数据块内部索引确定要预取的数据的偏移量和长度,将数据发送到数据缓存区并存储到Redis。8.根据权利要求5所述的文件存取方法,其特征在于,所述的文件永久化处理过程包括按顺序进行的下列步骤: 1)永久化监视器向Redis客户端提交一次统计查询,将属于同一数据块的文件做一次统计,判断这一数据块的文件的上一次访问时间是否都超过了设定的永久化时间,没有超过继续监视,否则进入步骤2); 2)向HDFS的客户端提交一次数据块永久化任务; 3)HDFS客户端接到数据永久化任务,针对这些数据块进行一次压缩,将这些数据从数据活跃区转移到数据永久区。
【文档编号】G06F17/30GK105975638SQ201610481858
【公开日】2016年9月28日
【申请日】2016年6月23日
【发明人】丁建立, 郑峰弓, 李永华, 李国 , 王怀超
【申请人】中国民航大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1