CN104156278A - 一种文件版本控制系统及其方法 - Google Patents
一种文件版本控制系统及其方法 Download PDFInfo
- Publication number
- CN104156278A CN104156278A CN201410377919.2A CN201410377919A CN104156278A CN 104156278 A CN104156278 A CN 104156278A CN 201410377919 A CN201410377919 A CN 201410377919A CN 104156278 A CN104156278 A CN 104156278A
- Authority
- CN
- China
- Prior art keywords
- version
- file
- tree
- key
- meta data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Abstract
本发明公开了一种文件版本控制系统,包括本地库和控制模块,所述本地库包括工作区、元数据库、版本库,所述工作区用于存放本系统管理的文件,所述元数据库用于存放文件树、版本树、版本列表,所述版本库用于存放工作区中版本文件;所述控制模块包括抽象文件系统接口模块、文件操作模块、元数据访问模块、恢复管理器模块、工作区监视器模块;本发明将文件加密后备份到服务器,可防止服务器端的隐私泄密;自动维护文件的版本信息,方便用户对文件误操作后恢复到文件历史版本。此外,文件树、版本树、版本列表使用表格存储,再将表格转换为键值对存储到磁盘文件,表格中单元格的修改、删除操作通过写入新值实现,避免了磁盘的随机访问,减少磁盘I/O,减少网络开销。
Description
技术领域
本发明属于计算机网络应用技术领域,具体涉及一种用于对文件进行版本控制和加密远程备份的方法。
背景技术
随着网络技术的发展,很多网络公司将其服务器的硬盘或者硬盘阵列的一部分容量分给注册用户使用,即网络硬盘(网盘)的问世,由于网络硬盘具有随时随地存取、自动远程备份、可靠等优点,所以受到了越来越多的用户的青睐。
然而,网盘供应商提供的客户端存取文件时都是明文存取的,文件安全日渐成为用户担心的首要问题,一方面,大部分网盘提供商未提供版本控制功能,如果文件发生误操作后就会造成文件不能恢复到误操作之前的状况;另一方面,有些网盘供应商提供文件历史版本恢复服务,由于功能较弱,致使用户不能自定义文件版本。
发明内容
针对现有技术中所出现的问题,本发明的目的是提供了一种对文件进行版本控制、加密远程备份的系统和方法。
本发明的系统的技术方案为:
一种文件版本控制系统,包括本地库和控制模块,所述本地库包括工作区、元数据库、版本库,所述工作区用于存放本系统管理的文件,所述元数据库用于存放文件树、版本树、版本列表,所述版本库用于存放工作区中版本文件;所述控制模块包括抽象文件系统接口模块、文件操作模块、元数据访问模块、恢复管理器模块、工作区监视器模块;所述抽象文件系统接口模块提供统一的文件访问接口,所述文件操作模块通过所述抽象文件系统接口提供文件操作服务,所述元数据访问模块提供对元数据的访问服务,所述恢复管理器模块用于维护数据之间的一致性,所述工作区监视器模块用于监视工作区内的文件变化,并根据文件变化类型触发对应的事件处理。
进一步,还包括服务器,所述服务器用于备份所述本地库中的元数据库和版本库;所述控制模块还包括一个用于同步服务器与所述本地库之间的元数据库和版本库的同步管理器模块。
进一步,所述文件树、版本树、版本列表存储在表格中,所述表格每行有一个唯一标识符,所述表格的每个存储单元可以存储多个值,每个所述值有一个时间戳。
进一步,所述文件树的节点表示普通文件或目录,每个节点有唯一标识符key,所述节点到根节点的路径表示与所述节点对应的文件相对于工作区的路径;所述文件树中每个表示普通文件的节点都有一个版本树相对应,每个所述版本树有唯一的id标识,所述版本树中每个节点表示文件的一个版本。
本发明的方法的技术方案,一种文件版本控制方法,包括以下步骤:
1)初始化本地库中的工作区、元数据库、版本库;所述元数据库用于存放文件树、版本树、版本列表;
2)监视所述工作区中的文件变化,将变化后的版本文件存储到版本库中,将所述工作区中的文件信息转换并存储于文件树,将所述工作区中的文件版本信息转换并存储于所述版本树,将版本库中的版本文件信息转换并存储于版本列表中;
3)将所述文件树、版本树、版本列表转换为键值对存储格式,并保存到元数据库中的元数据文件内;
4)将所述本地库中的元数据库和版本库加密后备份到服务器。
进一步,其特征在于,执行所述步骤1)-4)的过程中定期检查本地库与服务器的元数据库和版本库的一致性,若不一致则进行同步。
进一步,所述步骤3)将所述文件树、版本树、版本列表转换为键值对存储格式的步骤为:
3-1)将所述文件树、版本树、版本列表转换为表格存储方式,所述表格由行和列组成,所述行和列确定一个存储单元cell,所述存储单元cell可以存放多个值,所述每个值带一个时间戳;
3-2)将所述存储单元cell中的每一个值{value,timestamp}转换为{row key#column#timestamp#type,value}键值对存储;其中row key为存储单元cell所在行的row key,column为存储单元cell所在列的column,type表示所述键值对是数据还是一个删除标志;
3-3)将所述键值对写入操作日志,然后将键值对存入内存中,当所占内存空间达到阈值时,进行minor compact操作;
3-4)在minor compact操作中,创建一个新的元数据文件,将内存中的键值对按键有序写入新创建的元数据文件中。
进一步,所述同步时对所述元数据文件进行merge compact操作,所述merge compact操作为将本地新增的元数据文件合并为一个新的元数据文件,所述新的元数据文件的主版本号为现有最大主版本号加1,次版本号为0。
进一步,所述同步时当元数据文件过多时进行major compact操作,所述major compact操作为将版本号较小且次版本号为0的元数据文件合并成一个新的元数据文件,所述新元数据文件的版本号为被合并的元数据文件的最大版本号,所述新的元数据文件包含被合并的元数据文件的所有有效的键值对。
本发明的有益效果为:与现有技术相比,该系统中的远程备份适用场合广泛,不依赖于具体的服务,可以是任意一个网盘服务、ftp服务器、samba服务器或其他文件服务;当文件通过用户已知的加密算法加密后备份到服务器,可以防止服务器端文件被窃取;自动维护文件的版本信息,方便用户对文件误操作后恢复到文件历史版本。此外,文件树、版本树、版本列表使用表格存储,再将表格转换为键值对存储到磁盘文件,表格中单元格的修改、删除操作通过写入新值实现,避免了磁盘的随机访问,减少磁盘I/O,减少网络开销。
附图说明
图1本发明的系统结构示意图;
图2本发明的客户端体系结构示意图;
图3本发明的文件树File Tree结构示意图;
图4本发明的版本树Version Tree结构示意图;
图5本发明的客户端存储的数据图;
图6本发明的服务器上存储的数据图;
图7本发明的元数据两层存储结构示意图;
图8本发明的文件树File Tree在表格中的存储格式;
图9本发明的版本树Version Tree在表格中的存储格式;
图10本发明的文件新增处理流程图;
图11本发明的文件更新处理流程图;
图12本发明的同步管理器工作流程图。
具体实施方式
下面结合附图对本发明作进一步详细描述。
图1为本发明的系统结构图,系统由服务器和客户端组成,服务器提供远程文件系统服务,可以是samba服务器、ftp服务器、网盘服务等;客户端为安装在用户电脑上的程序,用户安装客户端程序,指定一个目录作为工作区,配置服务器地址、用户名、密码等信息即可使用该系统。
系统可供多个用户同时使用,每个用户可以有多个客户端。用户将需要系统维护的文件存放于工作区内,客户端自动维护工作区内的文件版本,并将文件版本加密备份到服务器上。用户的其他客户端会阶段性的检测服务器上有没有新的文件,若有新的文件则下载更新,从而同一用户的多个客户端的工作区保持最终一致性,所述最终一致性为一个工作区内的文件变化经过一段时间最终会同步至同一用户的其他客户端。
图2为客户端结构,包括工作区监视器、同步管理器、恢复管理器、文件操作、元数据访问、抽象文件系统接口等6个模块;本地库位于用户电脑上,由工作区、元数据库、版本库组成,所述工作区用于存放本系统管理的文件,所述元数据库用于存放文件树、版本树、版本列表,所述版本库用于存放工作区中版本文件。
抽象文件系统接口模块为本地文件系统以及服务器提供统一的文件访问接口。所述接口分为两类:处理文件和目录的接口、读写文件数据的接口。处理文件和目录的接口用于创建、删除文件或目录、读取文件和目录的创建时间、最后修改时间等元数据。当读取的文件或目录位于本地文件系统时,该模块直接调用本地文件系统的接口读取数据。当文件或目录位于服务器时,通过网络协议读取数据。
文件操作模块通过抽象文件系统接口提供本地库和服务器上的文件访问服务。本系统具有多用户多客户端的特性,服务器上会同时存在多个用户的数据。文件操作模块使上层组件不需要知道当前用户的情况下操作当前用户在本地以及服务器上的文件和目录。
文件树、版本树、版本列表等元数据保存在元数据库内的元数据文件中,元数据访问组件提供对元数据的读写操作:将元数据文件读入内存进行读写操作,将更新后的元数据写入磁盘。
恢复管理器模块在客户端启动时检测并处理本地库中数据不一致问题;在客户端运行过程中,检测并处理服务器上的数据不一致。所述数据不一致指工作区、文件树、版本树、版本列表、版本库之间的数据不一致。另外,在客户端运行过程中,恢复管理器周期性删除冗余数据。所述冗余数据为不再需要的数据,例如一个文件被删除了一定时间后,文件树中表示该文件的节点即为冗余数据。
同步管理器模块负责元数据库、版本库与服务器之间的数据同步。用户在某一个客户端上对工作区文件所做的改动会被写入到元数据库和版本库中,从而被同步管理器同步到服务器端,随后该用户的其他客户端的同步管理器将服务器上变化的数据同步到各自本地库。
工作区监视器模块监视工作区的文件变化,,并根据文件变化类型触发对应的事件处理。使用文件树记录工作区中的文件,用版本树记录文件的版本历史,将文件的新增版本复制到版本库中,并使用版本列表记录版本库中的版本。
图3给出了file tree的结构,为了方便描述,使用file表示一个文件,file可以被编辑,每次编辑保存在磁盘上的文件称为version file,version file是file在某一时刻的快照,工作区work area中的文件都是version file;图3中的file被组织成文件树file tree,树中的节点路径反应了文件相对于work area的路径,work area中文件夹与文件夹下文件关系在file tree中为父节点与子节点的关系,file tree中的节点有两种类型:文件和目录,work area中的内容是file tree的一个快照。
图4给出了版本树version tree的结构,更新file会产生版本文件version file,软件使用version tree记录file的版本变化,一个节点表示一个版本文件,file和version tree一一对应;图4为一个file的version tree:用户创建file时,软件创建一个与之对应的version tree,根节点version file 1是file创建时的版本,用户更新version file 1后产生version file 2,更新version file 2后产生version file 3,再次更新version file 1产生version file 4,version tree中的父子关系与version file的衍生关系对应。
此外,version file有两种类型:临时类型和永久类型,临时类型是工作区监视器自动标记的版本,用于在用户对文件误操作后进行文件恢复;永久类型是用户标记的版本,除非用户手动删除,本发明不会删除文件的永久类型的版本。工作区监视器将文件每一次更新后的内容作为一个临时版本记录在version tree中,默认情况下会保存最近七天的每天最后一个临时版本,最近一天的最新10个临时版本。两种类型的版本文件都保存在版本库version repository中。
本发明使用版本列表version list记录版本库version repository中的版本文件,version list中每一个节点记录一个版本文件的SHAl哈希值、被所有版本树version tree中节点的引用次数之和、该版本文件的未加密形式在version repository中是否存在、该版本文件的加密形式在version repository中是否存在。
图5为本地库中的数据组成。工作区是用户指定的一个目录,用于存放需要本系统管理的文件。元数据库meta repository里包含许多元数据文件,用于存放键值对,即本发明中的文件树file tree、版本树version tree、版本列表version list。版本库version repository用于存放工作区中文件的版本。
图6为服务器端保存的文件和数据。服务器用于备份客户端的元数据库meta repository和版本库version repository。当多个用户共享服务器时,各个用户之间的数据互不影响。
文件树file tree中的节点表示文件或目录,其内部是一个键值对序列,保存与文件或目录相关的信息。其中一个键值对(”key”,key value)用于标识该节点,,每个节点有唯一标识符key,即key value在file tree中是唯一的,由文件创建时的路径和时间组合而成。此外每个节点都包含一个name属性,键值对(”name”,name value)用于表示文件或目录的名称。所述节点到根节点的路径表示与所述节点对应的文件相对于工作区的路径。节点相对于工作区的路径由根节点至该节点路径上的节点的name组成。节点可以通过相对路径进行访问,或通过key访问。当节点表示文件时,节点内部的键值对存放文件的name、版本树id、当前版本、创建时间、最后一次修改时间、删除时间、父节点key、该节点的key。
当节点表示目录时,节点内部的键值对存放目录的name、创建时间、最后一次修改时间、父节点key、所有子节点的key列表、该节点的key。
所述文件树中每个表示普通文件的节点都有一个版本树相对应,每个版本树versiontree都有一个唯一的id,由该版本树对应的文件的路径和创建时间组合而成。version tree节点内部是一个键值对序列,所述版本树中每个节点表示文件的一个版本,序列中的每个键值对分别保存该版本引用的版本文件SHA1哈希值digest、版本类型、父节点digest、创建时间。同一个version tree中,每个节点的digest都是唯一的。所述版本类型有两种:临时版本和永久版本。临时版本由工作区监视器标识、永久版本由用户标识。
版本列表version list用于记录version repository中version file信息的列表。version list中一个节点表示一个version file,节点内部是一个键值对序列,用于存放version file的digest、引用计数、version file创建时间、未加密形式在version repository中是否存在、加密形式在version repository中是否存在。所述digest为version file的SHA1哈希值。
file tree中节点的key由对应文件的路径和创建时间组合而成,version tree的id由对应文件的路径和创建时间组合而成。因此,由file tree中的节点可以找到文件对应的versiontree由version tree也可以找到file tree中对应的节点。version tree中节点由引用的版本文件digest标识,version list中的节点由对应的版本文件digest标识。因此,version tree和version list中的节点存在对应关系。版本文件存储在version repository中的文件名有该版本文件的digest和类型组合而成。所述类型有两种:加密和未加密。
file tree、version tree、version list和version repository中的数据和文件相互协作、共同维护工作区work area中的文件,它们之间存在以下一致性约束:
1)work area中的文件在file tree中均有对应的节点,且节点的name、当前版本属性与work area中对应的文件一致;
2)file tree中的所有未被删除的file的当前文件在work area中均有对应的文件存在;filetree中所有file均有对应的version tree,以及version tree中对应的当前版本节点。
3)version tree中所有版本文件在version list均存在;version tree表示的file在file tree中存在。
4)version list中的各个节点引用计数等于version tree的引用之和;version list中记录的version file在version repository中以加密或者未加密的形式存在。
5)version repository中的版本文件在version list均有记录。
工作区work area中文件被删除,file tree中该文件对应的节点记录文件被删除的时间。文件被删除一段时间后,file tree中对应节点以及文件对应的version tree被删除,version list中所有被该version tree中的节点引用的版本文件节点的引用计数减1。若版本文件的引用计数为0时,该版本文件被删除。
图7为元数据存储层次结构,共分为两层:Key-Value层和Table层。Key-Value层在文件的基础上提供键值对存储服务,Table层在Key-Value层基础上提供表格存储服务。所述文件包括位于磁盘上的元数据文件和内存文件,图中的file 1,file 2,…,file n为磁盘文件,immutable file和mem file为内存文件。元数据文件可以有多个,而内存文件只有两个。
表格由若干行组成,所述表格每行有一个唯一标识符,所述表格的每个存储单元可以存储多个值,每个所述值有一个时间戳。每行通过row key标识,每行包含很多列column。行和列都可以增加。row key和column可以确定一个存储单元cell。cell中可以存放多个值,每一个值都有一个时间戳。更新cell中数据操作,不会立即删除原有数据,而是将新值加上时间戳放入cell中。读取cell时,只会读取cell的最新值。删除cell数据时,向cell中存放一个带有时间戳的删除标记。cell中的每一个值转换成键值对(row key,column,timestamp)->value交由Key-Value层存储。
Key-Value层使用多个元数据文件和两个内存文件存储key value。Key-Value层写入keyvalue时,首先将key value写入日志,然后再将key value写入mem file。当mem file内存占用量达到限制后,进行minor compact操作。所述minor compact操作为,将mem file转为immutable file,并创建一个新的mem file和一个元数据文件。新的元数据文件用于将immutable file中的内容写入其中,新的mem file用于写入新的keyvalue。
每个元数据文件都有一个版本号,格式为:主版本号_次版本号。版本号大小比较方式为,先按主版本号比较大小,如果主版本号一样则比较次版本号。版本号较小的元数据文件,其存放的键值对的timestamp比版本号大的timestamp小。minor compact操作中创建的元数据文件的主版本号为当前客户端的最大版本号的主版本号,次版本号为最大版本号的次版本号加1。若客户端没有元数据文件,则默认最大版本号的主版本号和次版本号均为0。
客户端与服务器端元数据文件集合的差称为新增文件,同步管理器进行同步时,对新增文件进行merge compact操作。所述merge compact操作为,创建一个新的元数据文件,将新增文件中的数据进行多路归并合并写入其中,然后同步管理器删除新增文件,将创建的元数据文件上传至服务器。merge compact操作中创建的元数据文件的主版本号为当前客户端中最大版本号元数据文件的主版本号加1,次版本号为0。因为merge compact操作的存在,服务器上所有元数据文件的次版本号均为0。
服务器端元数据文件过多时,同步管理器进行major compact操作。所述major compact操作为:将主版本号较小且次版本号为0的元数据文件合并成一个新的元数据文件,并删除被合并的元数据文件。新元数据文件的版本号为被合并的元数据文件中的最大版本号,其内容包含了被合并的元数据文件的所有有效键值对。
元数据文件的命名规则为:版本号-{起始版本号-终止版本号}。花括号内的内容说明该元数据文件由哪些次版本号为0的元数据文件合并而来。对于minor compact和mergecompact操作产生的元数据文件,起始版本号和终止版本号相同,均为该元数据文件的版本号。对于major compact产生的元数据文件,起始版本号和终止版本号不同。
图8为文件树file tree在表格中的存储格式。文件树file tree中每一个节点作为一行存储在表格中。根节点对应行的row key为固定值”file tree”,其他节点对应的行的row key为该节点的key。节点内键值对序列中的每一个键值对作为一列存储,列名为键名,而值则存储在由row key和列名确定的cell中。
图9为一个版本树version tree在表格中的存储格式。一个版本树version tree作为一行存储,row key为该version tree的id,版本树version tree中的每一个节点作为一列存储,根节点的列名为固定值”root”,其他节点的列名为节点的digest。
版本列表version list作为一行存储在表格中,row key为固定值”version list”,每个节点作为一列存储,列名为该节点的digest。
图10为新增文件处理流程。工作区监视器检测到有新增文件,首先计算该版本文件digest,检测版本库version repository中是否存在该版本文件,若不存在,则将新增版本文件复制到version repository中,并在version list中新增一个节点表示该版本文件。然后创建该文件的版本树version tree,version tree引用版本文件在version list中的对应节点,将version list中该版本文件对应节点的引用计数加1。最后在file tree中创建节点表示该文件。
图11为文件更新处理流程。工作区监视器检测到有文件更新,计算更新后的版本文件digest。检测version repository中是否存在该版本文件,若不存在,则将新增版本文件复制到version repository中,并在version list中新增一个节点表示该版本文件。在对应的versiontree中当前版本节点下新增子节点,删除version tree中的冗余版本。修改file tree中该文件节点的当前版本。所述冗余版本指由工作区监视器标识的不再需要的版本。
工作区监视器删除文件操作的流程为,将文件在file tree中的节点的删除时间属性更新。删除目录操作为递归删除子节点文件。
图12为同步管理器工作流程。同步管理器在客户端周期性运行,检查客户端与服务器端次版本号为0的元数据文件组成的集合是否相等;客户端新增文件是否需要备份至服务器。如果集合不相等,则进行追赶操作。若需要备份,则依次进行minor compact、mergecompact和上传操作。
为方便描述追赶操作,记服务器上的元数据文件集合为S,客户端元数据文件集合为C。S∩C中版本号最大的元数据文件记为mfc,S-C中版本号最大的元数据文件记为mfs。C-S中的元数据文件中的键值对均是在mfc基础上新增的。所述追赶操作是将C-S中元数据文件中的键值对变换为在mfs的基础上新增。变换方式如下:判断C-S中的每一个键值对在S-C中是否有对相同的键写入值。若没有,则该键值对保留;若有,则发生冲突,找出该键值对所在数据结构:file tree、version tree或version list,以可读的形式询问用户是否需要保留该值。
所述上传操作为,首先上传version repository中的新增文件至服务器,然后再上传新增的元数据文件至服务器。因此,服务器端元数据文件中引用的版本文件在服务器中必然存在。
为避免多客户端服务器端相同文件并发更新,本发明使用两种锁进行并发控制:共享锁s lock和互斥锁x lock。两种类型的锁均有时间限制,如果过程执行需要比较长的时间,则需要阶段性的延长锁的时间。一个客户端在得到文件的s lock时,其他客户端也可获得该文件的s lock。如果有客户端拥有文件的s lock,则该文件的x lock不会被其他客户端获取。一个客户端拥有文件的x lock时,其他客户端不能获取该文件的s/x lock。
上述同步管理器将本地库中的元数据库和版本库加密,所用到的加密算法和解密过程均为现有技术,并通过所述文件操作模块备份到所述服务器。对文件加密备份是为了防止文件在服务器端被别人窃取。
综上所述,通过上述图表的介绍,本发明的一种文件版本控制方法,将总结出以下实施步骤:
步骤1,初始化本地库中的工作区、元数据库、版本库;所述元数据库用于存放文件树、版本树、版本列表;
步骤2,监视所述工作区中的文件变化,将变化后的版本文件存储到版本库中,将所述工作区中的文件信息转换并存储于文件树,将所述工作区中的文件版本信息转换并存储于所述版本树,将版本库中的版本文件信息转换并存储于版本列表中;
步骤3,将所述文件树、版本树、版本列表转换为键值对存储格式,并保存到元数据库中的元数据文件内;
步骤4,将所述本地库中的元数据库和版本库加密后备份到服务器。
进一步,执行所述步骤1)-4)的过程中定期检查本地库与服务器的元数据库和版本库的一致性,若不一致则进行同步。
进一步,所述步骤3)将所述文件树、版本树、版本列表转换为键值对存储格式的步骤为:
a)将所述文件树、版本树、版本列表转换为表格存储方式,所述表格由行和列组成,所述行和列确定一个存储单元cell,所述存储单元cell可以存放多个值,所述每个值带一个时间戳;
b)将所述存储单元cell中的每一个值{value,timestamp}转换为{row key#column#timestamp#type,value}键值对存储;其中row key为存储单元cell所在行的row key,column为存储单元cell所在列的column,type表示所述键值对是数据还是一个删除标志;
c)将所述键值对写入操作日志,然后将键值对存入内存中,当所占内存空间达到阈值时,进行minor compact操作;
d)在minor compact操作中,创建一个新的元数据文件,将内存中的键值对按键有序写入新创建的元数据文件中。
与现有的技术相比,本发明监控文件变化,自动保存文件的版本,记录文件的版本变化,用户可以方便地维护文件历史版本,在出现误操作时进行恢复。本发明对服务器进行抽象,将服务器当做远程文件系统使用,使得本发明可以在局域网或因特网上使用。另外,上传到服务器的文件均经过加密,防止数据在服务器端泄露,保护用户隐私。
Claims (9)
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}转换为{row key#column#timestamp#type,value}键值对存储;其中row key为存储单元cell所在行的row key,column为存储单元cell所在列的column,type表示所述键值对是数据还是一个删除标志;
3-3)将所述键值对写入操作日志,然后将键值对存入内存中,当所占内存空间达到阈值时,进行minor compact操作;
3-4)在minor compact操作中,创建一个新的元数据文件,将内存中的键值对按键有序写入新创建的元数据文件中。
8.根据权利要求6所述的一种文件版本控制方法,其特征在于,所述同步时对所述元数据文件进行merge compact操作,所述merge compact操作为将本地新增的元数据文件合并为一个新的元数据文件,所述新的元数据文件的主版本号为现有最大主版本号加1,次版本号为0。
9.根据权利要求6所述的一种文件版本控制方法,其特征在于,所述同步时当元数据文件过多时进行major compact操作,所述major compact操作为将版本号较小且次版本号为0的元数据文件合并成一个新的元数据文件,所述新元数据文件的版本号为被合并的元数据文件的最大版本号,所述新的元数据文件包含被合并的元数据文件的所有有效的键值对。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410377919.2A CN104156278B (zh) | 2014-08-01 | 2014-08-01 | 一种文件版本控制系统及其方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410377919.2A CN104156278B (zh) | 2014-08-01 | 2014-08-01 | 一种文件版本控制系统及其方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104156278A true CN104156278A (zh) | 2014-11-19 |
CN104156278B CN104156278B (zh) | 2017-06-27 |
Family
ID=51881783
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410377919.2A Active CN104156278B (zh) | 2014-08-01 | 2014-08-01 | 一种文件版本控制系统及其方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104156278B (zh) |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104572921A (zh) * | 2014-12-27 | 2015-04-29 | 北京奇虎科技有限公司 | 一种跨数据中心的数据同步方法和装置 |
CN105528464A (zh) * | 2016-01-28 | 2016-04-27 | 北京宇航系统工程研究所 | 一种自动判断关联数据技术状态一致性的版本管理系统 |
CN107301177A (zh) * | 2016-04-14 | 2017-10-27 | 杭州海康威视数字技术股份有限公司 | 一种文件存储方法及装置 |
CN107391632A (zh) * | 2017-06-30 | 2017-11-24 | 北京奇虎科技有限公司 | 数据库存储处理方法、装置、计算设备及计算机存储介质 |
CN107391669A (zh) * | 2017-07-20 | 2017-11-24 | 郑州云海信息技术有限公司 | 一种基于文件系统的多版本文件管理方法及装置 |
CN107766314A (zh) * | 2017-10-20 | 2018-03-06 | 网易(杭州)网络有限公司 | 电子表格的数据处理方法和装置 |
CN107832470A (zh) * | 2017-11-29 | 2018-03-23 | 郑州云海信息技术有限公司 | 一种基于存储系统的对象存储方法及装置 |
CN108319645A (zh) * | 2017-12-25 | 2018-07-24 | 中国科学院信息工程研究所 | 一种异构存储环境下多版本文件视图管理方法和装置 |
CN109308231A (zh) * | 2017-07-28 | 2019-02-05 | 中国石油化工股份有限公司 | 一种空间数据版本的管理方法 |
CN109491703A (zh) * | 2018-11-07 | 2019-03-19 | 网易(杭州)网络有限公司 | 表格合并的方法、装置、存储介质及电子装置 |
CN109657497A (zh) * | 2018-12-21 | 2019-04-19 | 北京思源互联科技有限公司 | 安全文件系统及其方法 |
CN109683955A (zh) * | 2018-12-29 | 2019-04-26 | 北京奇艺世纪科技有限公司 | 版本库复制方法及系统 |
CN110045983A (zh) * | 2019-04-19 | 2019-07-23 | 腾讯科技(深圳)有限公司 | 版本库管理方法、装置及服务器 |
CN110502523A (zh) * | 2019-08-01 | 2019-11-26 | 广东浪潮大数据研究有限公司 | 业务数据存储方法、装置、服务器及计算机可读存储介质 |
CN110647517A (zh) * | 2018-06-11 | 2020-01-03 | 北京神州泰岳软件股份有限公司 | 一种表格数据结构的处理方法和装置 |
CN111090835A (zh) * | 2019-12-06 | 2020-05-01 | 支付宝(杭州)信息技术有限公司 | 一种文件衍生图的构建方法及装置 |
CN111124474A (zh) * | 2018-10-31 | 2020-05-08 | 北京数聚鑫云信息技术有限公司 | 一种api版本控制方法及装置 |
CN111492354A (zh) * | 2017-11-14 | 2020-08-04 | 斯诺弗雷克公司 | 不可变存储装置中的数据库元数据 |
CN112286880A (zh) * | 2020-10-23 | 2021-01-29 | 北京金山云网络技术有限公司 | 数据存储方法、装置、设备及存储介质 |
CN113039547A (zh) * | 2018-10-10 | 2021-06-25 | 美光科技公司 | 键值存储树数据块的基于计数器的压缩 |
US11334270B2 (en) | 2018-12-14 | 2022-05-17 | Micron Technology, Inc. | Key-value store using journaling with selective data storage format |
US11657092B2 (en) | 2018-12-26 | 2023-05-23 | Micron Technology, Inc. | Data tree with order-based node traversal |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030182322A1 (en) * | 2002-03-19 | 2003-09-25 | Manley Stephen L. | System and method for storage of snapshot metadata in a remote file |
CN101145101A (zh) * | 2006-09-14 | 2008-03-19 | 国际商业机器公司 | 版本控制中定制和执行策略的方法、装置和系统 |
CN101162469A (zh) * | 2007-11-09 | 2008-04-16 | 清华大学 | 基于快照的细粒度文件与目录版本管理方法 |
CN102023903A (zh) * | 2009-09-10 | 2011-04-20 | 联想(北京)有限公司 | 一种数据备份的版本管理方法及装置 |
CN102110146A (zh) * | 2011-02-16 | 2011-06-29 | 清华大学 | 基于键值key-value存储的分布式文件系统元数据管理方法 |
CN102339321A (zh) * | 2011-11-09 | 2012-02-01 | 上海盛霄云计算技术有限公司 | 具有版本控制的网络文件系统及方法 |
-
2014
- 2014-08-01 CN CN201410377919.2A patent/CN104156278B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030182322A1 (en) * | 2002-03-19 | 2003-09-25 | Manley Stephen L. | System and method for storage of snapshot metadata in a remote file |
CN101145101A (zh) * | 2006-09-14 | 2008-03-19 | 国际商业机器公司 | 版本控制中定制和执行策略的方法、装置和系统 |
CN101162469A (zh) * | 2007-11-09 | 2008-04-16 | 清华大学 | 基于快照的细粒度文件与目录版本管理方法 |
CN102023903A (zh) * | 2009-09-10 | 2011-04-20 | 联想(北京)有限公司 | 一种数据备份的版本管理方法及装置 |
CN102110146A (zh) * | 2011-02-16 | 2011-06-29 | 清华大学 | 基于键值key-value存储的分布式文件系统元数据管理方法 |
CN102339321A (zh) * | 2011-11-09 | 2012-02-01 | 上海盛霄云计算技术有限公司 | 具有版本控制的网络文件系统及方法 |
Cited By (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104572921B (zh) * | 2014-12-27 | 2017-12-19 | 北京奇虎科技有限公司 | 一种跨数据中心的数据同步方法和装置 |
CN104572921A (zh) * | 2014-12-27 | 2015-04-29 | 北京奇虎科技有限公司 | 一种跨数据中心的数据同步方法和装置 |
CN105528464B (zh) * | 2016-01-28 | 2019-03-26 | 北京宇航系统工程研究所 | 一种自动判断关联数据技术状态一致性的版本管理系统 |
CN105528464A (zh) * | 2016-01-28 | 2016-04-27 | 北京宇航系统工程研究所 | 一种自动判断关联数据技术状态一致性的版本管理系统 |
CN107301177A (zh) * | 2016-04-14 | 2017-10-27 | 杭州海康威视数字技术股份有限公司 | 一种文件存储方法及装置 |
CN107391632A (zh) * | 2017-06-30 | 2017-11-24 | 北京奇虎科技有限公司 | 数据库存储处理方法、装置、计算设备及计算机存储介质 |
CN107391632B (zh) * | 2017-06-30 | 2021-02-23 | 北京奇虎科技有限公司 | 数据库存储处理方法、装置、计算设备及计算机存储介质 |
CN107391669A (zh) * | 2017-07-20 | 2017-11-24 | 郑州云海信息技术有限公司 | 一种基于文件系统的多版本文件管理方法及装置 |
CN109308231A (zh) * | 2017-07-28 | 2019-02-05 | 中国石油化工股份有限公司 | 一种空间数据版本的管理方法 |
CN107766314A (zh) * | 2017-10-20 | 2018-03-06 | 网易(杭州)网络有限公司 | 电子表格的数据处理方法和装置 |
CN111492354A (zh) * | 2017-11-14 | 2020-08-04 | 斯诺弗雷克公司 | 不可变存储装置中的数据库元数据 |
CN107832470A (zh) * | 2017-11-29 | 2018-03-23 | 郑州云海信息技术有限公司 | 一种基于存储系统的对象存储方法及装置 |
CN108319645A (zh) * | 2017-12-25 | 2018-07-24 | 中国科学院信息工程研究所 | 一种异构存储环境下多版本文件视图管理方法和装置 |
CN108319645B (zh) * | 2017-12-25 | 2022-09-16 | 中国科学院信息工程研究所 | 一种异构存储环境下多版本文件视图管理方法和装置 |
CN110647517A (zh) * | 2018-06-11 | 2020-01-03 | 北京神州泰岳软件股份有限公司 | 一种表格数据结构的处理方法和装置 |
CN110647517B (zh) * | 2018-06-11 | 2022-06-24 | 北京神州泰岳软件股份有限公司 | 一种表格数据结构的处理方法和装置 |
US11599552B2 (en) | 2018-10-10 | 2023-03-07 | Micron Technology, Inc. | Counter-based compaction of key-value store tree data block |
CN113039547B (zh) * | 2018-10-10 | 2022-06-28 | 美光科技公司 | 键值存储存储器系统、方法及相关存储媒体 |
CN113039547A (zh) * | 2018-10-10 | 2021-06-25 | 美光科技公司 | 键值存储树数据块的基于计数器的压缩 |
CN111124474A (zh) * | 2018-10-31 | 2020-05-08 | 北京数聚鑫云信息技术有限公司 | 一种api版本控制方法及装置 |
CN109491703A (zh) * | 2018-11-07 | 2019-03-19 | 网易(杭州)网络有限公司 | 表格合并的方法、装置、存储介质及电子装置 |
US11334270B2 (en) | 2018-12-14 | 2022-05-17 | Micron Technology, Inc. | Key-value store using journaling with selective data storage format |
CN109657497A (zh) * | 2018-12-21 | 2019-04-19 | 北京思源互联科技有限公司 | 安全文件系统及其方法 |
US11657092B2 (en) | 2018-12-26 | 2023-05-23 | Micron Technology, Inc. | Data tree with order-based node traversal |
CN109683955B (zh) * | 2018-12-29 | 2022-07-05 | 北京奇艺世纪科技有限公司 | 版本库复制方法及系统 |
CN109683955A (zh) * | 2018-12-29 | 2019-04-26 | 北京奇艺世纪科技有限公司 | 版本库复制方法及系统 |
CN110045983B (zh) * | 2019-04-19 | 2021-06-01 | 腾讯科技(深圳)有限公司 | 版本库管理方法、装置及服务器 |
CN110045983A (zh) * | 2019-04-19 | 2019-07-23 | 腾讯科技(深圳)有限公司 | 版本库管理方法、装置及服务器 |
CN110502523A (zh) * | 2019-08-01 | 2019-11-26 | 广东浪潮大数据研究有限公司 | 业务数据存储方法、装置、服务器及计算机可读存储介质 |
CN111090835A (zh) * | 2019-12-06 | 2020-05-01 | 支付宝(杭州)信息技术有限公司 | 一种文件衍生图的构建方法及装置 |
CN112286880A (zh) * | 2020-10-23 | 2021-01-29 | 北京金山云网络技术有限公司 | 数据存储方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104156278B (zh) | 2017-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104156278A (zh) | 一种文件版本控制系统及其方法 | |
US20230083789A1 (en) | Remote single instance data management | |
US11580066B2 (en) | Auto summarization of content for use in new storage policies | |
US20200233835A1 (en) | Snapshot archive management | |
US8429198B1 (en) | Method of creating hierarchical indices for a distributed object system | |
US11354065B2 (en) | Cloud edition and retrieve | |
US8219524B2 (en) | Application-aware and remote single instance data management | |
US20190095455A1 (en) | File system point-in-time restore using recycle bin and version history | |
US20110131185A1 (en) | Hdag backup system with variable retention | |
US20070094312A1 (en) | Method for managing real-time data history of a file system | |
US11853581B2 (en) | Restoring a storage system using file relocation metadata | |
US20230077938A1 (en) | Managing objects stored at a remote storage | |
EP3454231B1 (en) | Remotely mounted file system with stubs | |
EP3451141B1 (en) | Snapshot archive management | |
US11748299B2 (en) | Managing objects stored at a remote storage | |
Štědronský | A decentralized file synchronization tool |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |