一种用于多文件的存储方法

文档序号:8457369阅读:388来源:国知局
一种用于多文件的存储方法
【技术领域】
[0001]本发明涉及数据存储,特别涉及一种大数据的多文件存储方法。
【背景技术】
[0002]随着智慧医疗的迅速发展和海量医学数据的出现,需要相应的大型数据库作为载体来保存这些数据,但大数据的调度成了一个大问题。医学界的文件检索数量随着网络资源也呈指数级增长,尤其是小文件的更新速度和累积量都不断提升,已经成为医疗云存储亟待解决的问题。尽管分布式文件系统已经被广泛应用于大规模数据的存储、分析中,很多机构都已采用分布式文件系统来解决快速增长的数据问题。然而现有分布式文件系统的设计主要针对大文件的读写,大量小文件的存储会降低文件系统整体性能,不能被很好地应用在医学检索等以小文件存储为主的系统中。因此,针对相关技术中所存在的上述问题,目前尚未提出有效的解决方案。

【发明内容】

[0003]为解决上述现有技术所存在的问题,本发明提出了一种用于多文件的存储方法,用于在云存储平台中对文件进行处理,所述云存储平台包括三层结构,即用户接口层,业务逻辑层和存储层,其特征在于,所述业务逻辑层首先将低于预设大小的文件进行合并,然后建立文件索引,将存储层构建在分布式文件系统上,为用户提供文件读取和写入接口。
[0004]优选地,所述分布式文件系统采用将Web服务器和服务器集群分离的方式,并且所述用户接口层即提供的用户界面,用于使用户发送请求和接收反馈信息;
[0005]所述文件索引包括资源集合主索引和资源条目次索引,主索引数据存储在关系数据库中,通过关系数据库访问接口提供访问,使用Java中的Map数据结构保存,在资源集合已经写入数据库的基础上,增加在资源条目添加时由系统生成值的字段,主索引中的数据采用Key/Value结构,使用Java中Map数据结构,在服务启动的时候根据数据库中内容初始化该Map对象并一直存在,当有新的资源集合加入或有的被删除的时候,对该Map对象进行更新;次索引是通过开源项目Lucene创建的,支持小文件元数据检索,每当用户添加资源条目的时候实时更新索引文件;多个用户在一个资源集合下同时添加资源条目时,实现文件写入的并发控制;
[0006]所述将文件进行合并进一步包括:创建SequenceFile对象,通过过滤器的过滤,对符合预设条件的文件进行合并,根据资源条目所在的资源集合在主索引中查找,查找到资源集合对应的文件路径后,仓Il建SequenceFile对象,并获得SequenceFile的Writer对象并对其进行配置,准备写入文件,在执行文件写入的同时开启一个新的线程,将该资源条目对应的文件位值、长度信息写入资源条目次索引,资源条目写入成功后关闭输出流,返回提交成功,否则返回提交失败。
[0007]优选地,所述业务逻辑层还包括分布式系统客户端,其封装了操作文件系统与外界交互的API,当文件系统接收到文件读取请求时,首先经过文件过滤器进行判断,若属于被合并的文件则首先在缓存中查找文件的元数据信息,若不存在元数据信息,则在索引文件中进行查找,若在索引文件中查找不到则与名字节点通信,在查找到文件元数据后构建SequenceFile对象,然后获得SequenceFile的Reader对象向数据节点发送读取请求,将数据传输给用户后关闭输入流。
[0008]优选地,所述文件写入进一步包括:当Web服务器接收到用户提交资源请求时,首先判断是否需要进行小文件合并,若不需要文件合并,则直接使用分布式文件系统写入接口进行写入,文件合并后通过分布式文件系统客户端准备将文件写入分布式文件系统,在分布式系统客户端写入文件的同时,调用小文件索引更新模块执行小文件索引及更新,写入和更新通过不同的线程同时执行,当分布式文件系统写入成功后Web服务向客户端返回提交成功信息;
[0009]所述文件读取进一步包括:在用户需要浏览文件内容或下载文件时发送文件读取请求,Web服务器接收到用户的读取请求,首先通过检索系统根据用户提交的条件进行检索,得到用户需要的资源条目结果集返回给用户浏览,同时将结果集中显示在用户界面的条目集合发送给缓存模块,并开启一个单独的线程更新缓存,当用户浏览完返回的结果集页面请求下载或浏览详细时,Web服务调用分布式文件系统客户端准备读取文件内容,分布式文件系统客户端首先在缓存中查找文件位置信息,若没有查找到文件位置信息,则在文件索引中查找,当查找到位置信息后则直接到数据节点读取数据,返回给用户。
[0010]优选地,在所述建立文件索引之后,该方法还包括对索引进行预取,所述预取进一步包括:
[0011]在用户发出检索请求后,Web服务根据用户检索条件查询符合用户需要的资源条目结果集,返回给用户,同时创建异步线程更新缓存,在返回用户结果集到用户浏览结果集并确定点击下载或浏览操作之间的时间间隔内更新缓存内容,当接收到更新缓存内容请求时,调用索引模块进行检索,将当前结果集条目的元数据载入缓存,当用户发送下载或浏览请求时,Web服务调用分布式文件系统客户端在缓存中查找元数据开始读取数据并向客户端传输;服务器维护一个固定线程数量的线程池,在每次接收到更新缓存请求的时候调用一个线程处理,若线程池内没有空闲线程则让该缓存任务等待,利用FIFO算法建立缓存池并配置缓存池大小,将键值对key/value保存在缓存池中,其中文件名作为key,文件的数据节点ID,起始位置和长度的组合作为value,淘汰最久以前的缓存条目,该缓存池提供两个操作即put操作和get操作,put操作往缓存池放入数据,如果缓存池里面已有的数据达到了上限,则根据FIFO缓存替换算法替换数据;Get操作根据key值获取相应的value值。
[0012]本发明相比现有技术,具有以下优点:
[0013]针对用于全文检索的小文件的读写,通过索引和预取提高检索效率,在大量小文件的存储和读取的情况下保持云存储平台的响应速度和分布式文件系统整体性能。
【附图说明】
[0014]图1是根据本发明实施例的用于多文件的存储方法的流程图。
【具体实施方式】
[0015]下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。
[0016]本发明的一方面提供了一种用于小文件读写的用于多文件的存储方法,为大数据存取和利用提供了新的解决方案。图1是根据本发明实施例的用于多文件的存储方法流程图。
[0017]用户在云存储平台中提交资源后,资源首先需要经过文件过滤器的筛选,过滤条件包括文件大小、类型等,通过筛选的文件统称为小文件。随后对这些小文件提出一种合并策略,一定数量的小文件合并后生成新的存储文件,一般对属于同一属性的小文件进行合并。在将新的存储文件写入系统的同时更新索引文件。云存储平台中的索引包括,主索引是文件所属的资源集合,如类型等;次索引是具体的资源条目。在需要读取文件时,依次在主索引和次索引中查询,缩小了查询范围,能够保证较高的读取响应。
[0018]本发明的云存储平台系统的存储层设计的核心包括:首先对小文件进行合并生成存储文件,再基于数据库的存储特征对合并后的文件建立次索引,通过索引预取提高文件读取的响应速度。以下详细介绍存储层具体的细节。
[0019]I基于小文件合并的存储文件生成策略
[0020]将文件划分成一个个block即块,块的默认大小是64M。分布式文件系统的命名空间被持久化在一个镜像文件中,启动时由名字节点将其加载到内存中。大量小文件会造成名字节点内存不足,生成过大的镜像文件降低读取文件时文件的查找效率。对每一
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1