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

文档序号:8457369阅读:来源:国知局
]用户有两种请求方式,一种是提交文件的写入请求,一种是查询、浏览或获取资源的读取请求。
[0046]当Web服务器接收到用户提交资源请求时,首先判断是否需要做小文件合并,若需要,则进行文件合并,不需要则直接使用分布式文件系统写入接口进行写入即可。文件合并后通过分布式文件系统客户端准备将文件写入分布式文件系统,在分布式系统客户端写入文件的同时,调用小文件索引更新模块执行小文件索引及更新,因为Web服务器主机和服务器集群是分离的,写入和更新可以通过不同的线程同时执行,彼此没有影响。当分布式文件系统写入成功后Web服务向客户端返回提交成功信息。
[0047]在用户需要浏览文件详细内容或下载文件时发送文件读取请求,该请求频次高,耗费系统资源最多。当Web服务器接收到用户的读取请求时,首先通过检索系统根据用户提交的条件进行检索,得到用户需要的资源条目结果集返回给用户浏览,同时将结果集中显示在用户界面中第一页的条目集合(默认20条)发送给缓存模块,并开启一个单独的线程更新缓存,当用户浏览完返回的结果集页面请求下载或浏览详细时,Web服务调用分布式文件系统客户端准备读取文件内容,分布式文件系统客户端首先在缓存中查找文件位置信息,若没有查找到则再到小文件索引中查找,查找到位置信息后则直接到数据节点读取数据,返回给用户。
[0048]综上所述,本发明提出了一种用于多文件的存储方法,针对用于全文检索的小文件的读写,通过索引和预取提高检索效率,在大量小文件的存储和读取的情况下保持云存储平台的响应速度和分布式文件系统整体性能。
[0049]显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储在存储系统中由计算系统来执行。这样,本发明不限制于任何特定的硬件和软件结合。
[0050]应当理解的是,本发明的上述【具体实施方式】仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。
【主权项】
1.一种用于多文件的存储方法,用于在云存储平台中对文件进行处理,所述云存储平台包括三层结构,即用户接口层,业务逻辑层和存储层,其特征在于:所述业务逻辑层首先将低于预设大小的文件进行合并; 建立文件索引,将所述存储层构建在分布式文件系统上,为用户提供文件读取和写入接口。
2.根据权利要求1所述的方法,其特征在于,所述分布式文件系统采用将Web服务器和服务器集群分离的方式,并且所述用户接口层即提供的用户界面,用于使用户发送请求和接收反馈信息; 所述文件索引包括资源集合主索引和资源条目次索引,主索引数据存储在关系数据库中,通过关系数据库访问接口提供访问,使用Java中的Map数据结构保存,在资源集合已经写入数据库的基础上,增加在资源条目添加时由系统生成值的字段,主索引中的数据采用Key/Value结构,使用Java中Map数据结构,在服务启动的时候根据数据库中内容初始化该Map对象并一直存在,当有新的资源集合加入或有的被删除的时候,对该Map对象进行更新;次索引是通过开源项目Lucene创建的,支持小文件元数据检索,每当用户添加资源条目的时候实时更新索引文件;多个用户在一个资源集合下同时添加资源条目时,实现文件写入的并发控制; 所述将文件进行合并进一步包括:创建SequenceFile对象,通过过滤器的过滤,对符合预设条件的文件进行合并,根据资源条目所在的资源集合在主索引中查找,查找到资源集合对应的文件路径后,仓Il建SequenceFile对象,并获得SequenceFile的Writer对象并对其进行配置,准备写入文件,在执行文件写入的同时开启一个新的线程,将该资源条目对应的文件位值、长度信息写入资源条目次索引,资源条目写入成功后关闭输出流,返回提交成功,否则返回提交失败。
3.根据权利要求1所述的方法,其特征在于,所述业务逻辑层还包括分布式系统客户端,其封装了操作文件系统与外界交互的API,当文件系统接收到文件读取请求时,首先经过文件过滤器进行判断,若属于被合并的文件则首先在缓存中查找文件的元数据信息,若不存在元数据信息,则在索引文件中进行查找,若在索引文件中查找不到则与名字节点通信,在查找到文件元数据后构建SequenceFile对象,然后获得SequenceFile的Reader对象向数据节点发送读取请求,将数据传输给用户后关闭输入流。
4.根据权利要求1所述的方法,其特征在于,所述文件写入进一步包括:当Web服务器接收到用户提交资源请求时,首先判断是否需要进行小文件合并,若不需要文件合并,则直接使用分布式文件系统写入接口进行写入,文件合并后通过分布式文件系统客户端准备将文件写入分布式文件系统,在分布式系统客户端写入文件的同时,调用小文件索引更新模块执行小文件索引及更新,写入和更新通过不同的线程同时执行,当分布式文件系统写入成功后Web服务向客户端返回提交成功信息; 所述文件读取进一步包括:在用户需要浏览文件内容或下载文件时发送文件读取请求,Web服务器接收到用户的读取请求,首先通过检索系统根据用户提交的条件进行检索,得到用户需要的资源条目结果集返回给用户浏览,同时将结果集中显示在用户界面的条目集合发送给缓存模块,并开启一个单独的线程更新缓存,当用户浏览完返回的结果集页面请求下载或浏览详细时,Web服务调用分布式文件系统客户端准备读取文件内容,分布式文件系统客户端首先在缓存中查找文件位置信息,若没有查找到文件位置信息,则在文件索引中查找,当查找到位置信息后则直接到数据节点读取数据,返回给用户。
5.根据权利要求1所述的方法,其特征在于,在所述建立文件索引之后,该方法还包括对索引进行预取,所述预取进一步包括: 在用户发出检索请求后,Web服务根据用户检索条件查询符合用户需要的资源条目结果集,返回给用户,同时创建异步线程更新缓存,在返回用户结果集到用户浏览结果集并确定点击下载或浏览操作之间的时间间隔内更新缓存内容,当接收到更新缓存内容请求时,调用索引模块进行检索,将当前结果集条目的元数据载入缓存,当用户发送下载或浏览请求时,Web服务调用分布式文件系统客户端在缓存中查找元数据开始读取数据并向客户端传输;服务器维护一个固定线程数量的线程池,在每次接收到更新缓存请求的时候调用一个线程处理,若线程池内没有空闲线程则让该缓存任务等待,利用FIFO算法建立缓存池并配置缓存池大小,将键值对key/value保存在缓存池中,其中文件名作为key,文件的数据节点ID,起始位置和长度的组合作为value,淘汰最久以前的缓存条目,该缓存池提供两个操作即put操作和get操作,put操作往缓存池放入数据,如果缓存池里面已有的数据达到了上限,则根据FIFO缓存替换算法替换数据;Get操作根据key值获取相应的value值。
【专利摘要】本发明提供了一种用于多文件的存储方法,用于在云存储平台中对文件进行处理,所述云存储平台包括用户接口层,业务逻辑层和存储层,所述业务逻辑层将低于预设大小的文件进行合并,然后建立文件索引,将存储层构建在分布式文件系统上,为用户提供文件读取和写入接口。本发明在大量小文件的读写的情况下保持了云存储平台的响应速度和分布式文件系统整体性能。
【IPC分类】G06F17-30
【公开号】CN104778270
【申请号】CN201510200979
【发明人】刘颖
【申请人】成都汇智远景科技有限公司
【公开日】2015年7月15日
【申请日】2015年4月24日
当前第3页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1