You are on page 1of 29

(19)中华人民共和国国家知识产权局

(12)发明专利申请
(10)申请公布号 CN 113835613 A
(43)申请公布日 2021.12.24
(21)申请号 202010592657 .7

(22)申请日 2020 .06 .24

(71)申请人 浙江宇视科技有限公司
地址 310051 浙江省杭州市滨江区西兴街
道江陵路88号10幢南座1-11层、2幢A
区1-3楼、 2幢B区2楼

(72)发明人 张波波

(74)专利代理机构 北京品源专利代理有限公司
11332
代理人 孟金喆

(51)Int .Cl .
G06F 3/06 (2006 .01)

权利要求书2页 说明书16页 附图10页

(54)发明名称
一种文件读取方法、装置、电子设备和存储
介质
(57)摘要
本发明实施例公开了一种文件读取方法、 装
置、 电子设备和存储介质, 其中方法包括:
获取目
标文件的读取请求; 通过预先创建的多线程请求
队列, 并行下发读取请求到各存储节点;在接收
到目标存储节点返回的成功读取目标文件的消
息时, 将目标文件反馈给目标文件请求方, 并将
其它存储节点返回的读取结果消息设置为无效。
本发明实施例中, 通过预先建立的多线程请求队
列,将获取的读取请求并行下发到各存储节点
后,若某一目标存储节点返回所请求的目标文
件, 则立即将目标文件立即返回请求方, 其余存
储节点返回的读取结果自动失效处理, 由此避免
CN 113835613 A

了因等待所有存储节点完成读取操作后返回最
终结果, 所导致的读取文件耗时大的问题, 提升
了文件的读取效率。
CN 113835613 A 权 利 要 求 书 1/2 页

1 .一种文件读取方法,其特征在于, 应用于云存储系统中的数据产生设备, 所述方法包


括:
获取目标文件的读取请求;
通过预先创建的多线程请求队列, 并行下发所述读取请求到各存储节点;
在接收到目标存储节点返回的成功读取所述目标文件的消息时, 将所述目标文件反馈
给目标文件请求方, 并将其它存储节点返回的读取结果消息设置为无效。
2 .根据权利要求1所述的方法,其特征在于, 在将所述目标文件反馈给目标文件请求方
之前, 所述方法还包括:
判断预先建立的结果收集器中是否已有成功读取到目标文件的标志; 其中,所述结果
收集器用于存储从存储节点读取到的目标文件;
若否, 则将所述目标文件复制到所述结果收集器中; 若是,则将成功读取所述目标文件
的消息设置为无效。
3 .根据权利要求2所述的方法,其特征在于, 所述方法还包括:
在接收到目标存储节点返回的未成功读取所述目标文件的消息时, 判断所述目标存储
节点是否为最后一个返回目标文件读取结果消息的存储节点;
若是, 则清空所述结果收集器。
4 .根据权利要求1所述的方法,其特征在于, 获取目标文件的读取请求, 包括:
根据待读取的目标文件的名称信息、 云存储系统中当前在线的存储节点数量以及各存
储节点的编码, 构建与当前在线存储节点数量相同的消息体, 其中,每个消息体唯一对应一
个在线的存储节点;
相应的 , 通过预先创建的多线程请求队列, 并行下发所述读取请求到各存储节点, 包
括:
通过预先创建的多线程请求队列, 将各消息体并行下发到各自对应的存储节点。
5 .一种文件读取方法,其特征在于, 应用于云存储系统中的存储节点, 所述方法包括:
响应于对已经存储的目标文件的读取请求, 在预先加载的目录树中确定所述目标文件
对应的目标目录;
根据所述目标目录下预先创建的过滤器, 判断预先创建的过滤器中是否存在所述目标
文件信息, 其中,所述过滤器中用于存储所述目标目录下的部分文件块中的文件信息;
若存在, 则根据所述目标文件信息, 获取对应的目标文件;
若不存在, 则从存储节点的磁盘中依次读取所述目标目录下的其它文件块, 并将读取
过的文件块的文件信息添加到过滤器中, 直到查找到所述目标文件对应的目标文件信息为
止,其中, 所述其它文件块为所述目标目录下除了已存储在过滤器中的文件块以外的文件
块。
6 .根据权利要求5所述的方法,其特征在于, 所述过滤器中设置有截止文件块ID, 其中,
所述截止文件块ID为所述目标目录下的任一文件块的ID, 用于表征在存储节点的磁盘中读
取文件块时, 以截止文件块ID对应的文件块开始依次读取所述目标目录下的文件块;
相应的, 从存储节点的磁盘中依次读取所述目标目录下的其它文件块, 包括:
以截止文件块ID对应的文件块开始, 依次读取在所述目标目录下的其它文件块;
确定所述目标文件信息所在的目标文件块, 并将所述目标文件块中记录的下一个文件

2
CN 113835613 A 权 利 要 求 书 2/2 页

块ID作为所述过滤器的截止文件块ID。
7 .一种文件读取装置,其特征在于,配置于云存储系统中的数据产生设备, 所述装置包
括:
请求获取模块, 用于获取目标文件的读取请求;
请求下发模块,用于通过预先创建的多线程请求队列, 并行下发所述读取请求到各存
储节点;
消息处理模块,用于在接收到目标存储节点返回的成功读取所述目标文件的消息时,
将所述目标文件反馈给目标文件请求方, 并将其它存储节点返回的读取结果消息设置为无
效。
8 .一种文件读取装置,其特征在于,配置于云存储系统中的存储节点, 所述装置包括:
响应模块,用于响应于对已经存储的目标文件的读取请求, 在预先加载的目录树中确
定所述目标文件对应的目标目录;
判断模块,用于根据所述目标目录下预先创建的过滤器, 判断预先创建的过滤器中是
否存在所述目标文件信息, 其中,所述过滤器中用于存储所述目标目录下的部分文件块中
的文件信息;
目标文件获取模块, 用于在判断结果为是时, 则根据所述目标文件信息,获取对应的目
标文件;
文件信息查找模块,用于在判断结果为否时, 则从存储节点的磁盘中依次读取所述目
标目录下的其它文件块, 并将读取过的文件块的文件信息添加到过滤器中, 直到查找到所
述目标文件对应的目标文件信息为止, 其中,所述其它文件块为所述目标目录下除了已存
储在过滤器中的文件块以外的文件块。
9 .一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置, 用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行, 使得所述一个或多个处理器实
现如权利要求1-4或者权利要求5-6中任一所述的文件读取方法。
10 .一种计算机可读存储介质,其上存储有计算机程序, 其特征在于,该程序被处理器
执行时实现如权利要求1-4或者权利要求5-6中任一所述的文件读取方法。

3
CN 113835613 A 说 明 书 1/16 页

一种文件读取方法、装置、
电子设备和存储介质

技术领域
[0001] 本发明实施例涉及云存储技术领域,
尤其涉及一种文件读取方法、
装置、
电子设备
和存储介质。

背景技术
[0002] 随着大数据、人工智能、云存储等技术的进步和不断革新, 视频监控、数字警务、智
能助理、智慧城市等信息化业务在生活中的出现也越来越频繁, 这给我们的社会活动和生
产带来了极大的方便。大规模的信息化应用产生了海量的数据, 这些数据可以是键值对数
据、 图片、 短视频、文档、表格等,
这就对云存储系统的高效性提出了更高的要求。一般海量
数据的存储采用云存储系统进行, 其包含元数据管理服务器CDM和若干个虚拟存储节点,在
单个存储节点中数据以文件的方式进行组织和存储。而在业务量不断增长的情况下性能问
题成为了一个极其关键的问题, 同等的存储硬件, 性能的提升有助于直接提高产品竞争力
和性价比。
[0003] 通常,业务使用云存储客户端实现基本的文件操作功能, 文件读取时携带文件名
称获取到所有在线的存储节点, 再向每个存储节点发送读取文件请求, 等到所有节点上读
取操作完成后, 业务层才能获取到最终结果, 也即存在已经读取成功但还是要等所有结果
返回的情况, 使得文件的读取效率较低。

发明内容
[0004] 本发明实施例提供一种文件读取方法、 装置、
电子设备和存储介质,以达到提升文
件读取效率的效果。
[0005] 第一方面,本发明实施例提供了一种文件读取方法, 应用于云存储系统中的数据
产生设备, 所述方法包括:
[0006] 获取目标文件的读取请求;
[0007] 通过预先创建的多线程请求队列,并行下发所述读取请求到各存储节点;
[0008] 在接收到目标存储节点返回的成功读取所述目标文件的消息时, 将所述目标文件
反馈给目标文件请求方, 并将其它存储节点返回的读取结果消息设置为无效。
[0009] 第二方面,本发明实施例提供了一种文件读取方法, 应用于云存储系统中的存储
节点, 所述方法包括:
[0010] 响应于对已经存储的目标文件的读取请求, 在预先加载的目录树中确定所述目标
文件对应的目标目录;
[0011] 根据所述目标目录下预先创建的过滤器, 判断预先创建的过滤器中是否存在所述
目标文件信息, 其中,所述过滤器中用于存储所述目标目录下的部分文件块中的文件信息;
[0012] 若存在,则根据所述目标文件信息,获取对应的目标文件;
[0013] 若不存在,则从存储节点的磁盘中依次读取所述目标目录下的其它文件块, 并将
读取过的文件块的文件信息添加到过滤器中, 直到查找到所述目标文件对应的目标文件信

4
CN 113835613 A 说 明 书 2/16 页

息为止, 其中,所述其它文件块为所述目标目录下除了已存储在过滤器中的文件块以外的
文件块。
[0014] 第三方面,本发明实施例提供了一种文件读取装置, 配置于云存储系统中的数据
产生设备, 所述装置包括:
[0015] 请求获取模块,用于获取目标文件的读取请求;
[0016] 请求下发模块,用于通过预先创建的多线程请求队列, 并行下发所述读取请求到
各存储节点;
[0017] 消息处理模块,用于在接收到目标存储节点返回的成功读取所述目标文件的消息
时, 将所述目标文件反馈给目标文件请求方, 并将其它存储节点返回的读取结果消息设置
为无效。
[0018] 第四方面,本发明实施例提供了一种文件读取装置, 配置于云存储系统中的存储
节点, 所述装置包括:
[0019] 响应模块,用于响应于对已经存储的目标文件的读取请求, 在预先加载的目录树
中确定所述目标文件对应的目标目录;
[0020] 判断模块,用于根据所述目标目录下预先创建的过滤器, 判断预先创建的过滤器
中是否存在所述目标文件信息, 其中,所述过滤器中用于存储所述目标目录下的部分文件
块中的文件信息;
[0021] 目标文件获取模块, 用于在判断结果为是时,则根据所述目标文件信息,获取对应
的目标文件;
[0022] 文件信息查找模块, 用于在判断结果为否时,则从存储节点的磁盘中依次读取所
述目标目录下的其它文件块, 并将读取过的文件块的文件信息添加到过滤器中, 直到查找
到所述目标文件对应的目标文件信息为止, 其中,所述其它文件块为所述目标目录下除了
已存储在过滤器中的文件块以外的文件块。
[0023] 第五方面,本发明实施例还提供了一种电子设备, 包括:
[0024] 一个或多个处理器;
[0025] 存储装置,用于存储一个或多个程序,
[0026] 当所述一个或多个程序被所述一个或多个处理器执行, 使得所述一个或多个处理
器实现如本发明任一实施例所述的文件读取方法。
[0027] 第六方面,本发明实施例还提供了一种计算机可读存储介质, 其上存储有计算机
程序, 该程序被处理器执行时实现如本发明任一实施例所述的文件读取方法。
[0028] 本发明实施例中, 通过预先建立的多线程请求队列, 将获取的读取请求并行下发
到各个存储节点后, 若某一目标存储节点返回所请求的目标文件, 则立即将目标文件立即
返回请求方, 其余存储节点返回的读取结果自动失效处理, 由此避免了因等待所有存储节
点完成读取操作后返回最终结果所导致的读取文件耗时大的问题, 提升了文件的读取效
率。

附图说明
[0029] 图1a为本发明实施例一中的文件读取方法的流程图;
[0030] 图1b为本发明实施例一中的云存储系统组网图以及数据存储流程;

5
CN 113835613 A 说 明 书 3/16 页

[0031] 图2a为本发明实施例二中的文件读取方法的流程图;
[0032] 图2b为本发明实施例二中的读取目标文件的逻辑模块组成图;
[0033] 图2c为本发明实施例二中的文件读取方法的逻辑流程图;
[0034] 图3a是本发明实施例三中的文件读取方法的流程示意图;
[0035] 图3b是本发明实施例三中的单个存储资源上文件系统的组成格式图;
[0036] 图3c是本发明实施例三中的基本的布隆过滤原理图;
[0037] 图4a是本发明实施例四中的文件读取方法的流程示意图;
[0038] 图4b是本发明实施例四中的读取文件块的过程图;
[0039] 图4c是本发明实施例四中的文件读取的逻辑流程图;
[0040] 图5a是本发明实施例五中的文件读取方法的流程示意图;
[0041] 图5b是本发明实施例五中三种情况下创建的过滤器的示意图;
[0042] 图6是本发明实施例六中的文件读取方法的流程示意图;
[0043] 图7是本发明实施例七中的文件读取装置的结构示意图;
[0044] 图8是本发明实施例八中的文件读取装置的结构示意图;
[0045] 图9是本发明实施例四中的电子设备的结构示意图。

具体实施方式
[0046] 下面结合附图和实施例对本发明作进一步的详细说明。 可以理解的是, 此处所描
述的具体实施例仅仅用于解释本发明, 而非对本发明的限定。另外还需要说明的是, 为了便
于描述, 附图中仅示出了与本发明相关的部分而非全部结构。
[0047] 实施例一
[0048] 图1a为本发明实施例一提供的文件读取方法的流程图, 本实施例可适用于在云存
储系统中快速读取文件的情况, 该方法可以由文件读取装置来执行, 该装置可以采用软件
和/或硬件的方式实现, 并可集成在电子设备上, 例如集成在云存储系统中的数据产生设备
上, 其中数据生产设备可以为智能分析服务器、 交通抓拍设备或计算机设备等。
[0049] 参见图1b, 其示出了云存储系统一般组网图以及数据存储流程, 云存储系统由元
数据管理服务器CDM以及多台存储节点管理服务器CDV组成, 若干个CDV可以构成一个CLU分
组, 例如, CDV1-CDV3属于CLU分组1,
CDV4-CDV5属于CLU分组2。元数据管理服务器CDM主要是
管理集群中的存储节点管理服务器CDV, 主要提供系统的元数据存储, 包括用户信息, 分组
信息, 空间管理等。当业务层数据(即数据生产者产生的数据)写入存储节点时, 使用云存储
客户端提供的写接口, CLU分组根据负载均衡策略选择负载最小的CDV节点进行文件存储,
即宏观上每个文件随机写到每个CDV上, 需要说明的是, 数据以文件的方式在存储节点CDV
上进行组织和存储。当需要读取数据时, 应用层传入文件路径以及文件名, 遍历CLU分组下
所有存储节点查找数据。这个是云存储系统的基本组成以及存取流程, 对于整个系统的效
率而言, 多个存储节点的读取策略是非常关键的。
[0050] 本实施例提供了一种提升在多个存储节点上读取文件效率的方法, 该方法可以由
云存储客户端执行, 其中, 云存储客户端安装在存储系统中的数据产生设备上, 如图1a所
示, 该文件读取方法具体包括如下流程:
[0051] S101、 获取目标文件的读取请求。

