一种文件版本控制系统及其方法

文档序号:6622301阅读:369来源:国知局
一种文件版本控制系统及其方法【专利摘要】本发明公开了一种文件版本控制系统,包括本地库和控制模块,所述本地库包括工作区、元数据库、版本库,所述工作区用于存放本系统管理的文件,所述元数据库用于存放文件树、版本树、版本列表,所述版本库用于存放工作区中版本文件;所述控制模块包括抽象文件系统接口模块、文件操作模块、元数据访问模块、恢复管理器模块、工作区监视器模块;本发明将文件加密后备份到服务器,可防止服务器端的隐私泄密;自动维护文件的版本信息,方便用户对文件误操作后恢复到文件历史版本。此外,文件树、版本树、版本列表使用表格存储,再将表格转换为键值对存储到磁盘文件,表格中单元格的修改、删除操作通过写入新值实现,避免了磁盘的随机访问,减少磁盘I/O,减少网络开销。【专利说明】一种文件版本控制系统及其方法【
技术领域
】[0001]本发明属于计算机网络应用【
技术领域
】,具体涉及一种用于对文件进行版本控制和加密远程备份的方法。【
背景技术
】[0002]随着网络技术的发展,很多网络公司将其服务器的硬盘或者硬盘阵列的一部分容量分给注册用户使用,即网络硬盘(网盘)的问世,由于网络硬盘具有随时随地存取、自动远程备份、可靠等优点,所以受到了越来越多的用户的青睐。[0003]然而,网盘供应商提供的客户端存取文件时都是明文存取的,文件安全日渐成为用户担心的首要问题,一方面,大部分网盘提供商未提供版本控制功能,如果文件发生误操作后就会造成文件不能恢复到误操作之前的状况;另一方面,有些网盘供应商提供文件历史版本恢复服务,由于功能较弱,致使用户不能自定义文件版本。【
发明内容】[0004]针对现有技术中所出现的问题,本发明的目的是提供了一种对文件进行版本控制、加密远程备份的系统和方法。[0005]本发明的系统的技术方案为:[0006]-种文件版本控制系统,包括本地库和控制模块,所述本地库包括工作区、元数据库、版本库,所述工作区用于存放本系统管理的文件,所述元数据库用于存放文件树、版本树、版本列表,所述版本库用于存放工作区中版本文件;所述控制模块包括抽象文件系统接口模块、文件操作模块、元数据访问模块、恢复管理器模块、工作区监视器模块;所述抽象文件系统接口模块提供统一的文件访问接口,所述文件操作模块通过所述抽象文件系统接口提供文件操作服务,所述元数据访问模块提供对元数据的访问服务,所述恢复管理器模块用于维护数据之间的一致性,所述工作区监视器模块用于监视工作区内的文件变化,并根据文件变化类型触发对应的事件处理。[0007]进一步,还包括服务器,所述服务器用于备份所述本地库中的元数据库和版本库;所述控制模块还包括一个用于同步服务器与所述本地库之间的元数据库和版本库的同步管理器模块。[0008]进一步,所述文件树、版本树、版本列表存储在表格中,所述表格每行有一个唯一标识符,所述表格的每个存储单元可以存储多个值,每个所述值有一个时间戳。[0009]进一步,所述文件树的节点表示普通文件或目录,每个节点有唯一标识符key,所述节点到根节点的路径表示与所述节点对应的文件相对于工作区的路径;所述文件树中每个表示普通文件的节点都有一个版本树相对应,每个所述版本树有唯一的id标识,所述版本树中每个节点表示文件的一个版本。[0010]本发明的方法的技术方案,一种文件版本控制方法,包括以下步骤:[0011]1)初始化本地库中的工作区、元数据库、版本库;所述元数据库用于存放文件树、版本树、版本列表;[0012]2)监视所述工作区中的文件变化,将变化后的版本文件存储到版本库中,将所述工作区中的文件信息转换并存储于文件树,将所述工作区中的文件版本信息转换并存储于所述版本树,将版本库中的版本文件信息转换并存储于版本列表中;[0013]3)将所述文件树、版本树、版本列表转换为键值对存储格式,并保存到元数据库中的元数据文件内;[0014]4)将所述本地库中的元数据库和版本库加密后备份到服务器。[0015]进一步,其特征在于,执行所述步骤1)_4)的过程中定期检查本地库与服务器的元数据库和版本库的一致性,若不一致则进行同步。[0016]进一步,所述步骤3)将所述文件树、版本树、版本列表转换为键值对存储格式的步骤为:[0017]3-1)将所述文件树、版本树、版本列表转换为表格存储方式,所述表格由行和列组成,所述行和列确定一个存储单元cell,所述存储单元cell可以存放多个值,所述每个值带一个时间戳;[0018]3-2)将所述存储单元cell中的每一个值{value,timestamp}转换为{rowkey#column#timestamp#type,value}键值对存储;其中rowkey为存储单兀cell所在行的rowkey,column为存储单元cell所在列的column,type表示所述键值对是数据还是一个删除标志;[0019]3-3)将所述键值对写入操作日志,然后将键值对存入内存中,当所占内存空间达到阈值时,进行minorcompact操作;[0020]3-4)在minorcompact操作中,仓ij建一个新的元数据文件,将内存中的键值对按键有序写入新创建的元数据文件中。[0021]进一步,所述同步时对所述元数据文件进行mergecompact操作,所述mergecompact操作为将本地新增的元数据文件合并为一个新的元数据文件,所述新的元数据文件的主版本号为现有最大主版本号加1,次版本号为0。[0022]进一步,所述同步时当元数据文件过多时进行majorcompact操作,所述majorcompact操作为将版本号较小且次版本号为0的元数据文件合并成一个新的元数据文件,所述新元数据文件的版本号为被合并的元数据文件的最大版本号,所述新的元数据文件包含被合并的元数据文件的所有有效的键值对。[0023]本发明的有益效果为:与现有技术相比,该系统中的远程备份适用场合广泛,不依赖于具体的服务,可以是任意一个网盘服务、ftp服务器、samba服务器或其他文件服务;当文件通过用户已知的加密算法加密后备份到服务器,可以防止服务器端文件被窃取;自动维护文件的版本信息,方便用户对文件误操作后恢复到文件历史版本。此外,文件树、版本树、版本列表使用表格存储,再将表格转换为键值对存储到磁盘文件,表格中单元格的修改、删除操作通过写入新值实现,避免了磁盘的随机访问,减少磁盘1/0,减少网络开销。【专利附图】【附图说明】[0024]图1本发明的系统结构示意图;[0025]图2本发明的客户端体系结构示意图;[0026]图3本发明的文件树FileTree结构示意图;[0027]图4本发明的版本树VersionTree结构示意图;[0028]图5本发明的客户端存储的数据图;[0029]图6本发明的服务器上存储的数据图;[0030]图7本发明的元数据两层存储结构示意图;[0031]图8本发明的文件树FileTree在表格中的存储格式;[0032]图9本发明的版本树VersionTree在表格中的存储格式;[0033]图10本发明的文件新增处理流程图;[0034]图11本发明的文件更新处理流程图;[0035]图12本发明的同步管理器工作流程图。【具体实施方式】[0036]下面结合附图对本发明作进一步详细描述。[0037]图1为本发明的系统结构图,系统由服务器和客户端组成,服务器提供远程文件系统服务,可以是samba服务器、ftp服务器、网盘服务等;客户端为安装在用户电脑上的程序,用户安装客户端程序,指定一个目录作为工作区,配置服务器地址、用户名、密码等信息即可使用该系统。[0038]系统可供多个用户同时使用,每个用户可以有多个客户端。用户将需要系统维护的文件存放于工作区内,客户端自动维护工作区内的文件版本,并将文件版本加密备份到服务器上。用户的其他客户端会阶段性的检测服务器上有没有新的文件,若有新的文件则下载更新,从而同一用户的多个客户端的工作区保持最终一致性,所述最终一致性为一个工作区内的文件变化经过一段时间最终会同步至同一用户的其他客户端。[0039]图2为客户端结构,包括工作区监视器、同步管理器、恢复管理器、文件操作、元数据访问、抽象文件系统接口等6个模块;本地库位于用户电脑上,由工作区、元数据库、版本库组成,所述工作区用于存放本系统管理的文件,所述元数据库用于存放文件树、版本树、版本列表,所述版本库用于存放工作区中版本文件。[0040]抽象文件系统接口模块为本地文件系统以及服务器提供统一的文件访问接口。所述接口分为两类:处理文件和目录的接口、读写文件数据的接口。处理文件和目录的接口用于创建、删除文件或目录、读取文件和目录的创建时间、最后修改时间等元数据。当读取的文件或目录位于本地文件系统时,该模块直接调用本地文件系统的接口读取数据。当文件或目录位于服务器时,通过网络协议读取数据。[0041]文件操作模块通过抽象文件系统接口提供本地库和服务器上的文件访问服务。本系统具有多用户多客户端的特性,服务器上会同时存在多个用户的数据。文件操作模块使上层组件不需要知道当前用户的情况下操作当前用户在本地以及服务器上的文件和目录。[0042]文件树、版本树、版本列表等元数据保存在元数据库内的元数据文件中,元数据访问组件提供对元数据的读写操作:将元数据文件读入内存进行读写操作,将更新后的元数据写入磁盘。[0043]恢复管理器模块在客户端启动时检测并处理本地库中数据不一致问题;在客户端运行过程中,检测并处理服务器上的数据不一致。所述数据不一致指工作区、文件树、版本树、版本列表、版本库之间的数据不一致。另外,在客户端运行过程中,恢复管理器周期性删除冗余数据。所述冗余数据为不再需要的数据,例如一个文件被删除了一定时间后,文件树中表示该文件的节点即为冗余数据。[0044]同步管理器模块负责元数据库、版本库与服务器之间的数据同步。用户在某一个客户端上对工作区文件所做的改动会被写入到元数据库和版本库中,从而被同步管理器同步到服务器端,随后该用户的其他客户端的同步管理器将服务器上变化的数据同步到各自本地库。[0045]工作区监视器模块监视工作区的文件变化,,并根据文件变化类型触发对应的事件处理。使用文件树记录工作区中的文件,用版本树记录文件的版本历史,将文件的新增版本复制到版本库中,并使用版本列表记录版本库中的版本。[0046]图3给出了filetree的结构,为了方便描述,使用file表示一个文件,file可以被编辑,每次编辑保存在磁盘上的文件称为versionfile,versionfile是file在某一时刻的快照,工作区workarea中的文件都是versionfile;图3中的file被组织成文件树filetree,树中的节点路径反应了文件相对于workarea的路径,workarea中文件夹与文件夹下文件关系在filetree中为父节点与子节点的关系,filetree中的节点有两种类型:文件和目录,workarea中的内容是filetree的一个快照。[0047]图4给出了版本树versiontree的结构,更新file会产生版本文件versionfile,软件使用versiontree记录file的版本变化,一个节点表示一个版本文件,file和versiontree--对应;图4为一个file的versiontree:用户创建file时,软件创建一个与之对应的versiontree,根节点versionfile1是file创建时的版本,用户更新versionfile1后产生versionfile2,更新versionfile2后产生versionfile3,再次更新versionfile1产生versionfile4,versiontree中的父子关系与versionfile的衍生关系对应。[0048]此外,versionfile有两种类型:临时类型和永久类型,临时类型是工作区监视器自动标记的版本,用于在用户对文件误操作后进行文件恢复;永久类型是用户标记的版本,除非用户手动删除,本发明不会删除文件的永久类型的版本。工作区监视器将文件每一次更新后的内容作为一个临时版本记录在versiontree中,默认情况下会保存最近七天的每天最后一个临时版本,最近一天的最新10个临时版本。两种类型的版本文件都保存在版本库versionrepository中。[0049]本发明使用版本列表versionlist记录版本库versionrepository中的版本文件,versionlist中每一个节点记录一个版本文件的SHA1哈希值、被所有版本树versiontree中节点的引用次数之和、该版本文件的未加密形式在versionrepository中是否存在、该版本文件的加密形式在versionrepository中是否存在。[0050]图5为本地库中的数据组成。工作区是用户指定的一个目录,用于存放需要本系统管理的文件。元数据库metarepository里包含许多元数据文件,用于存放键值对,即本发明中的文件树filetree、版本树versiontree、版本列表versionlist。版本库versionrepository用于存放工作区中文件的版本。[0051]图6为服务器端保存的文件和数据。服务器用于备份客户端的元数据库metarepository和版本库versionrepository。当多个用户共享服务器时,各个用户之间的数据互不影响。[0052]文件树filetree中的节点表示文件或目录,其内部是一个键值对序列,保存与文件或目录相关的信息。其中一个键值对("key",keyvalue)用于标识该节点,,每个节点有唯一标识符key,即keyvalue在filetree中是唯一的,由文件创建时的路径和时间组合而成。此外每个节点都包含一个name属性,键值对("name",namevalue)用于表示文件或目录的名称。所述节点到根节点的路径表示与所述节点对应的文件相对于工作区的路径。节点相对于工作区的路径由根节点至该节点路径上的节点的name组成。节点可以通过相对路径进行访问,或通过key访问。当节点表示文件时,节点内部的键值对存放文件的name、版本树id、当前版本、仓ij建时间、最后一次修改时间、删除时间、父节点key、该节点的key。[0053]当节点表示目录时,节点内部的键值对存放目录的name、创建时间、最后一次修改时间、父节点key、所有子节点的key列表、该节点的key。[0054]所述文件树中每个表示普通文件的节点都有一个版本树相对应,每个版本树versiontree都有一个唯一的id,由该版本树对应的文件的路径和创建时间组合而成。versiontree节点内部是一个键值对序列,所述版本树中每个节点表示文件的一个版本,序列中的每个键值对分别保存该版本引用的版本文件SHA1哈希值digest、版本类型、父节点digest、创建时间。同一个versiontree中,每个节点的digest都是唯一的。所述版本类型有两种:临时版本和永久版本。临时版本由工作区监视器标识、永久版本由用户标识。[0055]版本列表versionlist用于记录versionrepository中versionfile信息的列表。versionlist中一个节点表示一个versionfile,节点内部是一个键值对序列,用于存放versionfile的digest、引用计数、versionfile创建时间、未加密形式在versionrepository中是否存在、加密形式在versionrepository中是否存在。所述digest为versionfile的SHA1哈希值。[0056]filetree中节点的key由对应文件的路径和创建时间组合而成,versiontree的id由对应文件的路径和创建时间组合而成。因此,由filetree中的节点可以找到文件对应的versiontree由versiontree也可以找到filetree中对应的节点。versiontree中节点由引用的版本文件digest标识,versionlist中的节点由对应的版本文件digest标识。因此,versiontree和versionlist中的节点存在对应关系。版本文件存储在versionrepository中的文件名有该版本文件的digest和类型组合而成。所述类型有两种:加密和未加密。[0057]filetree、versiontree、versionlist和versionrepository中的数据和文件相互协作、共同维护工作区workarea中的文件,它们之间存在以下一致性约束:[0058]l)workarea中的文件在filetree中均有对应的节点,且节点的name、当前版本属性与workarea中对应的文件一致;[0059]2)filetree中的所有未被删除的file的当前文件在workarea中均有对应的文件存在;filetree中所有file均有对应的versiontree,以及versiontree中对应的当前版本节点。[0060]3)versiontree中所有版本文件在versionlist均存在;versiontree表不的file在filetree中存在。[0061]4)versionlist中的各个节点引用计数等于versiontree的引用之和;versionlist中记录的versionfile在versionrepository中以加密或者未加密的形式存在。[0062]5)versionrepository中的版本文件在versionlist均有记录。[0063]工作区workarea中文件被删除,filetree中该文件对应的节点记录文件被删除的时间。文件被删除一段时间后,filetree中对应节点以及文件对应的versiontree被删除,versionlist中所有被该versiontree中的节点引用的版本文件节点的引用计数减1。若版本文件的引用计数为0时,该版本文件被删除。[0064]图7为元数据存储层次结构,共分为两层:Key_Value层和Table层。Key-Value层在文件的基础上提供键值对存储服务,Table层在Key-Value层基础上提供表格存储服务。所述文件包括位于磁盘上的元数据文件和内存文件,图中的file1,file2,…,fileη为磁盘文件,immutablefile和memfile为内存文件。元数据文件可以有多个,而内存文件只有两个。[0065]表格由若干行组成,所述表格每行有一个唯一标识符,所述表格的每个存储单元可以存储多个值,每个所述值有一个时间戳。每行通过rowkey标识,每行包含很多列column。行和列都可以增加。rowkey和column可以确定一个存储单兀cell。cell中可以存放多个值,每一个值都有一个时间戳。更新cell中数据操作,不会立即删除原有数据,而是将新值加上时间戳放入cell中。读取cell时,只会读取cell的最新值。删除cell数据时,向cell中存放一个带有时间戳的删除标记。cell中的每一个值转换成键值对(rowkey,column,timestamp)->value交由Key-Value层存储。[0066]Key-Value层使用多个元数据文件和两个内存文件存储keyvalue。Key-Value层写入keyvalue时,首先将keyvalue写入日志,然后再将keyvalue写入memfile。当memfile内存占用量达到限制后,进行minorcompact操作。所述minorcompact操作为,将memfile转为immutablefile,并创建一个新的memfile和一个元数据文件。新的元数据文件用于将immutablefile中的内容写入其中,新的memfile用于写入新的keyvalue。[0067]每个元数据文件都有一个版本号,格式为:主版本号_次版本号。版本号大小比较方式为,先按主版本号比较大小,如果主版本号一样则比较次版本号。版本号较小的元数据文件,其存放的键值对的timestamp比版本号大的timestamp小。minorcompact操作中创建的元数据文件的主版本号为当前客户端的最大版本号的主版本号,次版本号为最大版本号的次版本号加1。若客户端没有元数据文件,则默认最大版本号的主版本号和次版本号均为〇。[0068]客户端与服务器端元数据文件集合的差称为新增文件,同步管理器进行同步时,对新增文件进行mergecompact操作。所述mergecompact操作为,创建一个新的元数据文件,将新增文件中的数据进行多路归并合并写入其中,然后同步管理器删除新增文件,将创建的元数据文件上传至服务器。mergecompact操作中创建的元数据文件的主版本号为当前客户端中最大版本号元数据文件的主版本号加1,次版本号为〇。因为mergecompact操作的存在,服务器上所有元数据文件的次版本号均为〇。[0069]服务器端元数据文件过多时,同步管理器进行majorcompact操作。所述majorcompact操作为:将主版本号较小且次版本号为0的元数据文件合并成一个新的元数据文件,并删除被合并的元数据文件。新元数据文件的版本号为被合并的元数据文件中的最大版本号,其内容包含了被合并的元数据文件的所有有效键值对。[0070]元数据文件的命名规则为:版本号-{起始版本号-终止版本号}。花括号内的内容说明该元数据文件由哪些次版本号为0的元数据文件合并而来。对于minorcompact和mergecompact操作产生的元数据文件,起始版本号和终止版本号相同,均为该元数据文件的版本号。对于majorcompact产生的元数据文件,起始版本号和终止版本号不同。[0071]图8为文件树filetree在表格中的存储格式。文件树filetree中每一个节点作为一行存储在表格中。根节点对应行的rowkey为固定值"filetree",其他节点对应的行的rowkey为该节点的key。节点内键值对序列中的每一个键值对作为一列存储,列名为键名,而值则存储在由rowkey和列名确定的cell中。[0072]图9为一个版本树versiontree在表格中的存储格式。一个版本树versiontree作为一行存储,:rowkey为该versiontree的id,版本树versiontree中的每一个节点作为一列存储,根节点的列名为固定值"root",其他节点的列名为节点的digest。[0073]版本列表versionlist作为一行存储在表格中,rowkey为固定值"version1ist",每个节点作为一列存储,列名为该节点的digest。[0074]图10为新增文件处理流程。工作区监视器检测到有新增文件,首先计算该版本文件digest,检测版本库versionrepository中是否存在该版本文件,若不存在,则将新增版本文件复制到versionrepository中,并在versionlist中新增一个节点表示该版本文件。然后创建该文件的版本树versiontree,versiontree引用版本文件在versionlist中的对应节点,将versionlist中该版本文件对应节点的引用计数加1。最后在filetree中创建节点表示该文件。[0075]图11为文件更新处理流程。工作区监视器检测到有文件更新,计算更新后的版本文件digest。检测versionrepository中是否存在该版本文件,若不存在,则将新增版本文件复制到versionrepository中,并在versionlist中新增一个节点表示该版本文件。在对应的versiontree中当前版本节点下新增子节点,删除versiontree中的冗余版本。修改filetree中该文件节点的当前版本。所述冗余版本指由工作区监视器标识的不再需要的版本。[0076]工作区监视器删除文件操作的流程为,将文件在filetree中的节点的删除时间属性更新。删除目录操作为递归删除子节点文件。[0077]图12为同步管理器工作流程。同步管理器在客户端周期性运行,检查客户端与服务器端次版本号为〇的元数据文件组成的集合是否相等;客户端新增文件是否需要备份至服务器。如果集合不相等,则进行追赶操作。若需要备份,则依次进行minorcompact、mergecompact和上传操作。[0078]为方便描述追赶操作,记服务器上的元数据文件集合为S,客户端元数据文件集合为C。SnC中版本号最大的元数据文件记为mfc,S-C中版本号最大的元数据文件记为mfS。C-S中的元数据文件中的键值对均是在mfc基础上新增的。所述追赶操作是将C-S中元数据文件中的键值对变换为在mfs的基础上新增。变换方式如下:判断C-S中的每一个键值对在S-C中是否有对相同的键写入值。若没有,则该键值对保留;若有,则发生冲突,找出该键值对所在数据结构:filetree、versiontree或versionlist,以可读的形式询问用户是否需要保留该值。[0079]所述上传操作为,首先上传versionrepository中的新增文件至服务器,然后再上传新增的元数据文件至服务器。因此,服务器端元数据文件中引用的版本文件在服务器中必然存在。[0080]为避免多客户端服务器端相同文件并发更新,本发明使用两种锁进行并发控制:共享锁slock和互斥锁Xlock。两种类型的锁均有时间限制,如果过程执行需要比较长的时间,则需要阶段性的延长锁的时间。一个客户端在得到文件的slock时,其他客户端也可获得该文件的Slock。如果有客户端拥有文件的slock,则该文件的Xlock不会被其他客户端获取。一个客户端拥有文件的Xlock时,其他客户端不能获取该文件的s/xlock。[0081]上述同步管理器将本地库中的元数据库和版本库加密,所用到的加密算法和解密过程均为现有技术,并通过所述文件操作模块备份到所述服务器。对文件加密备份是为了防止文件在服务器端被别人窃取。[0082]综上所述,通过上述图表的介绍,本发明的一种文件版本控制方法,将总结出以下实施步骤:[0083]步骤1,初始化本地库中的工作区、元数据库、版本库;所述元数据库用于存放文件树、版本树、版本列表;[0084]步骤2,监视所述工作区中的文件变化,将变化后的版本文件存储到版本库中,将所述工作区中的文件信息转换并存储于文件树,将所述工作区中的文件版本信息转换并存储于所述版本树,将版本库中的版本文件信息转换并存储于版本列表中;[0085]步骤3,将所述文件树、版本树、版本列表转换为键值对存储格式,并保存到元数据库中的元数据文件内;[0086]步骤4,将所述本地库中的元数据库和版本库加密后备份到服务器。[0087]进一步,执行所述步骤1)_4)的过程中定期检查本地库与服务器的元数据库和版本库的一致性,若不一致则进行同步。[0088]进一步,所述步骤3)将所述文件树、版本树、版本列表转换为键值对存储格式的步骤为:[0089]a)将所述文件树、版本树、版本列表转换为表格存储方式,所述表格由行和列组成,所述行和列确定一个存储单元cell,所述存储单元cell可以存放多个值,所述每个值带一个时间戳;[0090]b)将所述存储单兀cell中的每一个值{value,timestamp}转换为{rowkey#column#timestamp#type,value}键值对存储;其中rowkey为存储单兀cell所在行的rowkey,column为存储单元cell所在列的column,type表示所述键值对是数据还是一个删除标志;[0091]c)将所述键值对写入操作日志,然后将键值对存入内存中,当所占内存空间达到阈值时,进行minorcompact操作;[0092]d)在minorcompact操作中,仓ij建一个新的元数据文件,将内存中的键值对按键有序写入新创建的元数据文件中。[0093]与现有的技术相比,本发明监控文件变化,自动保存文件的版本,记录文件的版本变化,用户可以方便地维护文件历史版本,在出现误操作时进行恢复。本发明对服务器进行抽象,将服务器当做远程文件系统使用,使得本发明可以在局域网或因特网上使用。另外,上传到服务器的文件均经过加密,防止数据在服务器端泄露,保护用户隐私。【权利要求】1.一种文件版本控制系统,包括本地库和控制模块,其特征在于:所述本地库包括工作区、元数据库、版本库,所述工作区用于存放本系统管理的文件,所述元数据库用于存放文件树、版本树、版本列表,所述版本库用于存放工作区中版本文件;所述控制模块包括抽象文件系统接口模块、文件操作模块、元数据访问模块、恢复管理器模块、工作区监视器模块;所述抽象文件系统接口模块提供统一的文件访问接口,所述文件操作模块通过所述抽象文件系统接口提供文件操作服务,所述元数据访问模块提供对元数据的访问服务,所述恢复管理器模块用于维护数据之间的一致性,所述工作区监视器模块用于监视工作区内的文件变化,并根据文件变化类型触发对应的事件处理。2.根据权利要求1所述的一种文件版本控制系统,其特征在于,还包括服务器,所述服务器用于备份所述本地库中的元数据库和版本库;所述控制模块还包括一个用于同步服务器与所述本地库之间的元数据库和版本库的同步管理器模块。3.根据权利要求1或2所述的一种文件版本控制系统,其特征在于,所述文件树、版本树、版本列表存储在表格中,所述表格每行有一个唯一标识符,所述表格的每个存储单元可以存储多个值,每个所述值有一个时间戳。4.根据权利要求1或2所述的一种文件版本控制系统,其特征在于,所述文件树的节点表示普通文件或目录,每个节点有唯一标识符key,所述节点到根节点的路径表示与所述节点对应的文件相对于工作区的路径;所述文件树中每个表示普通文件的节点都有一个版本树相对应,每个所述版本树有唯一的id标识,所述版本树中每个节点表示文件的一个版本。5.-种文件版本控制方法,其特征在于,包括以下步骤:1)初始化本地库中的工作区、元数据库、版本库;所述元数据库用于存放文件树、版本树、版本列表;2)监视所述工作区中的文件变化,将变化后的版本文件存储到版本库中,将所述工作区中的文件信息转换并存储于文件树,将所述工作区中的文件版本信息转换并存储于所述版本树,将版本库中的版本文件信息转换并存储于版本列表中;3)将所述文件树、版本树、版本列表转换为键值对存储格式,并保存到元数据库中的元数据文件内;4)将所述本地库中的元数据库和版本库加密后备份到服务器。6.根据权利要求5所述的一种文件版本控制方法,其特征在于,执行所述步骤1)一4)的过程中定期检查本地库与服务器的元数据库和版本库的一致性,若不一致则进行同步。7.根据权利要求5所述的一种文件版本控制方法,其特征在于,所述步骤3)将所述文件树、版本树、版本列表转换为键值对存储格式的步骤为:3-1)将所述文件树、版本树、版本列表转换为表格存储方式,所述表格由行和列组成,所述行和列确定一个存储单元cell,所述存储单元cell可以存放多个值,所述每个值带一个时间戳;3-2)将所述存储单元cell中的每一个值{value,timestamp}转换为{rowkey#column#timestamp#type,value}键值对存储;其中rowkey为存储单兀cell所在行的rowkey,column为存储单元cell所在列的column,type表示所述键值对是数据还是一个删除标志;3-3)将所述键值对写入操作日志,然后将键值对存入内存中,当所占内存空间达到阈值时,进行minorcompact操作;3-4)在minorcompact操作中,仓ij建一个新的元数据文件,将内存中的键值对按键有序写入新创建的元数据文件中。8.根据权利要求6所述的一种文件版本控制方法,其特征在于,所述同步时对所述元数据文件进行mergecompact操作,所述mergecompact操作为将本地新增的元数据文件合并为一个新的元数据文件,所述新的元数据文件的主版本号为现有最大主版本号加1,次版本号为0。9.根据权利要求6所述的一种文件版本控制方法,其特征在于,所述同步时当元数据文件过多时进行majorcompact操作,所述majorcompact操作为将版本号较小且次版本号为0的元数据文件合并成一个新的元数据文件,所述新元数据文件的版本号为被合并的元数据文件的最大版本号,所述新的元数据文件包含被合并的元数据文件的所有有效的键值对。【文档编号】G06F11/14GK104156278SQ201410377919【公开日】2014年11月19日申请日期:2014年8月1日优先权日:2014年8月1日【发明者】薛安荣,邰泳申请人:江苏大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1