读取小文件的方法、装置和设备及计算机可读存储介质与流程

文档序号:13422092阅读:312来源:国知局
读取小文件的方法、装置和设备及计算机可读存储介质与流程

本发明涉及分布式存储系统领域,特别是涉及一种读取小文件的方法,还涉及一种读取小文件的装置及设备,也涉及一种存储有计算机程序的计算机可读存储介质。



背景技术:

分布式存储系统,是将数据分散存储在多台独立的设备上,以降低网络压力,具有较高的可靠性和安全性。在存储系统中,小文件场景则是需要考虑的核心场景之一,例如,在一些社交购物网站、广电、网络视频中,都会产生文本、图片、音乐等大量的小文件场景。因此小文件的性能问题是文件系统需要考虑的关键问题之一。

在小文件场景下,文件数量众多,磁盘占用率较高;在操作时需要一次写入,多次读写,因此文件操作较为频繁。在现有技术中,每个小文件进行读取时,都需要调用一次数据读取接口,执行一次全读流程,磁盘读数据压力较大。当需要大量读取小文件时,则需要频繁调用所述数据读取接口,小文件读取io路径较长,且分析元数据、读数据耗时较长,在此种情况下,小文件的读取效率大大降低。

因此,如何缩短小文件的读取io路径,提高小文件的读取效率,是本领域技术人员需要解决的技术问题。



技术实现要素:

本发明的目的是提供一种读取小文件的方法,该方法能够缩短小文件的读取io路径,提高小文件的读取效率;本发明的另一目的是提供一种读取小文件的装置和设备,均具有上述有益效果;本发明的另一目的是提供一种存储有计算机程序的计算机可读存储介质,也具有上述有益效果。

为解决上述技术问题,本发明提供一种读取小文件的方法,包括:

根据目标小文件的索引节点,判断缓存中是否存在所述目标小文件;

若存在,则直接读取所述目标小文件;

若不存在,则获取包含所述目标小文件的聚合文件,将所述聚合文件中的目标小文件读取至所述缓存,在所述缓存中读取所述目标小文件。

优选的,所述获取包含所述目标小文件的聚合文件,将所述聚合文件中的目标小文件读取至所述缓存,在所述缓存中读取所述目标小文件包括:

根据所述目标小文件的索引节点,获取所述目标小文件在所述聚合文件中的偏移量,根据所述偏移量计算得出聚合对象;

调用数据读取接口,将所述聚合对象读取至所述缓存;

根据所述偏移量计算得出所述目标小文件在所述聚合对象中的起始位置和数据长度,根据所述起始位置和数据长度读取所述目标小文件。

优选的,该方法还包括:

读取所述目标小文件之前,为所述目标小文件设置读写互斥的读锁;

读取所述目标小文件之后,解除所述读锁。

优选的,该方法还包括:

将读取的所述目标小文件发送给用户。

为解决上述技术问题,本发明还提供一种读取小文件的装置,包括:

判断模块,用于根据目标小文件的索引节点,判断缓存中是否存在所述目标小文件;

第一读取模块,用于当所述目标小文件存在时,直接读取所述目标小文件;

第二读取模块,用于当所述目标小文件不存在时,获取包含所述目标小文件的聚合文件,将所述聚合文件中的目标小文件读取至所述缓存,在所述缓存中读取所述目标小文件。

优选的,所述第二读取模块包括:

获取子模块,用于从所述聚合文件中获取包含所述目标小文件的聚合对象;

第一读取子模块,用于将所述聚合对象读取至所述缓存;

第二读取子模块,用于从所述聚合对象中读取所述目标小文件。

优选的,该装置还包括:

上锁模块,用于在读取所述目标小文件之前,为所述目标小文件设置读写互斥的读锁;

解锁模块,用于在读取所述目标小文件之后,解除所述读锁。

优选的,该装置还包括:

发送模块,用于将读取的所述目标小文件发送给用户。

为解决上述技术问题,本发明还提供一种读取小文件的装置,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现上述任一种读取小文件的方法的步骤。

为解决上述技术问题,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种读取小文件的方法的步骤。

本发明所提供的一种读取小文件的方法,包括根据目标小文件的索引节点,判断缓存中是否存在所述目标小文件;若存在,则直接读取所述目标小文件;若不存在,则获取包含所述目标小文件的聚合文件,将所述聚合文件中的目标小文件读取至所述缓存,在所述缓存中读取所述目标小文件。