6
CN 113835613 A 说 明 书 4/16 页

[0052] 当需要读取数据时, 云存储客户端首先获取要读取的目标文件的读取请求, 其中,


读取请求至少包括目标文件的名称信息。
[0053] S102、
通过预先创建的多线程请求队列, 并行下发所述读取请求到各存储节点。
[0054] 在得到目标文件的名称信息后, 由于无法确定文件所在存储节点, 因此需要向每
个存储节点发出请求来读取对应的目标文件数据。 目前,现有技术中的处理流程为循环遍
历CLU分组下所有存储节点来读取文件, 也即是基于全串行模型进行读取, 每次将读取请求
下发的一个存储节点, 在读取完成后, 将读取请求下发送另一个存储节点进行数据读取操
作, 以此类推直到所有存储节点的读取操作都完成, 然后返回最终的读取结果, 如果每一个
存储节点上耗时都为t1, 若共有N个存储节点, 则读取到目标文件的总耗时会在N*t1, 使得
读取文件耗时严重, 进而导致文件的读取效率较低。
[0055] 本申请实施例中, 为了提升读取目标文件的效率, 基于预先创建的多线程请求队
列, 并行下发所述读取请求到各存储节点, 使得各个存储节点并行进行读取目标文件的操
作。其中预先创建的多线程请求队列的过程包括: 确定云存储系统中存储节点的数量, 例如
云存储系统的各CLU分组下共M个存储节点, 则云存储客户端预先单独创建M个独立的文件
读取线程与各自的请求队列, 也即是预先创建的多线程的线程数量等于云存储系统中存储
节点的数量。在获取到目标文件的读取请求后, 如果M个存储节点均在线, 则通过各独立的
读取线程将所述读取请求并行下发到M个存储节点上。
[0056] S103、在接收到目标存储节点返回的成功读取所述目标文件的消息时, 将所述目
标文件反馈给目标文件请求方, 并将其它存储节点返回的读取结果消息设置为无效。
[0057] 由于等所有存储节点的读取操作都完成后, 返回最终的读取结果, 会导致耗时严
重, 影响文件的读取效率。因此, 发明人创造性的提出一旦某个目标存储节点上读取成功,
则立即响应给业务层, 也即是只要接收到目标存储节点返回的成功读取所述目标文件的消
息时, 将所述目标文件反馈给目标文件请求方, 其中, 目标文件请求方可以为业务层请求目
标文件的某个具体业务, 由此提升了文件读取效率。而且, 在将目标文件返回业务层后, 对
于其它存储节点返回的读取结果消息可以直接设置为无效。在此需要说明的是, 在不同的
节点上可能存在重名文件, 例如相同的文件, 由此在返回一个目标文件后, 将其它存储节点
返回的读取结果设置为无效, 可以避免向业务层返回重复文件。
[0058] 本发明实施例中, 通过预先建立的多线程请求队列, 将获取的读取请求并行下发
到各个存储节点后, 若某一目标存储节点返回所请求的目标文件, 则立即将目标文件立即
返回请求方, 其余存储节点返回的读取结果自动失效处理, 由此避免了因等待所有存储节
点完成读取操作后返回最终结果所导致的读取文件耗时大的问题, 提升了文件的读取效
率。
[0059] 实施例二
[0060] 图2a是本发明实施例二提供的文件读取方法的流程图, 本实施例是在上述实施例
的基础上进行优化, 参见图2a,该文件读取方法包括:
[0061] S201、根据待读取的目标文件的名称信息、云存储系统中当前在线的存储节点数
量以及各存储节点的编码, 构建与当前在线存储节点数量相同的消息体。
[0062] 通过上述实施例可知, 预先创建了M个独立的文件读取线程与各自的请求队列, 其
中, M是云存储系统中所有存储节点的个数。 由于要从存储节点读取数据, 必须要保证存储

7
CN 113835613 A 说 明 书 5/16 页

节点在线。 因此, 在下发读取请求时, 需要先确定云存储系统中当前在线的存储节点数量以


及各存储节点的编码, 例如, 当前在线的存储节点有N个, N小于等于M,对应的编码为1-N,进
而基于待读取的目标文件的名称信息、 云存储系统中当前在线的存储节点数量以及各存储
节点的编码, 构建与当前在线存储节点数量相同的消息体(即请求体) , 也即是保证每个消
息体唯一对应一个在线的存储节点, 每个消息体通过指定的读取线程与对应的存储节点进
行交互。需要说明的是, 有N个在线的存储节点, 且N小于M, 则只需用到N个预先建立的读取
线程, 剩余的(M-N)读取线程是不工作的。之所以在消息体中加入存储节点编码, 是为了保
证后续可以准确区分各个存储节点响应消息体返回的读取结果信息, 进而通过对应的读取
线程将读取的目标文件返回。
[0063] 进一步的, 在创建构建与当前在线存储节点数量相同的消息体后, 开辟一段空间
作为结果收集器Z1,用于存储由存储节点返回的读取结果信息, 其中读取结果信息中包括
是否已经成功获取和读取到的文件数据。需要说明的是, 如果结果收集器已存储某一存储
节点返回的目标文件, 则将结果收集器的标志位配置为指定值(例如0或1)。示例性的, 参见
图2b, 其示出了读取目标文件的逻辑模块组成图。
[0064] S202、通过预先创建的多线程请求队列, 将各消息体并行下发到各自对应的存储
节点。
[0065] 示例性的, 参见图2b, 由于有N个存储节点在线, 在需要N个预先构建的读取线程工
作, 并将通过S201构建的消息体1-N, 分别通过读取线程1-N并行分发到存储节点1-N。
[0066] S203、在接收到目标存储节点返回的成功读取所述目标文件的消息时, 判断预先
建立的结果收集器中是否已有成功读取到目标文件的标志, 其中,所述结果收集器用于存
储从存储节点读取到的目标文件。
[0067] 本发明实施例中, 为了提升文件的读取效率, 需要首次读取到目标文件时, 立即把
目标文件写入结果收集器中, 进而通过结果收集器将目标文件立即返回给目标文件请求方
(即业务层某一业务)。因此, 在接收到目标存储节点返回的成功读取所述目标文件的消息
时, 需要判断本次是否为首次读取到目标文件。 需要说明的是, 各存储节点根据消息体处理
完成后, 将读取结果通过socket异步反馈到请求线程, 进而请求线程将读取结果写入结果
收集器中。
[0068] 在一种可选的实施方式中, 只需判断预先建立的结果收集器中是否已有成功读取
到目标文件的标志, 若有,则本次之前已经获取过目标文件, 需要执行S204;
若无,则本次是
第一次读取到目标文件, 则需要执行S205。
[0069] S204、
将成功读取所述目标文件的消息设置为无效。
[0070] 如结果收集器中已存储目标文件, 则将本次成功读取所述目标文件的消息设置为
无效, 由此可将重名的目标文件再返回业务层。
[0071] S205、将所述目标文件复制到所述结果收集器中, 将所述目标文件反馈给目标文
件请求方, 并将其它存储节点返回的读取结果消息设置为无效。
[0072] 在将所述目标文件复制到所述结果收集器后, 将结果收集器的标志位置位, 也即
将标志位设置为指定值, 以表征结果收集器中已经存储某一存储节点返回的目标文件。后
续根据对该标志位的数值的判断, 将其它存储节点返回的读取结果消息时设置为无效。将
所述目标文件反馈给目标文件请求方的过程是: 通过信号量通知主请求者向应用返回目标

