著录项信息
| 专利名称 | 一种网络文件系统及网络文件系统的访问方法 |
| 申请号 | CN201110373307.2 | 申请日期 | 2011-11-22 |
| 法律状态 | 授权 | 申报国家 | 中国 |
| 公开/公告日 | 2013-06-05 | 公开/公告号 | CN103139224A |
| 优先权 | 暂无 | 优先权号 | 暂无 |
| 主分类号 | H04L29/08 | IPC分类号 | H;0;4;L;2;9;/;0;8;;;H;0;4;L;2;9;/;0;6查看分类表>
|
| 申请人 | 腾讯科技(深圳)有限公司 | 申请人地址 | 广东省深圳市福田区振兴路赛格科技园2栋东403室
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
| 权利人 | 腾讯科技(深圳)有限公司 | 当前权利人 | 腾讯科技(深圳)有限公司 |
| 发明人 | 邓宇峰;李静 |
| 代理机构 | 广州三环专利代理有限公司 | 代理人 | 郝传鑫 |
摘要
本发明实施例公开了一种网络文件系统,该系统包括:本地文件缓存,用于保存用户最近一段时间内访问过的访问目标;本地文件数据库,用于保存用户已经访问过的所有访问目标,并通过预设的同步策略与远端服务器中保存的原始用户文件系统进行同步;远端服务器,用于保存原始用户文件系统;客户端,根据用户的操作指令,确定访问目标的位置时,先在本地文件缓存中查询,若未查询到,则在本地文件数据库中查询,若仍未查询到,则向远端服务器查询。本发明还公开了一种网络文件系统的访问方法,该系统及方法能够减少客户端与远端服务器的交互,提高文件访问的稳定性和访问速度。
1.一种网络文件系统,其特征在于,该系统包括:客户端、本地文件缓存、本地文件数据库和远端服务器;
所述客户端,用于根据用户的操作指令,确定所述操作指令中访问目标的位置;确定访问目标位置时,先在所述本地文件缓存中查询,若未查询到,则在所述本地文件数据库中查询,若仍未查询到,则向所述远端服务器查询;
所述本地文件缓存,用于保存用户最近一段时间内访问过的访问目标,所述本地文件缓存以链表方式维护整个文件系统的索引,所述访问目标在链表中以文件节点代表;其中,根节点下的所有子节点的指针保存在哈希表中,哈希表中包括所有入口域的指针,每个入口域链入对应文件节点的哈希域;文件节点通过其哈希域链入哈希表中相应的入口域,形成双向链表结构;每个文件节点的指针由该文件节点的父节点指针及该文件节点的名称计算的哈希值表示;所述本地文件数据库,用于保存用户已经访问过的所有访问目标,并通过预设的同步策略与远端服务器中保存的原始用户文件系统进行同步,使访问目标与原始用户文件系统中的相关内容保持一致,所述相关内容为原始用户文件系统中与所述访问目标相对应的内容;
远端服务器,通过网络与所述客户端连接,用于保存原始用户文件系统。
2.如权利要求1所述的网络文件系统,其特征在于,所述本地文件缓存中维护一文件系统索引,供所述客户端查询访问目标在缓存 中的具体位置。
3.如权利要求1或2所述的网络文件系统,其特征在于,所述本地文件数据库以数据库格式保存访问目标,使所述客户端通过数据库提供的检索方法查询访问目标在数据库中记录的位置。
4.如权利要求1所述的网络文件系统,其特征在于,所述本地文件缓存通过最近最少使用LRU算法对所述文件节点进行淘汰。
5.如权利要求4所述的网络文件系统,其特征在于,所述本地文件缓存维护的文件系统索引中,每个文件节点包含LRU域,通过这些LRU域相互链入,形成LRU链表;
当文件节点被访问时,引用计数加1;当访问结束时,计数减1;对于引用计数为0的文件节点,会被加入LRU链表,当所述本地文件缓存占用的内存空间超过预设值时,从LRU链表中删除一个文件节点进行回收,同时将回收的文件节点的具体数据保存到本地文件数据库。
6.如权利要求4所述的网络文件系统,其特征在于,所述本地文件缓存维护的文件系统索引中,每个文件节点包含用于反映文件节点之间父子关系的指针域;
其中子节点通过其孩子域链入父节点的子目录链表;子节点通过 父域向上访问其父节点的数据域。
7.如权利要求4所述的网络文件系统,其特征在于,所述客户端将访问目标的路径分解成多个文件节点;从最上级文件节点开始,根据该文件节点字符串和该文件节点的父节点指针计算哈希值,利用该哈希值从哈希表中查找到该文件节点的指针;再用找到的该文件节点指针与该文件节点的下一级子节点的字符串计算哈希值,利用该哈希值从哈希表中查找到该文件节点的下一级子节点的指针;如此循环直到所有的文件节点都被找到,最后找到的文件节点的指针即为访问目标在内存中的位置。
8.一种网络文件系统的访问方法,其特征在于,该方法包括:
根据用户的操作指令,确定所述操作指令中访问目标的位置时;
先在保存有用户最近一段时间内访问过的访问目标的本地文件缓存中查询,通过本地文件缓存中维护的文件系统索引,查询访问目标在缓存中的具体位置,所述索引以链表方式维护,所述访问目标在链表中以文件节点代表;其中,根节点下的所有子节点的指针保存在哈希表中,哈希表中包括所有入口域的指针,每个入口域链入对应文件节点的哈希域;文件节点通过其哈希域链入哈希表中相应的入口域,形成双向链表结构;每个文件节点的指针由该文件节点的父节点指针及该文件节点的名称计算的哈希值表示;
若未查询到,则在保存有用户已经访问过的所有访问目标,且通 过预设的同步策略与远端服务器中保存的原始用户文件系统进行同步,使保存的访问目标与原始用户文件系统中的相关内容保持一致的本地文件数据库中查询,所述相关内容为原始用户文件系统中与所述访问目标相对应的内容;
若仍未查询到,则向通过网络与客户端连接,保存有原始用户文件系统的远端服务器查询。
9.如权利要求8所述的网络文件系统的访问方法,其特征在于,所述在本地文件数据库中查询,包括:
通过所述本地文件数据库提供的检索方法,查询以数据库格式保存的访问目标,在数据库中记录的位置。
10.如权利要求8所述的网络文件系统的访问方法,其特征在于,所述文件节点通过最近最少使用LRU算法进行淘汰。
11.如权利要求10所述的网络文件系统的访问方法,其特征在于,所述淘汰包括:
每个文件节点包含一个LRU域,通过这些LRU域相互链入,形成LRU链表;
当文件节点被访问时,引用计数加1;当访问结束时,计数减1;对于引用计数为0的文件节点,会被加入LRU链表,当所述本地文件缓存占用的内存空间超过预设值时,从LRU链表中删除一个文件 节点进行回收,同时将回收的文件节点的具体数据保存到本地文件数据库。
12.如权利要求8所述的网络文件系统的访问方法,其特征在于,所述每个文件节点进一步包含用于反映文件节点之间父子关系的指针域;
其中子节点通过其孩子域链入父节点的子目录链表;子节点通过其父域向上访问其父节点的数据域。
13.如权利要求8所述的网络文件系统的访问方法,其特征在于,通过本地文件缓存中维护的文件系统索引,查询访问目标在缓存中的具体位置包括:
将访问目标的路径分解成多个文件节点;从最上级文件节点开始,根据该文件节点字符串和该文件节点的父节点指针计算哈希值,利用该哈希值从哈希表中查找到该文件节点的指针;再用找到的该文件节点指针与该文件节点的下一级子节点的字符串计算哈希值,利用该哈希值从哈希表中查找到该文件节点的下一级子节点的指针;如此循环直到所有的文件节点都被找到,最后找到的文件节点的指针即为访问目标在内存中的位置。
一种网络文件系统及网络文件系统的访问方法\n技术领域\n[0001] 本发明涉及网络通信技术领域,特别涉及一种网络文件系统及网络文件系统的访问方法。\n背景技术\n[0002] 网络文件系统,如云存储系统,是指用户文件存储在远端服务器,客户端通过网络访问远端服务器,进行文件操作的文件系统。\n[0003] 当前的网络文件系统一般采取简单的一级结构,即客户端直接与远端服务器交互,客户端对文件的操作指令会通过网络传输到远端服务器,由远端服务器响应并执行,例如客户端需要读取文件时,将直接向远端服务器发送文件的读取指令,从远端服务器查找到相应的目标文件后,拉取相应的文件数据。\n[0004] 对于现有的网络文件系统,每次对文件的操作都需要直接访问远端服务器,增加了服务器的处理负担,且网络异常时不能保证文件能顺利访问,文件访问的稳定性差;同时,受网络传输速度的限制,无法达到令人满意的文件访问速度。\n发明内容\n[0005] 有鉴于此,本发明提供了一种网络文件系统及网络文件系统的访问方法,能够减少客户端与远端服务器的交互,并提高文件访问的稳定性和访问速度。\n[0006] 为达上述目的,本发明的技术方案具体是这样实现的:\n[0007] 一种网络文件系统,该系统包括:客户端、本地文件缓存、本地数据库和远端服务器;\n[0008] 所述客户端,用于根据用户的操作指令,确定所述操作指令中访问目标的位置;确定访问目标位置时,先在所述本地文件缓存中查询,若未查询到,则在所述本地文件数据库中查询,若仍未查询到,则向所述远端服务器查询;\n[0009] 所述本地文件缓存,用于保存用户最近一段时间内访问过的访问目标;\n[0010] 所述本地文件数据库,用于保存用户已经访问过的所有访问目标,并通过预设的同步策略与远端服务器中保存的原始用户文件系统进行同步,使访问目标与原始用户文件系统中保持一致;\n[0011] 远端服务器,通过网络与所述客户端连接,用于保存原始用户文件系统。\n[0012] 一种网络文件系统的访问方法,该方法包括:\n[0013] 根据用户的操作指令,确定所述操作指令中访问目标的位置时;\n[0014] 先在保存有用户最近一段时间内访问过的访问目标的本地文件缓存中查询;\n[0015] 若未查询到,则在保存有用户已经访问过的所有访问目标,且通过预设的同步策略与远端服务器中保存的原始用户文件系统进行同步,使保存的访问目标与原始用户文件系统中保持一致的本地文件数据库中查询;\n[0016] 若仍未查询到,则向通过网络与所述客户端连接,保存有原始用户文件系统的远端服务器查询。\n[0017] 由上述技术方案可见,本发明的这种网络文件系统及网络文件系统的访问方法可以将用户对网络文件系统的访问最大限度地控制在客户端本地完成,从而避免了网络条件对网络文件系统的影响,提高文件访问的稳定性及访问速度。\n附图说明\n[0018] 图1为本发明实施例的网络文件系统结构示意图;\n[0019] 图2为本发明实施例本地文件缓存维护的链表式文件系统索引示意图;\n[0020] 图3为本发明实施例本地文件缓存维护的链表式文件系统索引中LRU链表示意图;\n[0021] 图4为本发明实施例本地文件缓存维护的链表式文件系统索引中,父子关系链表示意图。\n具体实施方式\n[0022] 为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。\n[0023] 本发明主要是在网络文件系统的客户端和远端服务器之间增加了客户端本地的文件缓存和客户端本地的文件数据库;客户端本地的文件数据库保存用户已经访问过的所有访问目标;客户端本地文件缓存保存最近一段时间内用户访问过的访问目标;进行文件访问时,先查询客户端本地文件缓存,如果未命中,则查询客户端本地文件数据库,若仍未命中,再访问远端服务器;同时,通过同步策略保持客户端文件数据库保存的访问目标与远端服务器保存的原始用户文件系统中一致。本发明可以使用户对网络文件的访问尽可能地发生在客户端本地,从而减少客户端与远端服务器的交互,降低对网络的依赖,提高网络文件访问的稳定性和访问速度。\n[0024] 图1为本发明实施例的网络文件系统结构示意图,如图1所示,该系统包括:客户端101、本地文件缓存102、本地文件数据库103和远端服务器104;\n[0025] 客户端101,用于根据用户的操作指令,如创建,读取,修改等,确定所述操作指令中,访问目标的位置。\n[0026] 其中,访问目标是操作指令中指定的需要进行操作的目标文件或者目录。\n[0027] 对于不同的操作指令,虽然具体操作不同,但是执行操作指令之前都需要对访问目标进行查询,确定访问目标的位置,才能进行后续的操作指令执行及响应,那么,如果访问目标在客户端101本地,而不是网络远端的服务器,即可以在客户端101本地进行文件操作,而不需要访问远端服务器104。\n[0028] 因此,在本实施例中,客户端101确定访问目标位置时,会先在本地文件缓存102中查询,如果查询到,则确定访问目标的位置在本地文件缓存102中;否则,在本地文件数据库103中查询,如果查找到,则确定访问目标的位置在本地文件数据库103中,若没有查找到,则最后再向远端服务器104查询。\n[0029] 本地文件缓存102,用于保存用户最近一段时间内访问过的访问目标;\n[0030] 本地文件缓存102可以位于客户端101本地的内存、硬盘或其它存储设备中(为提高访问速度,以内存为佳);另外,本地文件缓存102中需要维护一个文件系统索引,供客户端101查询访问目标在缓存中的具体位置。\n[0031] 本地文件数据库103,用于保存用户已经访问过的所有访问目标,并通过预设的同步策略与远端服务器104中保存的原始用户文件系统进行同步,使访问目标与原始用户文件系统中保持一致,具体同步策略任意,这个同步过程可以采用后台方式进行。\n[0032] 本地文件数据库103可以位于客户端101本地的硬盘或其它非易失存储设备中,以数据库格式保存访问目标,使客户端101可以通过数据库提供的检索方法查询访问目标在数据库中记录的位置。\n[0033] 远端服务器104,通过网络与客户端101连接,用于保存原始用户文件系统,并与本地文件数据库103中保存的访问目标进行同步,使访问目标与原始用户文件系统中保持一致。\n[0034] 远端服务器104中保存的是原始的用户文件,即最终的正式用户数据,本地文件数据库103中保存的用户已经访问过的所有访问目标,相当于原始用户文件系统的一个子集,是原始用户文件系统中的部分用户文件的副本;而本地文件缓存102中保存的用户最近一段时间内访问过的访问目标,又相当于本地文件数据库103中保存的用户已经访问过的所有访问目标的一个子集,也是原始用户文件系统中的部分用户文件的副本;\n[0035] 另外,在本地文件缓存102中维护的文件系统索引可以采用链表形式进行管理(链表形式一般用于本地文件缓存102位于客户端本地内存中的情况),也可以采用数据库形式(如本地文件缓存102位于客户端本地硬盘中的情况),或者其它自定义的索引方式;\n对于链表形式,具体链表管理方式、包含的指针域等任意,下面举一采用链表形式为护文件系统索引的具体例子。\n[0036] 如图2所示,每一个访问目标,即一个单一的文件或目录,在链表里以一个文件节点来代表,文件节点在内存中的位置通过指针来指示。整个文件系统的索引从根目录开始,图2中,pRoot为根节点指针,根节点下的所有子节点的指针保存在哈希表中,pHashTable为哈希表的指针,客户端101通过pHashTable即可找到哈希表在内存中的位置;lelru为文件节点的最近最少使用(lru)域(后面详细介绍);\n[0037] 其中,哈希表中包括所有入口(entry)域的指针,每个entry域链入对应文件节点的哈希(leHash)域;文件节点通过其leHash域链入哈希表中相应的entry域,形成双向链表结构,具体每个文件节点在哈希表中的位置,由该节点的父节点指针及该节点的文件名称(文件名或者目录名)决定,例如令该文件节点的指针由该文件节点的父节点指针及该文件节点的名称计算的哈希值表示。\n[0038] 受到内存容量的限制,本地文件缓存102中可能无法保存用户访问过的所有访问目标,因此,本地文件缓存102中维护的文件节点不能无限增加,因此需要采用最近最少使用(LRU)算法进行文件节点的淘汰,只保存最近一段时间内用户访问过的访问目标,以减少本地文件缓存102对内存的占用。\n[0039] 在本例中,是以LRU链表实现,如图3所示,每个文件节点包含一个LRU域(以lelru表示),通过这些LRU域相互链入,形成LRU链表。某个文件节点是否加入LRU链表,可以通过引用计数决定,当某文件节点被访问时,引用计数加1;当访问结束时,计数减1;\n这样可以判断节点是否使用完毕;对于使用完毕的节点(引用计数为0),会被加入LRU链表,等待回收,当本地文件缓存102占用的内存空间超过预设值时,将启动回收过程,删除LRU链表中的一个文件节点,同时将回收的文件节点的数据域内容,即具体访问目标(文件或目录)保存到本地文件数据库103。如果在启动回收之前文件节点再次被引用,该文件节点会从LRU链表中移除。\n[0040] 具体地,如需要在本地文件缓存102中增加一个新的文件节点,此时,若本地文件缓存102占用空间已超过预设值,例如内存容量的90%(可配置),则从LRU链表中移除一个已有文件节点作为新节点返回;否则,从内存池中分配一新节点,并挂入本地文件缓存\n102中,具体移除哪个文件节点任意,可以随机选取,也可以根据一定规则选取。\n[0041] 另外,为了能快速查找文件节点,根据文件节点之间的树状关系进行查询,可以进一步在文件节点中增加用于反映文件节点之间父子关系的指针域,例如图4所示,子节点通过孩子(leChild)域链入父节点的子目录(leSubDirs)链表;子节点通过其父(pParent)域可以向上访问其父节点的数据域中的具体数据。\n[0042] 通过上述文件系统索引,即可实现访问目标的快速查找,例如查找路径为\网盘\我的文档\readme.txt”的文件的查找过程为:\n[0043] 首先根据分隔符“\”将路径分解成多个文件节点,即“网盘”、“我的文档”、“readme.txt”;从最上级节点开始,根据该节点字符串和该节点的父节点指针计算哈希值,这个哈希值对应该节点在哈希表中的指针,利用该哈希值从哈希表中查找到该节点的指针;再用找到的该节点指针与该节点的下一级子节点的字符串计算哈希值,利用该哈希值从哈希表中查找到该节点的下一级子节点的指针;如此循环直到所有的节点都被找到,最后找到的节点即为所要查询的文件节点,该文件节点的指针即为访问目标在内存中的位置。\n[0044] 具体地,先根据根节点指针和“网盘”字符串计算其hash值,根据该hash值找到“网盘”节点的指针,再用“网盘”节点的指针与“我的文档”字符串计算hash值,并找到“网盘\我的文档”节点的指针,根据“网盘\我的文档”节点的指针与“readme.txt”字符串计算hash值,并找到“\网盘\我的文档\readme.txt”节点的指针,从而根据该指针找到相应的readme.txt文件。\n[0045] 另外,为避免数据冲突,在本地文件缓存102中还可以引入文件锁,包括读锁和写锁;在对访问目标执行某操作指令之前,尝试对访问目标加锁,锁的类型由操作指令类型决定;例如读取指令为读锁,修改和创建指令为写锁等;如加锁请求失败则表明访问目标正在被使用,并提示用户;成功则访问目标被锁定,在本次操作指令完成之前,无法被其他操作指令访问。\n[0046] 另外,文件系统不允许相同路径内的同名文件、同名子目录的存在,因此还需要引入重名检测机制,在执行涉及新增访问目标、移动访问目标或修改访问目标名称等操作的时候,要根据新的名称进行查找;如果找到则表示有重名;当前操作不能继续,并提示用户。\n[0047] 另外,对于访问目标的创建操作,需要通过网络在远端服务器104执行,但由于网络操作有时间上的延迟,所以需要在本地文件缓存102创建一个临时文件节点来表示这个访问目标正在被创建;这样其它并发的操作想创建同样名称的访问目标就会被重名检测机制打断;如果远端服务器104上的访问目标创建成功,则本地文件缓存102创建的临时文件节点会变成有效的文件节点;否则,撤销临时文件节点并提示用户创建失败。\n[0048] 对于本地文件数据库103,其可以采用任何数据库文件格式保存用户访问过的访问目标,具体保存方式不是本发明讨论的重点,这里不再赘述,只介绍一下在本地文件数据库103中查询访问目标的具体方法,例如需要查找“\网盘\我的文档”下的所有文件;具体方法如下:\n[0049] 因为“\网盘”是根目录,没有父节点,所以首先查找父节点记录为空,名称为“网盘”的数据库记录RowId1,然后查找父节点记录为RowId1,名称为“我的文档”的数据库记录RowId2,之后再依次查找RowId2中所有的记录条目即可。\n[0050] 其中,RowId为文件节点在数据库文件中的记录号,每个文件节点对应唯一一个记录号;对于一个目录下的子文件来说,子文件节点的记录中保存了其父节点的记录号,因此可以根据父节点的记录号加上子文件的名字来进行查找,得到子文件或子目录的记录。\n[0051] 由上述的实施例可见,本发明的这种网络文件系统及网络文件系统的访问方法可以将用户对网络文件系统的访问最大限度地控制在客户端本地完成,从而避免了网络条件对网络文件系统的影响,提高文件访问的稳定性及访问速度。\n[0052] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
法律信息
- 2016-01-27
- 2013-09-18
实质审查的生效
IPC(主分类): H04L 29/08
专利申请号: 201110373307.2
申请日: 2011.11.22
- 2013-06-05
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2011-04-13
|
2010-11-29
| | |
2
| |
2008-02-13
|
2007-09-11
| | |
3
| | 暂无 |
2002-06-07
| | |
4
| |
2009-09-23
|
2008-03-19
| | |
5
| |
2007-07-11
|
2006-11-24
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |