首页 / 专利库 / 资料储存系统 / 高速缓冲存储器 / 一种文件系统访问方法及装置

一种文件系统访问方法及装置

阅读:85发布:2020-05-08

专利汇可以提供一种文件系统访问方法及装置专利检索,专利查询,专利分析的服务。并且本 发明 实施例 提供了一种文件系统 访问 方法及装置,所述文件系统包括预置的高速缓冲 存储器 cache,在该方法中,在触发针对挂载到所述文件系统的s3对象文件的读操作时,从所述cache中读取所述读操作对应的第一目标数据;在触发针对挂载到所述文件系统的s3对象文件的写操作时,在所述cache中写入所述写操作对应的第二目标数据;按照预设时间间隔,将所述cache中写入的数据,回写到s3对象文件。本 申请 的方案实现用户对挂载到本地的文件系统中的数据进行随机读写,提供给用户更为高效便捷的工作方式,实现了一种支持随机读写操作的文件系统访问方法。,下面是一种文件系统访问方法及装置专利的具体信息内容。

1.一种文件系统访问方法,其特征在于,所述文件系统包括预置的高速缓冲存储器cache,所述方法包括:
在触发针对挂载到所述文件系统的s3对象文件的读操作时,从所述cache中读取所述读操作对应的第一目标数据;
在触发针对挂载到所述文件系统的s3对象文件的写操作时,在所述cache中写入所述写操作对应的第二目标数据;
按照预设时间间隔,将所述cache中写入的数据,回写到s3对象文件。
2.根据权利要求1所述的方法,其特征在于,在从所述cache中读取所述读操作对应的第一目标数据之前,所述方法还包括:
当所述cache中不存在所述第一目标数据时,从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据。
3.根据权利要求2所述的方法,其特征在于,所述当所述cache中不存在所述第一目标数据时,从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据,包括:
当所述cache的缓存空间充足时,从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据;
当所述cache的缓存空间不足时,删除所述cache中的数据,在删除数据后从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据。
4.根据权利要求3所述的方法,其特征在于,所述cache包括双向链表,所述当所述cache的缓存空间不足时,删除所述cache中的数据,在删除数据后从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据,包括:
确定在所述双向链表位于尾部节点的数据为需要删除的数据;
当所述需要删除的数据被修改时,将所述需要删除的数据写入s3对象文件,删除所述需要删除的数据,在删除数据后从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据;
当所述删除的数据未被修改时,删除所述需要删除的数据,在删除数据后从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据。
5.根据权利要求3所述的方法,其特征在于,所述cache包括双向链表,所述从所述s3对象文件读取所述第一目标数据到所述cache,还包括:
在所述cache中,按照双向链表的节点顺序匹配所述第一目标数据的优先级,其中优先级顺序从双向链表头部节点至尾部节点依次降低;
对优先级高的所述第一目标数据优先从所述s3对象文件读取到所述cache中。
6.根据权利要求1所述的方法,其特征在于,在所述cache中写入所述写操作对应的第二目标数据之前,所述方法还包括:
当所述cache中不存在所述第二目标数据时,从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据。
7.根据权利要求6所述的方法,其特征在于,所述cache包括cache的缓存空间,所述当所述cache中不存在所述第二目标数据时,从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据,包括:
当所述cache的缓存空间充足时,从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据;
当所述cache的缓存空间不足时,删除所述cache中的数据,在删除数据后从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据。
8.根据权利要求7所述的方法,其特征在于,所述cache包括双向链表,所述当所述cache的缓存空间不足时,删除所述cache中的数据,在删除数据后从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据,包括:
确定在所述双向链表位于尾部节点的数据为需要删除的数据;
当所述需要删除的数据被修改时,将所述需要删除的数据写入s3对象文件,删除所述需要删除的数据,在删除数据后从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据;
当所述删除的数据未被修改时,删除所述需要删除的数据,在删除数据后从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据。
9.根据权利要求7所述的方法,其特征在于,所述cache包括双向链表,所述从所述s3对象文件读取所述第二目标数据到所述cache,还包括:
在所述cache中,按照双向链表的节点顺序匹配所述第二目标数据的优先级,其中优先级顺序从双向链表头部节点至尾部节点依次降低;
对优先级高的所述第二目标数据优先从所述s3对象文件读取到所述cache中。
10.一种文件系统访问装置,其特征在于,所述装置包括预置的高速缓冲存储器cache;
所述装置包括:
数据读操作模,用于在触发针对挂载到所述文件系统的s3对象文件的读操作时,从所述cache中读取所述读操作对应的第一目标数据;
数据写操作模块,用于在触发针对挂载到所述文件系统的s3对象文件的写操作时,在所述cache中写入所述写操作对应的第二目标数据;
数据回写模块,用于按照预设时间间隔,将所述cache中写入的数据,回写到s3对象文件。
11.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序
处理器,用于执行存储器上所存放的程序时,实现权利要求1-9任一所述的方法步骤。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-9中任一所述的方法。

说明书全文

一种文件系统访问方法及装置

技术领域