8
CN 113835613 A 说 明 书 6/16 页

文件数据, 其中, 主请求者也即为图2b中的业务请求。


[0073] 示例性的, 参见附图2b,若首次读取到的目标文件是由读取线程2从存储节点2中
获取的, 则读取线程2将目标文件存储在结果收集器中, 并将结果收集器的标志位设置为指
定值(例如1)。后续如果读取线程1从存储节点1中也获取到目标文件后, 通过判断标志位的
值为1, 则将读取线程1获取的目标文件进行无效处理, 同理后续读取线程的读取结果都设
置为无效。
[0074] 进一步的, 所述方法还包括:
[0075] 在接收到目标存储节点返回的未成功读取目标文件的消息时, 判断目标存储节点
是否为最后一个返回目标文件读取结果消息的存储节点; 若是,
则清空结果收集器。
[0076] 示例性的, 参见图2c, 其示出了文件读取的逻辑流程图。业务请求读取文件A, 各个
线程向存储节点(即CDV)并行下发读取请求, 某一个存储节点返回读取结果后, 判断是否读
取成功。如成功, 则判断结果收集器是否成功读取文件A, 若结果收集器未成功读取文件A,
则将文件A写入结果收集器, 并通知业务层读取成功, 完成读取,同时置位结果收集器的标
志位; 若结果收集器已成功读取文件A, 则将本次读取结果无效处理, 以第一个有效文件为
准, 并判断返回文件A的存储节点是否为最后一个返回读取结果的存储节点, 若否则返回继
续接收度读取结果并判断, 若是则销毁结果收集器, 以结束文件A的读取操作。若某一个存
储节点返回读取结果后, 判断未读取成功, 则判断该节点是否为最后一个返回读取结果的
存储节点。
[0077] 本申请实施例中, 在首次读取到目标文件后, 立即返回给业务层, 提升了文件读取
的效率, 同时根据结果收集器的标志位的数值, 可准确的将其他节点返回的读取结果设置
为无效, 避免重读读取。
[0078] 实施例三
[0079] 图3a为本发明实施例三提供的文件读取方法的流程图, 本实施例是在上述实施例
的基础上进行优化。
[0080] 本申请实施例中, 对于单个存储节点, 一般是通过iscsi协议挂载的标准磁盘设备
来提供存储能力。磁盘的逻辑空间被分割为多个存储资源, 并格式化成特定的文件系统格
式, 一个存储节点上会有多个存储资源。对于数据存储来说最终都是以文件系统来管理的,
单个资源上文件系统的组成格式参见图3b, 主要分为两个部分:(1)Slice Data区(即数据
区) , 其被划分为很多个slice数据片段来管理, 用来存储原始数据; (2)Index Meta Data区
(即索引区) , 提供文件名称索引功能, 保存文件名称与原始数据信息, 相当于索引元数据。
其中最主要的信息为目录块(DirBlock1-DirBlockN)和文件块(FileBlock1-FileBlockN),
一个目录块中包含有限个目录信息, 其中记录了目录名称, 创建修改时间, 占 用文件块数
量、 文件块起始地址和结束地址等信息, 同时目录头中记载了目录项使用个数, 目录项使用
位图等, 其中目录项使用位图是由数字1和0组成的, 例如数字1的表示该目录已使用, 数字
为0的表示该目录为空; 文件块中包含有限个文件信息, 其中记录了文件名, 创建修改时间,
校验值, 在slice数据区的地址, 文件长度等,同时在文件块的头中还记录有文件项的使用
个数、 目录项使用为图 (用于表征哪个文件块被使用)、前一个文件块ID、下一个文件块ID
等。
[0081] 在确定文件数据在存储节点中的存储方式后, 再介绍在单个存储节点上读取目标

9
CN 113835613 A 说 明 书 7/16 页

文件的简单过程, 具体的,而在每个存储节点上读取数据时, 需要先从对应资源的目录下遍