可见,该方法采用聚合功能,有效降低了小文件磁盘占用,提高了磁盘利用率。将小文件读取至所述缓存中,将对小文件的读取转变为读取聚合文件对应区域的数据,当需要大量读取小文件时,可获得较高的缓存命中率,尤其在顺序读场景中,待读取小文件能直接命中客户端缓存,此时,无需多次调用数据读取接口,缩短了小文件的读取io路径,提高了小文件的读取效率。

本发明还提供了一种读取小文件的装置和设备,均具有上述有益效果。

本发明还提供了一种存储有计算机程序的计算机可读存储介质,也具有上述有益效果。

附图说明

为了更清楚的说明本发明实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的一种读取小文件的方法的流程示意图;

图2为本发明提供的一种读取小文件的装置的示意图;

图3为本发明提供的一种读取小文件的设备的示意图。

具体实施方式

本发明的核心是提供一种读取小文件的方法,该方法能够缩短小文件的读取io路径,提高小文件的读取效率;本发明的另一核心是提供一种读取小文件的装置及设备,均具有上述有益效果;本发明的另一核心是提供一种存储有计算机读取程序的计算机可读存储介质,也具有上述有益效果。

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参考图1,图1为本发明提供的一种读取小文件的方法的流程示意图,该方法可以包括:

s101:根据目标小文件的索引节点,判断缓存中是否存在所述目标小文件;若存在,则响应s102;若不存在,则响应s103。

具体的,当系统创建了一个小文件时,系统就会给所述小文件分配一个索引节点,每个索引节点都保存了对应小文件的元信息数据,如创建、修改时间等等。目标小文件即为用户要读取的小文件,当读取目标小文件时,可以先获取目标小文件的索引节点,根据索引节点判断缓存中是否存在对应的目标小文件。

s102:当所述目标小文件存在时,直接读取所述目标小文件;

s103:当所述目标小文件不存在时,获取包含所述目标小文件的聚合文件,将所述聚合文件中的目标小文件读取至所述缓存,在所述缓存中读取所述目标小文件。

具体的,采用聚合功能,将多个小文件聚合到一个大文件中,即聚合文件。当缓存中存在目标小文件时,可以直接从缓存中读取所述目标小文件,无需调用小文件读取接口;当缓存中不存在目标小文件时,可以根据目标小文件中记录的聚合文件信息找到目标小文件对应的聚合文件,将对小文件的读取转变为读取聚合文件对应区域的数据。所述聚合文件对应区域的数据可以存储于磁盘或者对象存储设备中,在读取小文件时,调用数据读取接口,将聚合文件对应区域的数据读取至缓存中,在缓存中完成对目标小文件的读取。

具体的,读取小文件时,可以先根据小文件的索引节点,判断聚合文件对应区域的数据是否已经存入磁盘或对象存储设备,若没有存入,则可以直接从缓存中读取数据;若已存入,则可以根据所述索引节点中记录的聚合文件的索引节点是否为空,以判断小文件是否为源文件,若不是源文件,则可以按照普通文件读流程处理;若是源文件,则获取聚合文件对应区域的数据,判断所述数据在本地缓存中是否有效,有效时可直接从缓存中读取数据,若无效,则可以调用数据读取接口,将聚合文件对应区域的数据从磁盘或对象存储设备读取至缓存中,在缓存中完成对目标小文件的读取。

另外,为了保证小文件的安全性,可以在读取目标小文件之前,对所述目标小文件设置读写互斥的读锁,允许用户读取目标小文件;当目标小文件读取完成后,还可以解除所述读锁。进一步,在解除读锁之后,还可以将读取到的目标小文件发送给用户,具体的,将缓存中聚合文件对应区域的数据拷贝到小文件数据读取接口,向用户返回读取到的小文件数据。

本发明所提供的一种读取小文件的方法,包括根据目标小文件的索引节点,判断缓存中是否存在所述目标小文件;若存在,则直接读取所述目标小文件;若不存在,则获取包含所述目标小文件的聚合文件,将所述聚合文件中的目标小文件读取至所述缓存,在所述缓存中读取所述目标小文件。可见采用聚合功能,有效降低了小文件磁盘占用,提高了磁盘利用率,将小文件读取至所述缓存中,当需要大量读取小文件时,可获得较高的缓存命中率,无需多次调用数据读取接口,缩短了小文件的读取io路径,提高了小文件的读取效率。

在上述实施例的基础上:

作为一种优选的实施例,获取包含所述目标小文件的聚合文件,将所述聚合文件中的目标小文件读取至所述缓存,在所述缓存中读取所述目标小文件的过程具体为:

根据所述目标小文件的索引节点,获取所述目标小文件在所述聚合文件中的偏移量,根据所述偏移量计算得出聚合对象;调用数据读取接口,将所述聚合对象读取至所述缓存;根据所述偏移量计算得出所述目标小文件在所述聚合对象中的起始位置和数据长度,根据所述起始位置和数据长度读取所述目标小文件。

具体的,采用聚合功能,将多个小文件以聚合对象为单位进行聚合,聚合对象作为聚合文件的数据存入到磁盘或对象存储设备中,对小文件的读取,实际上转换为对聚合文件数据的读取,读取小文件时,不必再根据小文件元数据信息找到小文件对应的存储位置。

具体的,可以通过获取的目标小文件在聚合文件中的偏移量,计算得出聚合对象。可以先判断缓存中的聚合对象是否有效,若有效,则可以直接从缓存中读取目标小文件,若无效,则可以调用数据读取接口,从磁盘或对象存储设备中将整个聚合对象读取到客户端缓存,从聚合对象中读取目标小文件。

其中,采用聚合功能,将多个小文件以聚合对象为单位进行聚合,可以先对小文件的占用空间预先设定一个上限,例如512kb,当写入的小文件小于512kb时,小文件可以以4kb对齐的方式写入到聚合对象缓存中;还可以对聚合对象的占用空间预先设定一个上限,例如4mb,当聚合对象的占用空间达到4mb时,将聚合对象缓存写入磁盘或对象存储设备中。

另外,为了保证小文件的安全性,可以在读取目标小文件之前,对所述目标小文件设置读写互斥的读锁,允许用户读取目标小文件;当目标小文件读取完成后,还可以解除所述读锁。

进一步,在解除读锁之后,还可以将读取到的目标小文件发送给用户。具体的,可以将客户端聚合对象在缓存中相应位置的数据拷贝到小文件数据读取接口,向用户返回读取到的小文件数据。

本申请采用聚合功能,将多个小文件以聚合对象为单位进行聚合,把聚合对象作为聚合文件的数据存入到对象存储设备中。在读取小文件时,不在以单个文件为单位,而是每次读取一个聚合对象到缓存中。当需要大量读取小文件时,可以获得较高的缓存命中率,无需多次调用数据读取接口。尤其在顺序读场景中,读取相邻文件时,由于待读取小文件属于同一聚合对象,能直接命中客户端缓存,无需再次调用数据读取接口读取数据,缩短了小文件读取io路径,提高了小文件的读取效率。

请参考图2,图2为本发明提供的一种读取小文件的装置的示意图,该装置包括:

判断模块1,用于根据目标小文件的索引节点,判断缓存中是否存在所述目标小文件;

第一读取模块2,用于当所述目标小文件存在时,直接读取所述目标小文件;

第二读取模块3,用于当所述目标小文件不存在时,获取包含所述目标小文件的聚合文件,将所述聚合文件中的目标小文件读取至所述缓存,在所述缓存中读取所述目标小文件。

作为一种优选实施例,所述第二读取模块3可以包括:

获取子模块31,用于从所述聚合文件中获取包含所述目标小文件的聚合对象;

第一读取子模块32,用于将所述聚合对象读取至所述缓存;

第二读取子模块33,用于从所述聚合对象中读取所述目标小文件。

作为一种优选实施例,该装置还包括:

上锁模块,用于在读取所述目标小文件之前,为所述目标小文件设置读写互斥的读锁;

解锁模块,用于在读取所述目标小文件之后,解除所述读锁。

发送模块,用于将读取的所述目标小文件发送给用户。

对于本发明提供的装置的介绍请参照上述方法实施例,本发明在此不做赘述。

请参考图3,图3为本发明提供的一种读取小文件的设备的示意图,该设备包括:

存储器10,用于存储计算机程序;

处理器20,用于执行所述计算机程序时实现如下步骤:

根据目标小文件的索引节点,判断缓存中是否存在所述目标小文件;若存在,则直接读取所述目标小文件;若不存在,则获取包含所述目标小文件的聚合文件,将所述聚合文件中的目标小文件读取至所述缓存,在所述缓存中读取所述目标小文件。

对于本发明提供的设备的介绍请参照上述方法实施例,本发明在此不做赘述。

为解决上述技术问题,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如下步骤:

根据目标小文件的索引节点,判断缓存中是否存在所述目标小文件;若存在,则直接读取所述目标小文件;若不存在,则获取包含所述目标小文件的聚合文件,将所述聚合文件中的目标小文件读取至所述缓存,在所述缓存中读取所述目标小文件。

对于本发明提供的设备的介绍请参照上述方法实施例,本发明在此不做赘述。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本发明所提供的读取小文件的方法进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1