[0001] 本发明涉及计算机应用技术领域,特别是涉及一种文件系统访问方法及一种文件系统访问装置。

背景技术

[0002] Linux FUSE(Filesystem in Userspace,用户空间文件系统)支持将s3对象存储挂载成本地文件系统,为了追求高效便捷的工作方式,用户通常会利用FUSE的软件将s3中的文件挂载到本地作为文件系统使用。
[0003] 目前,Linux FUSE随机访问接口低效、随机读写性能差,由于用户对挂载的本地文件系统中的一个大文件进行一个字节的修改,整个文件就得立刻做一次全量上传,大大损耗系统的性能。因此,大多数利用FUSE的软件并不支持对挂载后文件系统的无序访问,即随机读写文件。

发明内容

[0004] 本发明实施例的目的在于提供一种文件系统访问方法及装置,以实现用户随机读写挂载到本地的文件系统中的数据。具体技术方案如下:
[0005] 在本发明实施的第一方面,首先提供了一种文件系统访问方法,所述文件系统包括预置的高速缓冲存储器cache,所述方法包括:
[0006] 在触发针对挂载到所述文件系统的s3对象文件的读操作时,从所述cache中读取所述读操作对应的第一目标数据;
[0007] 在触发针对挂载到所述文件系统的s3对象文件的写操作时,在所述cache中写入所述写操作对应的第二目标数据;
[0008] 按照预设时间间隔,将所述cache中写入的数据,回写到s3对象文件。
[0009] 可选的,在从所述cache中读取所述读操作对应的第一目标数据之前,所述方法还包括:
[0010] 当所述cache中不存在所述第一目标数据时,从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据。
[0011] 可选的,所述当所述cache中不存在所述第一目标数据时,从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据,包括:
[0012] 当所述cache的缓存空间充足时,从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据;
[0013] 当所述cache的缓存空间不足时,删除所述cache中的数据,在删除数据后从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据。
[0014] 可选的,所述cache包括双向链表,所述当所述cache的缓存空间不足时,删除所述cache中的数据,在删除数据后从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据,包括:
[0015] 确定在所述双向链表位于尾部节点的数据为需要删除的数据;
[0016] 当所述需要删除的数据被修改时,将所述需要删除的数据写入s3对象文件,删除所述需要删除的数据,在删除数据后从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据;
[0017] 当所述删除的数据未被修改时,删除所述需要删除的数据,在删除数据后从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据。
[0018] 可选的,所述cache包括双向链表,所述从所述s3对象文件读取所述第一目标数据到所述cache,还包括:
[0019] 在所述cache中,按照双向链表的节点顺序匹配所述第一目标数据的优先级,其中优先级顺序从双向链表头部节点至尾部节点依次降低;
[0020] 对优先级高的所述第一目标数据优先从所述s3对象文件读取到所述cache中。
[0021] 可选的,在所述cache中写入所述写操作对应的第二目标数据之前,所述方法还包括:
[0022] 当所述cache中不存在所述第二目标数据时,从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据。
[0023] 可选的,所述cache包括cache的缓存空间,所述当所述cache中不存在所述第二目标数据时,从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据,包括:
[0024] 当所述cache的缓存空间充足时,从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据;
[0025] 当所述cache的缓存空间不足时,删除所述cache中的数据,在删除数据后从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据。
[0026] 可选的,所述cache包括双向链表,所述当所述cache的缓存空间不足时,删除所述cache中的数据,在删除数据后从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据,包括:
[0027] 确定在所述双向链表位于尾部节点的数据为需要删除的数据;
[0028] 当所述需要删除的数据被修改时,将所述需要删除的数据写入s3对象文件,删除所述需要删除的数据,在删除数据后从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据;
[0029] 当所述删除的数据未被修改时,删除所述需要删除的数据,在删除数据后从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据。
[0030] 可选的,所述cache包括双向链表,所述从所述s3对象文件读取所述第二目标数据到所述cache,还包括:
[0031] 在所述cache中,按照双向链表的节点顺序匹配所述第二目标数据的优先级,其中优先级顺序从双向链表头部节点至尾部节点依次降低;
[0032] 对优先级高的所述第二目标数据优先从所述s3对象文件读取到所述cache中。
[0033] 在本发明实施的第二方面,还提供了一种文件系统访问装置,所述装置包括预置的高速缓冲存储器cache;所述装置包括:
[0034] 数据读操作模,用于在触发针对挂载到所述文件系统的s3对象文件的读操作时,从所述cache中读取所述读操作对应的第一目标数据;
[0035] 数据写操作模块,用于在触发针对挂载到所述文件系统的s3对象文件的写操作时,在所述cache中写入所述写操作对应的第二目标数据;
[0036] 数据回写模块,用于按照预设时间间隔,将所述cache中写入的数据,回写到s3对象文件。
[0037] 在本发明实施的又一方面,还提供了一种电子设备,所述电子设备包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序时,实现权利要上述任一所述的文件系统访问方法步骤。
[0038] 在本发明实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述任一所述的文件系统访问方法。
[0039] 在本发明实施的又一方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的文件系统访问方法。
[0040] 本发明实施例提供的一种文件系统访问方法及装置,通过采用加载具有随机读写操作的高速缓冲存储器cache的技术手段,用户可以对挂载到文件系统的s3对象文件的数据进行随机写操作,cache将该随机写的数据写入cache内存中,并按照一定的时间间隔将所述缓存在cache内存中的数据顺序写回s3对象文件。cache的加载解决了用户无法对挂载到本地的文件系统中的数据进行随机读写的问题,提高随机读写的性能和效率,实现了一种支持随机读写操作的文件系统访问方法。附图说明
[0041] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
[0042] 图1为本发明实施例中的一种用户对挂载在未加载cache的本地文件系统的访问方法流程图
[0043] 图2为本发明实施例中的一种文件系统访问方法实施例一的步骤流程图;
[0044] 图3为本发明实施例中的一种文件系统访问方法实施例二的步骤流程图;
[0045] 图4为本发明实施例中的一种文件系统访问方法实施例三的步骤流程图;
[0046] 图5为本发明实施例中的一种文件系统访问装置的结构示意图;
[0047] 图6为本发明实施例中的一种电子设备的结构示意图。