历所有文件元数据信息, 找到对应文件的元数据。元数据中一般至少会记录原始数据的存
储地址、 大小、 检验等信息, 根据查询到的元数据信息可以读取到原始数据。
[0082] 然而, 在云存储系统中均摊到单个节点上的文件量是非常大的, 查找文件元数据
信息需要读取磁盘次数会不断增多, 造成大量的磁盘I/O(即磁盘的输入和输出或磁盘的读
写) , 而且对于本身不存在目标文件的存储节点, 其查找多为无效查找, 使得读取文件的效
率降低。
[0083] 基于目前存在的缺陷, 本申请创造性的提出了一种由存储节点执行的提高磁盘的
I/O利用率、 提升读取效率的文件读取方法, 参见图3a,该方法包括:
[0084] S301、响应于对已经存储的目标文件的读取请求, 在预先加载的目录树中确定所
述目标文件对应的目标目录。
[0085] 本发明实施例中, 为了提升文件读取效率, 在存储节点启动时, 将磁盘上部分已经
存储的数据加载到该存储节点的内存中。对于已使用的目录项数据, 由于其数量在限定范
围内, 所以会全部加载到内存中, 并且一般以B+树、红黑树等树形结构组织, 加载速度可以
非常快, 通过树形结构进行增删查找, 其效率较高。对于文件数据, 在一个存储资源上由于
存在大量文件项, 全部加载过程需要进行大量的文件块I/O耗时会非常大, 所以本发明实施
例中启动加载存储资源过程只需要加载目录信息, 目录信息下记录了其包含的占 用文件块
数量, 所占 用的文件块数量由写入时统计并作为持久化元数据落盘存储。 由于加载过程只
涉及目录项数据, 所以启动加载的时间效率得到了很大程度的提高。
[0086] 在存储节点接收到云存储客户端发送的已存储的目标文件的读取请求后, 根据读
取请求中包括的目标文件名等信息, 在预先加载的目录树中确定所述目标文件对应的目标
目录。 需要说明的是, 由于目录信息被预先加载到存储节点的内存中, 查找目标文件所在的
目标目录时, 只需在已缓存的目录信息中查找即可, 避免了通过对磁盘的读取操作获取目
标目录, 不但提升了查找目标目录的效率, 还减少了对磁盘的读取操作。
[0087] S302、根据所述目标目录下预先创建的过滤器, 判断预先创建的过滤器中是否存
在所述目标文件信息。
[0088] 其中, 所述过滤器中用于存储目标目录下的部分文件块中的文件信息。需要说明
的是, 预先创建的过滤器可以采用经典的布隆过滤器(Bloom Filter) ,所述布隆过滤器是
一个很长的二进制向量和一系列随机映射函数。基本过滤原理如图3c, 过滤器可以对输入
的文件名字符串进行哈希计算后生成特定的位图, 查询的时候判断位图可以检索一个元素
是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法, 缺点是有一
定的误识别率, 在应用中可以通过合适的设置映射函数的个数和内存空间的大小来控制在
合理范围。事实上, 布隆过滤器被广泛用于网页黑名单系统、 垃圾邮件过滤系统以及解决缓
存穿透问题。在新建过滤时需要确定其容量, 设置误识别率, 参考其性能公式可以得出对于
可以容纳1亿个文件信息的过滤器, 在错误率控制在0 .001的时候,大约需要内存1 .5G。文件
量和内存的使用可以控制在预期范围。
[0089] 本发明实施例中, 在确定目标目录后, 可直接从目标目录对应的预先创建的过滤
器中, 查找目标文件所对应的目标文件信息。 由于过滤器中用于存储所述目标目录下的部
分文件块中的文件信息, 可能存在过滤器中没有预先存储目标文件对应的元数据(即目标

10
CN 113835613 A 说 明 书 8/16 页

文件信息)的情况, 因此从所述预先创建的过滤器中查找目标文件对应的目标文件信息后,
需要对查询结果进行判断的操作, 进而根据查询结果执行S303或S304。
[0090] S303、
若存在, 则根据所述目标文件信息, 获取对应的目标文件。
[0091] 若过滤器中存在目标文件信息, 由于目标文件信息至少包括目标文件的名称、文
件校验信息、文件长度以及文件在数据区的存储位置, 因此可根据目标文件信息直接从数
据区获取对应的目标文件, 并将其返回,以完成整个读取操作。需要说明的是, 因为是直接
在过滤器中查找目标文件信息, 不需要对磁盘进行读取操作, 提升文件元数据信息的读取
效率。
[0092] S304、若不存在, 则从存储节点的磁盘中依次读取所述目标目录下的其它文件块,
并将读取过的文件块的文件信息添加到过滤器中, 直到查找到所述目标文件对应的目标文
件信息为止。
[0093] 由于过滤器中不存在目标文件信息时, 则需要从磁盘中再次读取目标文件信息。
因为已经确定过滤器内存储的文件块中不包括目标文件信息, 所以从存储节点的磁盘中读
取目标文件的元数据(即目标文件信息)时, 跳过这些文件块, 即必然不存在目标文件的元
数据的文件块, 则不需要再去进行磁盘读取。也即是可从存储节点的磁盘中依次读取所述
目标目录下的其它文件块, 其中,其它文件块是指目标目录下除了已存储在过滤器中的文
件块以外的文件块。而且, 在查找过程中将读取过的文件块的文件信息添加到过滤器中, 直
到查找到所述目标文件对应的目标文件信息为止。
[0094] 在一种可选的实施方式中, 过滤器中设置有截止文件块ID(即LastID) ,其中,
截止
文件块ID为目标目录下的任一文件块的ID,用于表征在存储节点的磁盘中读取文件块时,
以截止文件块ID对应的文件块开始依次读取所述目标目录下的文件块。
[0095] 相应的, 从存储节点的磁盘中依次读取所述目标目录下的其它文件块, 包括:
以截
止文件块ID对应的文件块开始, 依次读取在所述目标目录下的其它文件块。 需要说明的是,
从磁盘读取过程中, 将遍历过的文件块添加到过滤器中, 使得过滤器中存储的文件信息更
多, 进而提升下次执行读取文件请求时在过滤器内命中的概率。
[0096] 进一步的, 在查找到目标文件信息后, 需要及时更新截止文件块ID, 以便后续可根
据新的截止文件快ID在磁盘中开始进行查找, 避免对不存在目标文件元数据的文件块进行
查询, 也即减少无效查询。可选的, 更新截止文件快ID时,可按如下操作进行: 确定所述目标
文件信息所在的目标文件块, 并将所述目标文件块中记录的下一个文件块ID作为所述过滤
器的截止文件块ID。
[0097] 本发明实施例中, 通过预先将目录加载到存储节点的内存中, 可提升查询目标文
件所在目标目录的效率, 而且由于目标目录下存在预先构建的过滤器时, 且过滤器用于存
储部分目标目录下文件块中的文件信息, 所以直接在过滤器中进行查找, 不但可以提升目
标文件对应的目标文件信息的效率, 还可有效减少读取元效数据带来的存储节点上的I/O
消耗; 如果在过滤器中查不到的目标文件信息, 需要在磁盘中查询时, 跳过已缓存在过滤器
中部分文件块, 从LastID对应的文件块开始查询, 也即文件块组中必然不存在目标文件时,
则不需要对这些文件块进行磁盘读取, 减少了读取文件块的数量, 提高了I/O有效率, 进而
提升文件读取的效率。
[0098] 实施例四

11
CN 113835613 A 说 明 书 9/16 页

[0099] 图4a是本发明实施例四提供的文件读取方法的流程示意图, 本实施例是在上述实


施例的基础上进行优化, 增加了判断是否目录下是否存在过滤器以及新建过滤器的操作,
参见图4a, 所述方法包括:
[0100] S401、响应于对已经存储的目标文件的读取请求, 在预先加载的目录树中确定所
述目标文件对应的目标目录。
[0101] S402、判断所述目标目录下是否存在预先创建的过滤器。
[0102] 其中, 所述过滤器中用于存储所述目标目录下的部分文件块中的文件信息。因为
有的目录下可能不存在预先创建的过滤器, 因此在确定目标目录后, 需要判断目标目录下
是否存在预先创建的过滤器。如果存在则执行S403-S406的步骤, 如果不存在,则执行S407-
S408的步骤。
[0103] S403、若存在预先创建的过滤器, 则从所述预先创建的过滤器中查找所述目标文
件对应的目标文件信息。
[0104] 本发明实施例中, 由于过滤器中用于存储所述目标目录下的部分文件块中的文件
信息, 可能存在过滤器中没有存储目标文件对应的元数据(即目标文件信息)的情况, 因此
需要对查询结果进行判断的操作, 也即需要执行S404-S406。
[0105] S404、判断预先创建的过滤器中是否存在所述目标文件信息。
[0106] S405、
若存在, 则根据所述目标文件信息, 获取对应的目标文件。
[0107] S406、若不存在, 则从存储节点的磁盘中依次读取所述目标目录下的其它文件块,
并将读取过的文件块的文件信息添加到所述过滤器中, 直到查找到所述目标文件对应的目
标文件信息为止。
[0108] 关于S404-S405的具体实现过程可参见上述实施例, 在此不再赘述。
[0109] S407、若不存在预先创建的过滤器, 根据所述目标目录下的文件块数量, 为所述目
标目录构建一个目标过滤器。
[0110] 若不存在预先创建的过滤器, 则需要为该目标目录构建一个新的过滤器, 以便存
储部分目标目录下的文件信息到该过滤器, 使得后续可以优先从过滤器中查找目标文件的
文件信息(即元数据)。可选的, 根据所述目标目录下的文件块数量, 为所述目标目录构建一
个过滤器, 以保证新建的过滤器可以存储目标目录下所有的文件块中文件信息。而存储部
分目标目录下的文件信息到新建过滤器的过程可参见S408。
[0111] S408、从存储节点的磁盘中依次读取所述目标目录下的文件块, 并将读取过的文
件块的文件信息添加到所述目标过滤器中, 直到查找到所述目标文件对应的目标文件信息
为止。
[0112] 针对新建立的目标过滤器, 还没有文件块被加载到该目标过滤器中, 可将目标目
录下所有正在使用的文件块的ID进行记录, 记录里包括起始文件块ID、 截止文件块ID。
从存
储节点的磁盘中依次读取所述目标目录下的文件块时, 先读取起始文件块ID对应的文件
块, 再沿着文件块链依次向后读取, 并将读取过的文件块的文件信息添加到所述目标过滤
器中, 直到查找到所述目标文件对应的目标文件信息为止。确定所述目标文件信息所在的
目标文件块后, 将预先记录的截止文件快ID更新为目标文件块中记录的下一个文件块ID,
其中, 所述下一个文件块是指在文件块链中排在目标文件块后且与目标文件块相邻的文件
块。

12
CN 113835613 A 说 明 书 10/16 页

[0113] 示例性的, 参见图4b, 其示出了读取文件块的过程图。其中目录项(即目标目录)包


括四个文件块(文件块1-4, 起始文件块ID为1, LastID为4),
文件块1中包括C文件的元数据,
文件块2中包括A文件的元数据, 文件块3中包括B文件的元数据, 文件块4中包括D文件的元
数据, 过滤器是新建的, 里面没有存储文件块信息, 也即各个文件块还存储在磁盘中。
[0114] 读取A文件时, 从文件块1中未读取到, 则将文件块1中的存储的C文件元数据加载
到过滤器中, 然后读取文件块2, 读取到A文件元数据, 则将A文件的元数据加载到过滤器中,
并将LastID更新为3。读取B文件时, 先从过滤器中查找, 过滤器中不包括B文件的元数据, 则
在磁盘中查找, 由于LastID为3, 则跳过文件块1和文件块2, 直接从文件块3开始查找, 读取
到B文件的元数据后, 将文件块3中的B文件元数据加载到过滤器, 并将LastID更新为4。 当读
取C文件时, 从过滤器中存储的文件块1中查找到, 则不需要再去磁盘查找。 当读取D文件时,
过滤器中没有查到, 则从磁盘开始查找, 由于LastID为4, 则跳过文件块1-3, 直接从文件块4
开始查找, 得到D文件后, 将文件块4中的D文件元数据加载到过滤器, 由此实现了将目标目
录下所有文件块中的信息加载到过滤器中。
[0115] 示例性的 , 参见图4c, 其示出了文件读取的逻辑流程图。要读取/dir1/A(即目录
dir1下的A文件) , 在预先加载的目录树中查找目录/dir1/, 判断目录/dir1/下是否存在且
占 用的文件块数量不为0, 若否, 则确定读取失败, 表明该目录下必然不存在A文件, 不需要
再去磁盘读取; 若是, 则判断目录/dir1/是否预先构建有过滤器, 若存在过滤器, 则直接在
过滤器中查找, 如果找到, 则返回读取结果, 如果没找到, 则根据过滤器的有效的LastID, 在
磁盘中从LastID开始读取, 将读取过的文件块中的信息加载到过滤器中, 直到找到A文件所
在的目标文件块, 并更新LastID为目标文件块中记载的下一个文件块ID。若判断不存在过
滤器, 则为目录/dir1/新建一个过滤器, 然后判断LastID是否有效, 若是, 则从LastID开始
从磁盘读取各文件块, 直到找到A文件, 并更新LastID。
[0116] 本发明实施例中, 针对已落盘数据的读取过滤, 通过设立过滤器, 先在过滤器中查
找, 可提升文件读取的效率, 如果在过滤器中查不到的文件信息, 需要在磁盘中查询时, 跳
过部分文件块, 从LastID对应的文件块开始查询, 也即文件块组中必然不存在目标文件时,
则不需要对这些文件块进行磁盘读取, 减少了读取文件块的数量, 提高了I/O有效率, 进而
提升文件读取的效率; 而且针对为不存在过滤器的目标目录构建一个新的过滤器, 使得后
续读取文件时, 可先从过滤器中查询, 进而提升文件的读取效率。
[0117] 实施例五
[0118] 图5是本发明实施例五提供的文件读取方法的流程示意图 , 本实施例是在上述实
施例的基础上进行优化, 参见图5, 所述方法包括:
[0119] S501、
针对业务新写入的流动数据, 根据业务模型预估文件数据量。
[0120] S502、在为所述流动数据建立目录时, 根据预估的文件数据量, 为所述目录构建一
个过滤器。
[0121] 对于业务新写入的流动数据, 可以按照实际业务模型进行数据量估算, 在新建目
录时按估算的数据量进行预测, 按预测值新建一个文件过滤器, 如果实际业务文件量在预
测值的误差范围(例如误差10%, 预测文件量为1000实际文件量900)内则认为预测准确, 则
可直接根据预估的文件数量构建过滤器。
[0122] 需要说明的是, 若实际写入的数据量大于预估的文件数据量, 则为所述目录再构

13
CN 113835613 A 说 明 书 11/16 页

建一个相同容量的过滤器; 或若实际写入的数据量小于预估的文件数据量, 则合并两个相


邻的目录的过滤器。
[0123] 示例性的, 一个云存储系统, 一天的业务量为800万文件量, 系统中有8台存储节点
CDV, 则均摊到每个存储节点CDV的数据量约为100万, 按一个存储节点CDV上10个存储资源
来计算, 则一个存储资源上一天的业务量为10万, 平均每小时的单个资源上新增流动数据
约4000个, 所以如果数据以小时为最小目录, 则新建过滤器时的预测规格就是4000。
[0124] 在此方案下存在三种情况, 参见图5b,其示出了三种情况下创建过滤器的示意图。
情况1最为理想, 即实际业务文件量在误差范围内, 说明业务预测基本是准确的, 即可按照
一个目录一个过滤器进行新建相互独立。情况2为某一时间段业务量突然增大, 小时目录下
的过滤器容量不足, 应对此类情况可以选择新建同规格过滤器级联扩容。情况3即如果实际
业务文件量不足预测值的小时目录, 为提高利用率内存空间利用率, 应对此种情景可以选
择合并目录过滤器, 即下个目录先使用未用完的过滤器, 如果余量不足, 则再新建一个本目
录的过滤器进行级联。可以看出, 对于新增流动数据, 可以建立全文件过滤器, 此类文件的
读取可以直接通过过滤判断出文件是否存在, 减少无效I/O。
[0125] 进一步的, 所述方法还包括:
[0126] 根据各过滤器的数据存储量, 或生命周期, 对各过滤器中缓存的数据进行清理。
[0127] 示例性的, 若各过滤器占 用的存储节点的内存大于预设阈值, 则对各过滤器中的
数据进行清理。在实现时, 可根据服务器实际内存大小和业务需求在存储节点上设置合适
的文件量, 比如配置为最多占 用服务器50%的内存, 当过滤器中的文件量不断加大, 内存使
用超过设定值后, 从读取量最小的过滤器目录进行清理。
[0128] 由于云存储数据管理中由于业务量巨大, 所以数据一般采用生命周期管理来实现
清理, 由于引入了目录的过滤器, 则删除过期目录时需要清理文件过滤器。对于已经存储落
盘的数据, 过滤器与目录是一对一的, 对于新增的流动数据, 存在一对多和多对一的情况。
兼顾这两种场景, 云存储系统的最小满覆盖数据单元以目录为单位, 满覆盖清理时删除过
期目录, 当过滤器都是独享的时候直接清除过滤器, 如果有多个目录共用一个过滤器, 则最
后一个目录删除时销毁文件过滤器。
[0129] 本申请实施例中, 对于新增流动数据, 可以建立全文件过滤器, 此类文件的读取可
以直接通过过滤判断出文件是否存在, 减少无效I/O,以提升读取效率。 同时还会删除过过
期数据对应的过滤器, 或根据过滤器的存储数据量, 删除部分过滤器中的文件数据, 控制过
滤器的内存占用, 防止过度占用资源的情况出现。
[0130] 实施例六
[0131] 图6是本申请实施例六提供的文件读取方法的流程示意图 , 本实施例是在上述实
施例的基础上优化, 参见图6,
该方法包括:
[0132] S601、
获取目标文件的读取请求。
[0133] S602、
通过预先创建的多线程请求队列, 并行下发所述读取请求到各存储节点。
[0134] 云存储客户端并行下发所述读取请求到各存储节点后, 各个存储节点并行的执行
步骤S603-S607。
[0135] S603、响应于对已经存储的目标文件的读取请求, 在预先加载的目录树中确定所
述目标文件对应的目标目录。

14
CN 113835613 A 说 明 书 12/16 页