具体实施方式

[0048] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
[0049] 本发明实施例公开了一种文件系统访问方法及装置,以解决用户无法对s3对象文件挂载到本地文件系统的数据进行随机读写的问题,提高对数据随机读写的效率,大大提高系统的性能。以下结合附图进行详细描述。
[0050] 在本发明的一种实施例中,如图1所示,其示出本发明一种用户对挂载在未加载cache的本地文件系统的访问方法流程图,该流程图包括上框图与下框图,上框图为用户空间userspace,包括用户对某数据的随机读写Write/Read*,开源框架libfuse(可以使用libfuse编写钩子函数),Linux系统最底层的接口glibc以及用户对数据进行挂载的挂载点mountpoint;下框图为操作系统的核心kernel,包括FUSE(Filesystem in Userspace,用户空间文件系统,它是Linux中用于挂载某些网络空间(如SSH)到本地文件系统的模块),NFS(Network File System,网络文件系统),Linux系统下的日志文件系统EXT4,以及VFS(Virtual File System Switch,虚拟文件系统)。
[0051] 如图1所示,用户可以通过FUSE的一个客户端client将s3对象挂载到本地的挂载点mountpoint中,当修改mountpoint下的某个文件时,请求最终会使用libfuse编写的钩子函数,其钩子函数可以为static int qiyi_s3_fs_write(const char*path,const char*buf,size_t size,off_t offset,struct fuse_file_info*ffi)。在qiyi_s3_fs_write中,若不增加缓存空间,哪怕只修改一个字节,该钩子函数就得立即将数据直接上传到s3中,大大损耗系统的性能以及降低用户对数据随机读写的效率;若在挂载成本地文件系统后,再封装一层文件cache系统,则可以达到在qiyi_s3_fs_write针对*buf参数指向的数据缓存空间中,加入cache内存以增加其缓存空间的目的,即可以将用户随机写的数据缓存在cache,定期再将用户随机写的数据按照顺序写回到s3中。
[0052] 在本发明的一种实施例中,用户对s3对象文件进行访问,其中s3作为对象存储的接口且该接口本身只提供上传GET、下载PUT功能,但由于用户更习惯对文件系统而不是对s3 API接口进行操作,因此用户通常会将s3挂载成本地作为一个伪文件系统来使用。此时用户利用FUSE的软件将s3对象文件挂载成伪文件系统,但伪文件系统的随机读写性能非常差,而且用户利用的FUSE的随机读写接口的效率极低。为了解决上述随机读写性能差以及效率低的问题,可以在用户利用FUSE的软件将s3对象文件挂载成伪文件系统之后,加载具有随机读写操作的高速缓冲存储器cache。
[0053] 本发明实施例提供了一种文件系统访问方法,如图2所示,其示出了本发明一种文件系统访问方法实施例一的步骤流程图,本实施例针对用户对挂载在已加载cache的本地文件系统的访问方法,且所述文件系统包括预置的cache,具体可以包括如下步骤:
[0054] 需要说明的是,本发明实施例公开的文件系统访问方法及装置,所述文件系统包括预置的高速缓冲存储器cache,在系统中可以加载预置的cache;其中,预置的cache使用的是物理机内存,且可以对其自身存储的数据进行随机读写的操作。
[0055] 步骤201,在触发针对挂载到所述文件系统的s3对象文件的读操作时,从所述cache中读取所述读操作对应的第一目标数据;
[0056] 在本发明的一种实施例中,用户对挂载成本地文件系统的s3对象文件中的数据进行随机读,此时确定用户随机读的数据为第一目标数据,同时会触发对该第一目标数据的读操作。由于cache的加载,用户对第一目标数据的读操作可以在cache中进行的,用户可以从cache中读取第一目标数据,cache的加载使得本地文件系统的缓存空间增大,有利于第一目标数据的缓存。
[0057] 步骤202,在触发针对挂载到所述文件系统的s3对象文件的写操作时,在所述cache中写入所述写操作对应的第二目标数据;
[0058] 在本发明的一种实施中,用户对挂载成本地文件系统的s3对象文件中的数据进行随机写,此时确定用户随机写的数据为第二目标数据,同时会触发对该第二目标数据的写操作。由于cache的加载,用户对第二目标数据的写操作可以在cache中进行的,可以在cache中写入或修改第二目标数据,cache的加载使得本地文件系统的缓存空间增大,有利于第二目标数据的缓存。
[0059] 步骤203,按照预设时间间隔,将所述cache中写入的数据,回写到s3对象文件。
[0060] 在本发明的一种实施例中,按照预设时间间隔对存储在cache内存中用户写入或修改的数据,回写到s3对象文件中。当用户对挂载成本地文件系统的s3对象文件中的数据进行随机写时,由于文件系统包括预置的cache,文件系统可以将用户随机写的数据写入cache内存中;其中,可以对cache内存进行格式化,并结构化地存储用户随机写的数据,最后定期将在cache内存中用户随机写的数据按照顺序写回到s3中。
[0061] 其中,预设时间间隔可以通过退避算法随机确定,即该预设时间间隔是随机的;其中cache的加载有利于数据的缓存,其缓存的对象主要是用户随机写的数据,解决了用户哪怕修改数据中的一个字节,该数据就得立刻全量上传回s3对象的问题。
[0062] 在本发明的一种实施例中,可以不使用FUSE提供的低效率随机读写接口,使用FUSE的顺序读写接口去模拟随机读写数据;在使用FUSE的顺序读写接口的前提下,可以封装一层文件cache系统的设计,需要说明的是,用户对该文件cache系统并无感知。当用户对挂载成本地文件系统的s3对象文件中的数据进行随机读时,可以在cache内存中对需要随机读的数据进行读操作;当用户对挂载成本地文件系统的s3对象文件中的数据进行随机写时,可以将该随机写的数据写入cache内存中。加载具有随机读写操作的预置cache,并利用预置cache的格式与结构,减小系统与s3集群的写带宽,提高用户随机读的效率以及用户随机写的速度。
[0063] 本发明实施例提供了一种文件系统访问方法,如图3所示,其示出了本发明一种文件系统访问方法实施例二的步骤流程图,本实施例为用户在对挂载到本地文件系统的s3对象文件中的数据进行随机读的步骤,且所述文件系统包括预置的cache,具体可以包括如下步骤:
[0064] 需要说明的是,在本发明的一种实施例中,文件系统中预置的cache,其内存的数据结构设计可以如下:
[0065]
[0066] cache内存可以使用上述结构体list_head构成双向链表,list_head具有两个指针参数*next和*prev,其中*next参数指向的是相对当前的指针位置,下一个存储在链表中的数据,*prev参数指向的是相对当前的指针位置,上一个存储在链表中的数据;list_head构成的双向链表是双向的,其可以从前往后或从后往前进行查询。
[0067]
[0068] cache内存可以采用上述结构体list_node,将用户随机读写的数据进行缓存,list_node中*data参数指向的是用户随机读写的数据,并调用结构体list_head的双向链表形式,is_modified参数表示的是缓存在cache中的数据需不需要回写,若缓存的数据需要回写,则为true;若缓存的数据不需要回写,则为false。
[0069]
[0070] cache内存可以使用KV table构成哈希表链列表,KV为键值Key-Value,KV table中使用结构体kv来实现哈希表链列表,其中*next参数指向的是数据的部分内容存放的地址,*i_node参数指向的是数据的部分内容,并调用list_node的双向链表形式;结构体kv构成的哈希表链列表可以根据数据的部分内容(关键字)快速找到元素的存放地址。
[0071]
[0072] 哈希表HashTable可以通过调用上述结构体kv的哈希表链列表形式,且结构体kv调用list_node的双向链表形式,该cache内存通过其数据结构的设计实现双向链表与哈希表链列表的缓存方式进行结合。
[0073] 在本发明的一种实施例中,系统对用户随机读写的数据缓存在cache中且cache包括双向链表,表示cache内存采用的是双向链表的缓存方式,即用户随机读写的数据是缓存在双向链表中;在双向链表中,用户随机读写的数据都具有相应的节点,这种双向链表的缓存方式可以通过cache内存的数据结构设计实现。
[0074] 在本发明的一种实施例中,系统对用户随机读写的数据缓存在cache中且cache包括哈希链列表,表示cache内存还采用哈希表链列表的缓存方式,即系统可以根据用户随机读写的数据的部分内容(关键字)快速找到该随机读写的数据的存放地址;在哈希表链列表中,可以确定用户随机读写数据的节点位置,这种哈希链列表的缓存方式可以通过cache内存的数据结构设计实现。
[0075] 步骤301,在从所述cache中读取所述读操作对应的第一目标数据之前,当所述cache中不存在所述第一目标数据时,从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据;
[0076] 在本发明的一种实施例中,用户对挂载到本地文件系统的s3对象文件中的数据进行随机读,系统对数据的随机读操作是在cache进行的。首先系统可以判断cache是否存在第一目标数据,第一目标数据指的是用户进行随机读的数据的统称;若cache存在第一目标数据,即cache存在用户随机读的数据,则系统直接从cache中读取第一目标数据;若cache不存在第一目标数据,即cache不存在用户随机读的数据,则系统需要先从s3对象文件中读取第一目标数据到cache,再从cache中读取第一目标数据。
[0077] 判断cache是否存在用户随机读的数据的方法,可以通过监测cache中是否存在与用户随机读的数据名称相同的数据,其中cache中数据的命名方式可以通过该数据从s3对象文件缓存时URL的哈希值来命名。需要说明的是,对于判断的方法与cache中缓存数据的命名方式,本发明实施例对此不加以限制。
[0078] 步骤302,在对挂载到文件系统的s3对象文件进行随机读操作时,从cache中读取随机读操作对应的第一目标数据;
[0079] 在本发明的一种实施例中,由于cache包括双向链表,用户随机读的数据是缓存在双向链表中的,当用户对cache中的数据进行随机读时,从cache中读取用户随机读的数据,可以将该用户随机读的数据在双向链表中对应的节点,移动到头部节点位置,表示该用户随机读的数据最近被使用过,也表示此时该用户随机读的数据优先级最高;当用户再次对该数据进行随机读写时,由于该数据的优先级最高,可以将该数据进行优先缓存。
[0080] 步骤303,按照预设时间间隔,将所述cache中写入的数据,回写到s3对象文件。
[0081] 在本发明的一种实施例中,cache包括双向链表,按照预设时间间隔,对所述第二目标数据根据双向链表中的节点顺序写入s3对象文件中。
[0082] 具体为,用户对cache中的数据进行随机读,系统在判断需要删除的数据被修改时,可以将该被修改的数据写入s3对象文件中;此时,可以按照预设的时间间隔,对修改后的数据按照从双向链表头部节点至尾部节点的顺序写入s3对象文件,即按照优先级从高到低的顺序将修改后的数据回写到s3对象文件中;其中,预设的时间间隔可以是刷新cache中的内容到s3对象文件中的频率,其可以通过退避算法来确定,退避算法可以创建随机的等待时间。
[0083] 在本发明的一种实施例中,所述步骤301可以包括如下子步骤:
[0084] 子步骤S11,在所述cache中,按照双向链表的节点顺序匹配所述第一目标数据的优先级,其中优先级顺序从双向链表头部节点至尾部节点依次降低;对优先级高的所述第一目标数据优先从所述s3对象文件读取到所述cache中;
[0085] 在本发明的一种实施例中,cache包括双向链表,即cache中缓存的数据实际上是缓存在双向链表中。在双向链表中,按照双向链表的节点顺序去缓存数据的优先级,优先级顺序从双向链表头部节点至尾部节点依次降低,即位于双向链表头部节点位置对应的数据的优先级为最高优先级;从s3对象文件缓存数据到cache中时,将优先缓存优先级高的数据。需要说明的是,cache中缓存的数据包括用户随机读和随机写的数据。
[0086] 可以利用cache的局部性原理,即近期用到的数据,其再次使用的几率会更高的原理;cache的局部性原理决定了用户随机读和随机写的数据是具有热点的,对热点数据优先进行缓存时收益最大,而上述优先缓存优先级高的数据,表示热点数据与该数据的优先级是相对应的关系。
[0087] 子步骤S12,当所述cache的缓存空间充足时,从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据;
[0088] 在本发明的一种实施例中,当cache不存在用户随机读的数据时,系统需要先从s3对象文件中读取用户随机读的数据到cache,此时可以判断cache的缓存空间是否充足;若cache的缓存空间充足,则系统直接从s3对象文件中缓存用户随机读的数据到cache,并从cache读取用户随机读的数据;若cache的缓存空间不足,则需要先删除cache中的数据后再缓存数据,再从cache读取用户随机读的数据。
[0089] 判断cache的缓存空间是否充足的方法,可以通过对用户随机读的数据容量和当前cache的缓存空间剩余容量进行比较;若用户随机读的数据容量小于当前cache的缓存空间剩余容量,则cache的缓存空间充足;若用户随机读的数据容量大于当前cache的缓存空间剩余容量,则删除cache中需要删除的数据,在删除数据后,再次对缓存空间剩余容量进行判断,重复上述判断与删除的操作,直至cache的缓存空间剩余容量充足为止。需要说明的是,对于判断的方法,本发明实施例对此不加以限制。
[0090] 子步骤S13,当所述cache的缓存空间不足时,删除所述cache中的数据,在删除数据后从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据;
[0091] 在本发明的一种实施例中,当cache的缓存空间不足时,删除cache中的数据,在删除数据后从所述s3对象文件读取用户随机读的数据到cache,并从cache中读取用户随机读的数据;
[0092] 在本发明的一种实施例中,所述cache包括双向链表,所述子步骤S13可以包括如下子步骤:
[0093] 子步骤S131,确定位于所述双向链表尾部节点的数据为需要删除的数据;
[0094] 在本发明的一种实施例中,当cache的缓存空间不足时,需要删除cache中的数据以扩张当前的缓存空间,cache包括双向链表,此时可以确定位于双向链表中尾部节点的数据为需要删除的数据。
[0095] 由于所述cache包括双向链表,即缓存在cache中的数据实际上是缓存在cache的双向链表中;在双向链表中缓存的数据具有对应的节点,可以将位于双向链表尾部节点位置的数据确定为当前需要删除的数据,尾部节点表示的是其对应的数据最近最久未被使用。需要说明的是,在双向链表中缓存的数据包括用户随机读和随机写的数据。
[0096] 子步骤S132,当所述需要删除的数据被修改时,将所述需要删除的数据写入s3对象文件,删除所述需要删除的数据,在删除数据后从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据;
[0097] 在本发明的一种实施例中,确定cache的缓存空间中需要删除的数据后,需要判断该需要删除的数据是否被修改后,再对该数据进行删除;判断位于双向链表尾部节点的数据是否被修改的方法,可以通过标识的方式。具体为,可以通过对某个参数进行标识,例如对cache的结构体list_node中的is_modified参数进行标识,当用户对数据进行修改时,标识is_modified为true,表示该数据是被修改的数据;当用户对数据只进行读取而未对其进行修改时,标识is_modified为false,表示该数据是未被修改的数据。需要说明的是,对于判断的方法,本发明实施例对此不加以限制。
[0098] 当需要删除的数据is_modified参数为true时,将该数据写入到s3对象文件,删除该数据后,从s3对象文件读取用户随机读的数据到cache,并从cache中读取用户随机读的数据。
[0099] 子步骤S133,当所述删除的数据未被修改时,删除所述需要删除的数据,在删除数据后从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据;
[0100] 在本发明的一种实施例中,若系统检测到该需要删除的数据is_modified参数为false,则表示该在cache中位于双向链表尾部节点的数据未被修改,无需将该未被修改的数据写回到s3对象文件;直接删除该需要删除的数据,从s3对象文件读取用户随机读的数据到cache,并从cache中读取用户随机读的数据。
[0101] 在本发明的一种实施例中,用户将s3对象文件挂载成本地文件系统且系统加载预置的cache。当用户触发针对挂载成本地文件系统的s3对象文件读操作时,即用户对本地文件系统的s3对象文件进行随机读时,从cache中读取用户随机写的数据;并按照预设的时间间隔,将在cache中被修改的数据,回写到s3对象文件。cache的加载,使得数据缓存的空间增大,利用cache的随机读以及双向链表的存储方式,解决了用户无法对挂载到本地的文件系统中的数据进行随机读的问题。
[0102] 本发明实施例提供了一种文件系统访问方法,如图4所示,其示出了本发明一种文件系统访问方法实施例三的步骤流程图,本实施例为用户在对挂载到本地文件系统的s3对象文件中的数据进行随机写的步骤,且所述文件系统包括预置的cache,具体可以包括如下步骤:
[0103] 步骤401,在所述cache中修改写入所述写操作对应的第二目标数据之前,当所述cache中不存在所述第二目标数据时,从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据;
[0104] 在本发明的一种实施例中,用户对挂载到本地文件系统的s3对象文件中的数据进行随机写,系统对数据的随机写操作是在cache进行的。首先系统可以判断cache是否存在第二目标数据,第二目标数据指的是用户进行随机写的数据的统称;若cache存在第二目标数据,即cache存在用户随机写的数据,则系统直接在cache中写入或修改第二目标数据;若cache不存在第二目标数据,即cache不存在用户随机写的数据,则系统需要先从s3对象文件中读取第二目标数据到cache,再在cache中写入或修改第二目标数据。
[0105] 步骤402,在对挂载到文件系统的s3对象文件进行随机写操作时,在cache中写入随机读操作对应的第二目标数据;
[0106] 在本发明的一种实施例中,由于cache包括双向链表,用户随机写的数据是缓存在双向链表中的,当用户对cache中的数据进行随机写时,从cache中读取用户随机写的数据,可以将该用户随机写的数据在双向链表中对应的节点,移动到头部节点位置,表示该用户随机写的数据最近被使用过,也表示此时该用户随机读的数据优先级最高;当用户再次对该数据进行随机读写时,由于该数据的优先级最高,可以将该数据进行优先缓存;还可以将该随机写的数据is_modified参数为true,表示该用户随机写的数据被修改过。
[0107] 步骤403,按照预设时间间隔,将所述cache中写入的数据,回写到s3对象文件。
[0108] 在本发明的一种实施例中,cache包括双向链表,按照预设时间间隔,对用户随机写的数据根据双向链表中的节点顺序写入s3对象文件中。
[0109] 具体为,在一种情况下,用户对cache中的数据进行随机写,系统在判断需要删除的数据被修改时,可以将该被修改的数据写入s3对象文件中;此时,可以按照预设的时间间隔,对修改后的数据按照从双向链表头部节点至尾部节点的顺序写入s3对象文件,即按照优先级从高到低的顺序将修改后的数据回写到s3对象文件中;其中,预设的时间间隔可以是刷新cache中的内容到s3对象文件中的频率,其可以通过退避算法来确定,退避算法可以创建随机的等待时间。
[0110] 在另一种情况下,用户对cache中的数据进行随机写,即用户在写入或修改随机写的数据时,系统请求可以使用libfuse编写的钩子函数static int qiyi_s3_fs_write(const char*path,const char*buf,size_t size,off_t offset,struct fuse_file_info*ffi),cache的加载使得钩子函数中的*buf参数指向的cache内存的缓存空间增大,以便系统对用户写入或修改后的数据进行缓存;当系统对用户随机写的数据进行缓存,假设通过退避算法得到的随机等待时间为1个月,那么每过1个月,系统将cache内存中缓存的is_modified=1的数据回写到s3对象文件中,即每个月对cache内存的缓存空间进行清理操作;定期对cache内存的缓存空间中的数据进行清理,这使得qiyi_s3_fs_write中的*buf参数指向的内存的缓存空间可以继续容纳缓存的数据。需要说明的是,系统对cache中读取的数据不进行回写;且所述预设时间间隔是随机的,可以为2个星期、0.5个月等。
[0111] 在本发明的一种实施例中,所述步骤401可以包括如下子步骤:
[0112] 子步骤S21,在所述cache中,按照双向链表的节点顺序匹配所述第二目标数据的优先级,其中优先级顺序从双向链表头部节点至尾部节点依次降低;对优先级高的所述第二目标数据优先从所述s3对象文件读取到所述cache中;
[0113] 在本发明的一种实施例中,cache包括双向链表,即cache中缓存的数据实际上是缓存在双向链表中。在双向链表中,按照双向链表的节点顺序去缓存数据的优先级,优先级顺序从双向链表头部节点至尾部节点依次降低,即位于双向链表头部节点位置对应的数据的优先级为最高优先级;从s3对象文件缓存数据到cache中时,将优先缓存优先级高的数据。需要说明的是,cache中缓存的数据包括用户随机读和随机写的数据。
[0114] 子步骤S22,当所述cache的缓存空间充足时,从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据;
[0115] 在本发明的一种实施例中,当cache不存在用户随机写的数据时,系统需要先从s3对象文件中读取用户随机写的数据到cache,此时可以判断cache的缓存空间是否充足;若cache的缓存空间充足,则系统直接从s3对象文件中缓存用户随机写的数据到cache,并在cache写入或修改用户随机写的数据;若cache的缓存空间不足,则需要先删除cache中的数据后再缓存数据,再在cache写入或修改用户随机写的数据。
[0116] 子步骤S23,当所述cache的缓存空间不足时,删除所述cache中的数据,在删除数据后从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据;
[0117] 在本发明的一种实施例中,当cache的缓存空间不足时,删除cache中的数据,在删除数据后从所述s3对象文件读取用户随机写的数据到cache,并在cache写入或修改用户随机写的数据。
[0118] 在本发明的一种实施例中,所述cache包括双向链表,所述子步骤S23可以包括如下子步骤:
[0119] 子步骤S231,确定在所述双向链表位于尾部节点的数据为需要删除的数据;
[0120] 在本发明的一种实施例中,当cache的缓存空间不足时,需要删除cache中的数据以扩张当前的缓存空间,cache包括双向链表,此时可以确定位于双向链表中尾部节点的数据为需要删除的数据。
[0121] 子步骤S232,当所述需要删除的数据被修改时,将所述需要删除的数据写入s3对象文件,删除所述需要删除的数据,在删除数据后从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据;
[0122] 在本发明的一种实施例中,确定cache的缓存空间中需要删除的数据后,需要判断该需要删除的数据是否被修改后,再对该数据进行删除;当需要删除的数据is_modified参数为true时,将该数据写入到s3对象文件,删除该数据后,从s3对象文件读取用户随机写的数据到cache,并在cache写入或修改用户随机写的数据。
[0123] 子步骤S233,当所述删除的数据未被修改时,删除所述需要删除的数据,在删除数据后从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据;
[0124] 在本发明的一种实施例中,若系统检测到该需要删除的数据is_modified参数为false,则表示该在cache中位于双向链表尾部节点的数据未被修改,无需将该未被修改的数据写回到s3对象文件;直接删除该需要删除的数据,从s3对象文件读取用户随机写的数据到cache,并在cache写入或修改用户随机写的数据。
[0125] 在本发明的一种实施例中,用户将s3对象文件挂载成本地文件系统且系统加载预置的cache。当用户触发针对挂载成本地文件系统的s3对象文件写操作时,即用户对本地文件系统的s3对象文件进行随机写时,在cache中修改或写入用户随机写的数据;并按照预设的时间间隔,将在cache中被修改的数据,回写到s3对象文件。cache的加载,使得数据缓存的空间增大,利用cache的随机写以及双向链表的存储方式,解决了用户无法对挂载到本地的文件系统中的数据进行随机写的问题。
[0126] 本发明还提供了一种文件系统访问装置,如图5所示,其示出了本发明的一种文件系统访问装置实施例的结构示意图,所述装置包括预置的高速缓冲存储器cache;本实施例的装置可以包括:
[0127] 数据读操作模块501,用于在触发针对挂载到所述文件系统的s3对象文件的读操作时,从所述cache中读取所述读操作对应的第一目标数据;
[0128] 数据写操作模块502,用于在触发针对挂载到所述文件系统的s3对象文件的写操作时,在所述cache中写入所述写操作对应的第二目标数据;
[0129] 数据回写模块503,用于按照预设时间间隔,将所述cache中写入的数据,回写到s3对象文件。
[0130] 在本发明的一种实施例中,所述装置还可以包括:
[0131] 第一目标数据处理模块,用于在从所述cache中读取所述读操作对应的第一目标数据之前,当所述cache中不存在所述第一目标数据时,从所述s3对象文件读取所述第一目标数据到所述cache;
[0132] 在本发明的一种实施例中,第一目标数据处理模块可以包括:
[0133] 第一目标数据缓存子模块,所述cache包括双向链表,用于在所述cache中,按照双向链表的节点顺序匹配所述第一目标数据的优先级,其中优先级顺序从双向链表头部节点至尾部节点依次降低;对优先级高的所述第一目标数据优先从所述s3对象文件读取到所述cache中。
[0134] 第一缓存空间处理子模块,用于当所述cache的缓存空间充足时,从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据;
[0135] 第一缓存空间处理子模块,还用于当所述cache的缓存空间不足时,删除所述cache中的数据,在删除数据后从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据。
[0136] 在本发明的一种实施例中,所述cache包括双向链表,第一缓存空间处理子模块可以包括:
[0137] 删除数据确定单元,用于确定在所述双向链表位于尾部节点的数据为需要删除的数据;
[0138] 第一删除数据处理单元,用于当所述需要删除的数据被修改时,将所述需要删除的数据写入s3对象文件,删除所述需要删除的数据,在删除数据后从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据;
[0139] 第一删除数据处理单元,还用于当所述删除的数据未被修改时,删除所述需要删除的数据,在删除数据后从所述s3对象文件读取所述第一目标数据到所述cache,并从所述cache中读取所述第一目标数据。
[0140] 在本发明的一种实施例中,所述装置还可以包括:
[0141] 第二目标数据处理模块,用于在所述cache中写入所述读操作对应的第一目标数据之前,当所述cache中不存在所述第二目标数据时,从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据。
[0142] 在本发明的一种实施例中,第二目标数据处理模块可以包括:
[0143] 第二目标数据缓存子模块,所述cache包括双向链表,用于在所述cache中,按照双向链表的节点顺序匹配所述第二目标数据的优先级,其中优先级顺序从双向链表头部节点至尾部节点依次降低;对优先级高的所述第二目标数据优先从所述s3对象文件读取到所述cache中。
[0144] 第二缓存空间处理子模块,用于当所述cache的缓存空间充足时,从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据;
[0145] 第二缓存空间处理子模块,还用于当所述cache的缓存空间不足时,删除所述cache中的数据,在删除数据后从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据。
[0146] 在本发明的一种实施例中,第二缓存空间处理子模块可以包括:
[0147] 删除数据确定单元,用于确定在所述双向链表位于尾部节点的数据为需要删除的数据;
[0148] 第二删除数据处理单元,用于当所述需要删除的数据被修改时,将所述需要删除的数据写入s3对象文件,删除所述需要删除的数据,在删除数据后从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据;
[0149] 第二删除数据处理单元,还用于当所述删除的数据未被修改时,删除所述需要删除的数据,在删除数据后从所述s3对象文件读取所述第二目标数据到所述cache,并在所述cache中写入所述第二目标数据。
[0150] 本发明实施例还提供了一种电子设备,如图6所示,包括处理器601、通信接口602、存储器603和通信总线604,其中,处理器601,通信接口602,存储器603通过通信总线604完成相互间的通信,
[0151] 存储器603,用于存放计算机程序;
[0152] 处理器601,用于执行存储器603上所存放的程序时,实现如上任一方法步骤:
[0153] 在触发针对挂载到所述文件系统的s3对象文件的读操作时,从所述cache中读取所述读操作对应的第一目标数据;
[0154] 在触发针对挂载到所述文件系统的s3对象文件的写操作时,在所述cache中写入所述写操作对应的第二目标数据;
[0155] 按照预设时间间隔,将所述cache中写入的数据,回写到s3对象文件。
[0156] 上述终端提到的通信总线可以是外设部件互连标准(Peripheral Component Interconnect,简称PCI)总线或扩展工业标准结构(Extended Industry Standard Architecture,简称EISA)总线等。该通信总线可以分为地址总线数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0157] 通信接口用于上述终端与其他设备之间的通信。
[0158] 存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
[0159] 上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现场可编程阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
[0160] 在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的文件系统访问方法。
[0161] 在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的文件系统访问方法。
[0162] 在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
[0163] 需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0164] 本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0165] 以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