[0136] S604判断所述目标目录下是否存在预先创建的过滤器。
[0137] 其中, 所述过滤器中用于存储所述目标目录下的部分文件块中的文件信息。
[0138] S605若存在预先创建的过滤器, 则从所述预先创建的过滤器中查找所述目标文件
对应的目标文件信息。
[0139] 根据所述目标目录下预先创建的过滤器, 判断预先创建的过滤器中是否存在所述
目标文件信息, 其中,所述过滤器中用于存储所述目标目录下的部分文件块中的文件信息;
若存在, 则根据所述目标文件信息, 获取对应的目标文件; 若不存在,则从存储节点的磁盘
中依次读取所述目标目录下的其它文件块, 并将读取过的文件块的文件信息添加到过滤器
中, 直到查找到所述目标文件对应的目标文件信息为止, 其中,所述其它文件块为所述目标
目录下除了已存储在过滤器中的文件块以外的文件块。
[0140] S606若不存在预先创建的过滤器, 根据所述目标目录下的文件块数量, 为所述目
标目录构建一个过滤器。
[0141] S607、从存储节点的磁盘中依次读取所述目标目录下的文件块, 并将读取过的文
件块的文件信息添加到所述过滤器中, 直到查找到所述目标文件对应的目标文件信息为
止。
[0142] 具体的查询过程参见上述实施例, 在此不再赘述。
[0143] S608、在接收到目标存储节点返回的成功读取所述目标文件的消息时, 将所述目
标文件反馈给目标文件请求方, 并将其它存储节点返回的读取结果消息设置为无效。
[0144] 云存储客户端接到存储节点返回的目标文件后, 直接将其返回给业务层。
[0145] 本发明实施例中, 通过预先建立的多线程请求队列, 将获取的读取请求并行下发
到各个存储节点后, 若某一目标存储节点返回所请求的目标文件, 则立即将目标文件立即
返回请求方, 其余存储节点返回的读取结果自动失效处理, 由此避免了因等待所有存储节
点完成读取操作后返回最终结果所导致的读取文件耗时大的问题, 提升了文件的读取效
率。而且, 在存储节点中读取目标文件时, 通过对叶子目录建立文件过滤器, 过滤器存储有
文件块的信息, 使得读取目标文件时, 先从过滤器中读取目标文件对应的元数据, 有效减少
读取元效数据带来的存储结点节点上的I/O消耗, 提高了存储节点的I/O有效性,进一步提
高了大规模批量小文件的读取效率。
[0146] 实施例七
[0147] 图7是本发明实施例七中的文件读取装置的结构示意图 , 本实施例可适用在云存
储系统中快速读取文件的情况, 参见图7,所述装置配置于云存储系统中的数据产生设备,
包括:
[0148] 请求获取模块701, 用于获取目标文件的读取请求;
[0149] 请求下发模块702, 用于通过预先创建的多线程请求队列, 并行下发所述读取请求
到各存储节点;
[0150] 消息处理模块703,用于在接收到目标存储节点返回的成功读取所述目标文件的
消息时, 将所述目标文件反馈给目标文件请求方, 并将其它存储节点返回的读取结果消息
设置为无效。
[0151] 可选的, 所述装置还包括:
[0152] 标志判断模块, 用于判断预先建立的结果收集器中是否已有成功读取到目标文件

15
CN 113835613 A 说 明 书 13/16 页

的标志; 其中,所述结果收集器用于存储读取到的目标文件;
[0153] 无效处理模块, 用于若判断结果为是, 则将成功读取所述目标文件的消息设置为
无效;
[0154] 文件复制模块, 用于若判断结果为否, 则将所述目标文件复制到所述结果收集器
中。
[0155] 可选的,所述装置还包括:
[0156] 结果收集器清理模块, 用于在确定最后一个存储节点返回目标文件读取结果消息
后, 清空所述结果收集器中存储的目标文件。
[0157] 可选的,请求获取模块具体用于:
[0158] 根据待读取的目标文件的名称信息、 云存储系统中当前在线的存储节点数量以及
各存储节点的编码, 构建与当前在线存储节点数量相同的消息体, 其中,
每个消息体唯一对
应一个在线的存储节点;
[0159] 相应的,请求下发模块具体用于: 通过预先创建的多线程请求队列, 将各消息体并
行下发到各自对应的存储节点。
[0160] 本发明实施例所提供的文件读取装置可执行本发明任意实施例所提供的文件读
取方法, 具备执行方法相应的功能模块和有益效果。
[0161] 实施例八
[0162] 图8是本发明实施例八中的文件读取装置的结构示意图 , 本实施例可适用在云存
储系统中快速读取文件的情况, 参见图8,所述装置配置于云存储系统中的存储节点, 包括:
[0163] 响应模块801,
用于响应于对已经存储的目标文件的读取请求, 在预先加载的目录
树中确定所述目标文件对应的目标目录;
[0164] 判断模块802,
用于根据所述目标目录下预先创建的过滤器, 判断预先创建的过滤
器中是否存在所述目标文件信息, 其中,所述过滤器中用于存储所述目标目录下的部分文
件块中的文件信息;
[0165] 目标文件获取模块803, 用于在判断结果为是时, 则根据所述目标文件信息, 获取
对应的目标文件;
[0166] 文件信息查找模块804, 用于在判断结果为否时, 则从存储节点的磁盘中依次读取
所述目标目录下的其它文件块, 并将读取过的文件块的文件信息添加到过滤器中, 直到查
找到所述目标文件对应的目标文件信息为止, 其中,
所述其它文件块为所述目标目录下除
了已存储在过滤器中的文件块以外的文件块。
[0167] 可选的,所述过滤器中设置有截止文件块ID, 其中,所述截止文件块ID为所述目标
目录下的任一文件块的ID,用于表征在存储节点的磁盘中读取文件块时, 以截止文件块ID
对应的文件块开始依次读取所述目标目录下的文件块;
[0168] 相应的,二次读取模块具体用于:
[0169] 以截止文件块ID对应的文件块开始, 依次读取在所述目标目录下的其它文件块。
[0170] 可选的,所述装置还包括:
[0171] 截止文件块ID更新模块, 用于确定所述目标文件信息所在的目标文件块, 并将所
述目标文件块中记录的下一个文件块ID作为所述过滤器的截止文件块ID。
[0172] 本发明实施例所提供的文件读取装置可执行本发明任意实施例所提供的文件读

16
CN 113835613 A 说 明 书 14/16 页

取方法, 具备执行方法相应的功能模块和有益效果。
[0173] 实施例九
[0174] 图9为本发明实施例九提供的一种电子设备的结构示意图。 图9示出了适于用来实
现本发明实施方式的示例性电子设备12的框图。 图9显示的电子设备12仅仅是一个示例, 不
应对本发明实施例的功能和使用范围带来任何限制。
[0175] 如图9所示, 电子设备12以通用计算设备的形式表现。 电子设备12的组件可以包括
但不限于: 一个或者多个处理器或者处理单元16, 系统存储器28, 连接不同系统组件(包括
系统存储器28和处理单元16)的总线18。
[0176] 总线18表示几类总线结构中的一种或多种, 包括存储器总线或者存储器控制器,
外围总线, 图形加速端口, 处理器或者使用多种总线结构中的任意总线结构的局域总线。举
例来说, 这些体系结构包括但不限于工业标准体系结构(ISA)总线, 微通道体系结构(MAC)
总线, 增强型ISA总线、 视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
[0177] 电子设备12典型地包括多种计算机系统可读介质。 这些介质可以是任何能够被电
子设备12访问的可用介质, 包括易失性和非易失性介质, 可移动的和不可移动的介质。
[0178] 系统存储器28可以包括易失性存储器形式的计算机系统可读介质, 例如随机存取
存储器(RAM)30和/或高速缓存存储器32。 电子设备12可以进一步包括其它可移动/不可移
动的、易失性/非易失性计算机系统存储介质。仅作为举例, 存储系统34可以用于读写不可
移动的、 非易失性磁介质(图9未显示, 通常称为“硬盘驱动器”)。尽管图9中未示出, 可以提
供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器, 以及对可移动非易失性光
盘(例如CD-ROM ,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下, 每个驱动器
可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产
品, 该程序产品具有一组(例如至少一个)程序模块, 这些程序模块被配置以执行本发明各
实施例的功能。
[0179] 具有一组(至少一个)程序模块42的程序/实用工具40, 可以存储在例如存储器28
中, 这样的程序模块42包括但不限于操作系统、 一个或者多个应用程序、 其它程序模块以及
程序数据, 这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常
执行本发明所描述的实施例中的功能和/或方法。
[0180] 电子设备12也可以与一个或多个外部设备14(例如键盘、 指向设备、显示器24等)
通信, 还可与一个或者多个使得用户能与该电子设备12交互的设备通信, 和/或与使得该电
子设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡, 调制解调器等等)
通信。这种通信可以通过输入/输出(I/O)接口22进行。 并且,电子设备12还可以通过网络适
配器20与一个或者多个网络(例如局域网(LAN) , 广域网(WAN)和/或公共网络, 例如因特网)
通信。如图所示, 网络适配器20通过总线18与电子设备12的其它模块通信。应当明白, 尽管
图中未示出, 可以结合电子设备12使用其它硬件和/或软件模块, 包括但不限于: 微代码、设
备驱动器、冗余处理单元、外部磁盘驱动阵列、 RAID系统、磁带驱动器以及数据备份存储系
统等。
[0181] 处理单元16通过运行存储在系统存储器28中的程序, 从而执行各种功能应用以及
数据处理, 例如实现本发明实施例所提供的文件读取方法, 所述方法包括:
[0182] 获取目标文件的读取请求;

17
CN 113835613 A 说 明 书 15/16 页

[0183] 通过预先创建的多线程请求队列, 并行下发所述读取请求到各存储节点;


[0184] 在接收到目标存储节点返回的成功读取所述目标文件的消息时, 将所述目标文件
反馈给目标文件请求方, 并将其它存储节点返回的读取结果消息设置为无效。
[0185] 进一步的,本发明实施例中还提供了另一种电子设备, 即存储节点服务器, 该存储
节点服务器的硬件结构参见上述, 存储节点服务器的处理单元通过运行存储在系统存储器
中的程序, 从而执行各种功能应用以及数据处理, 例如实现本发明实施例所提供的文件读
取方法, 该方法包括:
[0186] 响应于对已经存储的目标文件的读取请求, 在预先加载的目录树中确定所述目标
文件对应的目标目录;
[0187] 根据所述目标目录下预先创建的过滤器, 判断预先创建的过滤器中是否存在所述
目标文件信息, 其中,所述过滤器中用于存储所述目标目录下的部分文件块中的文件信息;
[0188] 若存在,则根据所述目标文件信息, 获取对应的目标文件;
[0189] 若不存在, 则从存储节点的磁盘中依次读取所述目标目录下的其它文件块, 并将
读取过的文件块的文件信息添加到过滤器中, 直到查找到所述目标文件对应的目标文件信
息为止, 其中,所述其它文件块为所述目标目录下除了已存储在过滤器中的文件块以外的
文件块。
[0190] 实施例十
[0191] 本发明实施例十还提供了一种计算机可读存储介质, 其上存储有计算机程序, 该
程序被处理器执行时实现如本发明实施例所提供的文件读取方法, 所述方法包括:
[0192] 获取目标文件的读取请求;
[0193] 通过预先创建的多线程请求队列, 并行下发所述读取请求到各存储节点;
[0194] 在接收到目标存储节点返回的成功读取所述目标文件的消息时, 将所述目标文件
反馈给目标文件请求方, 并将其它存储节点返回的读取结果消息设置为无效。
[0195] 本发明实施例的计算机存储介质, 可以采用一个或多个计算机可读的介质的任意
组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读
存储介质例如可以是——但不限于——电、磁、光、 电磁、红外线、或半导体的系统、装置或
器件, 或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括: 具
有一个或多个导线的电连接、 便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器
(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-
ROM)、 光存储器件、磁存储器件、 或者上述的任意合适的组合。在本文件中, 计算机可读存储
介质可以是任何包含或存储程序的有形介质, 该程序可以被指令执行系统、装置或者器件
使用或者与其结合使用。
[0196] 计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,
其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式, 包括但不限
于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可
读存储介质以外的任何计算机可读介质, 该计算机可读介质可以发送、传播或者传输用于
由指令执行系统、 装置或者器件使用或者与其结合使用的程序。
[0197] 计算机可读介质上包含的程序代码可以用任何适当的介质传输, 包括——但不限
于无线、 电线、
光缆、RF等等,
或者上述的任意合适的组合。

18
CN 113835613 A 说 明 书 16/16 页

[0198] 可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机
程序代码, 所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,
还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以
完全地在用户计算机上执行、 部分地在用户计算机上执行、作为一个独立的软件包执行、 部
分在用户计算机上部分在远程计算机上执行、 或者完全在远程计算机或服务器上执行。在
涉及远程计算机的情形中, 远程计算机可以通过任意种类的网络——包括局域网(LAN)或
广域网(WAN)—连接到用户计算机, 或者,
可以连接到外部计算机(例如利用因特网服务提
供商来通过因特网连接)。
[0199] 进一步的,本发明实施例中还提供了另一种存储介质, 其上存储有计算机程序, 该
程序被处理器执行时实现如本发明实施例所提供的文件读取方法, 所述方法包括:
[0200] 响应于对已经存储的目标文件的读取请求, 在预先加载的目录树中确定所述目标
文件对应的目标目录;
[0201] 根据所述目标目录下预先创建的过滤器, 判断预先创建的过滤器中是否存在所述
目标文件信息, 其中,所述过滤器中用于存储所述目标目录下的部分文件块中的文件信息;
[0202] 若存在,则根据所述目标文件信息, 获取对应的目标文件;
[0203] 若不存在,则从存储节点的磁盘中依次读取所述目标目录下的其它文件块, 并将
读取过的文件块的文件信息添加到过滤器中, 直到查找到所述目标文件对应的目标文件信
息为止, 其中,所述其它文件块为所述目标目录下除了已存储在过滤器中的文件块以外的
文件块。
[0204] 注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,
本发明不限于这里所述的特定实施例, 对本领域技术人员来说能够进行各种明显的变化、
重新调整和替代而不会脱离本发明的保护范围。因此, 虽然通过以上实施例对本发明进行
了较为详细的说明, 但是本发明不仅仅限于以上实施例, 在不脱离本发明构思的情况下, 还
可以包括更多其他等效实施例, 而本发明的范围由所附的权利要求范围决定。

19
CN 113835613 A 说 明 书 附 图 1/10 页

图1a

图1b

20
CN 113835613 A 说 明 书 附 图 2/10 页

图2a

图2b

21
CN 113835613 A 说 明 书 附 图 3/10 页

图2c

22
CN 113835613 A 说 明 书 附 图 4/10 页

图3a

图3b

23
CN 113835613 A 说 明 书 附 图 5/10 页

图3c

24
CN 113835613 A 说 明 书 附 图 6/10 页

图4a

25
CN 113835613 A 说 明 书 附 图 7/10 页

图4b

图4c

26
CN 113835613 A 说 明 书 附 图 8/10 页

图5a

图5b

27
CN 113835613 A 说 明 书 附 图 9/10 页

图6

图7

28
CN 113835613 A 说 明 书 附 图 10/10 页

图8

图9

29

You might also like