一种分布式对象存储系统闪回方法及装置与流程

文档序号:12177409阅读:382来源:国知局
一种分布式对象存储系统闪回方法及装置与流程

本发明属于海量数据处理技术领域,具体涉及一种分布式对象存储系统的数据闪回方法及装置,解决海量对象数据的版本闪回及过期版本清理问题。



背景技术:

近些年来,博客(blog)、维基百科(wiki)、共享空间(spaces)等新型应用的兴起导致互联网内容的提供方式出现转变,催生了用户创造内容的web2.0时代到来,带动着视频应用、网络游戏、搜索引擎等互联网衍生业务迅速发展。这些应用每天都在产生海量的对象数据,包括图片、文档、视频等,随着这些对象数据在应用中扮演越来越重要的角色(很难想象类似淘宝这样的平台没有了图片会是什么景象),在很多场景下我们越来越希望用于存放这些对象数据的存储系统能够具备闪回的特性,即能够在对象数据被错误更新或删除时能够快速地恢复到错误操作前的某个状态,并且闪回操作应不影响在错误发生期间的其它正常写操作,即闪回不能对正常写操作形成“误伤”。

近些年NOSQL领域得到了大力发展,出现了大量的NOSQL产品,它们以强大的可扩展性,很好地解决了这些海量对象数据的存储问题;然而不幸地是,对于人们所期望的闪回能力,市面上除了传统的关系型数据库(如:oracle、mysql),几乎还没有NOSQL产品具备。由于对象数据的海量特性,关系型数据库越来越被认为不适合对象数据的存储;所以,要增强海量对象数据的安全性,还必须在NOSQL方向上,针对闪回特性有所研究和突破。

对于闪回机制,关系型数据库基本上都是基于数据操作日志设计并实现的,这也是数据存储领域对数据闪回的通行做法。目前的NOSQL产品的存储引擎一部分是基于数据操作日志设计、实现的,对于这些存储引擎,如果要增加数据闪回的能力,就必须掌握对应产品的数据操作日志的具体设计和使用方法,并基于这些对数据操作日志进行挖掘,进而开发出类似数据闪回的功能。这种做法有几个问题:首先,需要耗费大量的精力研究某一款存储引擎的底层实现细节,如果不能吃透底层的实现细节,就难以确保能够正确挖掘数据操作日志;其次,当某一款存储引擎的底层实现有所变化时,又需要重新评估这些变化对闪回特性具体实现的影响,甚至有可能需要重新实现闪回特性;最后,这样一种针对某一款存储引擎的挖掘方法,并不具有一定的普适性,投入性价比不高。对于另外一部分根本就没有引入数据操作日志概念的存储引擎,就连实现闪回的数据基础都不存在了。

在数据闪回问题上,专利《多镜像数据的回滚处理系统和回滚处理方法》(申请号:201310460975.8)和专利《一种实现云数据库回滚的方法及系统》(申请号:201210379626.9)做了相关研究,其提出的方法主要为:建立数据镜像服务器,系统周期性地向镜像服务器上传数据差异镜像(镜像文件可能是数据操作日志文件);数据存储系统接收到用户的回滚指令后,从镜像服务器上下载对应的差异镜像,并执行镜像文件(如镜像文件为数据操作日志,则重演数据操作过程)。上述专利提出的方法在一定程度上解决了数据备份和回滚的问题,然而它们都需要建立额外的数据镜像服务器,并且需要解决镜像文件的定义、序列化和反序列化问题,其复杂度较高;另外,它们都是针对时间周期镜像的备份和回滚,缺乏回滚的精确性(比如只回滚某个特定的记录数据),即难以避免闪回过程对正确操作形成的“误伤”;最后,上述专利似乎较难达到闪回的速度,试想如果要回滚一个大批量的删除操作,上述专利方案将涉及大量的数据下载,不太可能达到瞬间回滚的效果。



技术实现要素:

为解决上述海量对象数据的闪回问题,本发明目的是,提供一种分布式对象存储系统的数据闪回及过期版本数据的自动清除方法;旨在提供一种不依赖于外部备份服务,而实现数据多版本备份,并在需要时能够按照指定版本进行快速数据回滚的方法及装置;同时此方法及装置能够按照数据备份的时效性要求,自动进行过期版本数据的清理,从而释放其占用的相关资源;最后本发明并不是一种基于特定存储引擎的特性而定制的,而是一种建立在存储引擎基本读/写特性之上的方法,因此是一种具有较好的普适性的方法。

本发明的技术方案如下:本发明提供一种分布式对象存储系统闪回装置,包括:数据本体库(primary-database)、数据备份库(back-database)、数据服务版本库(servering-database)三个基本的数据存储单元,后续的闪回及正常的数据读/写功能都基于这三个数据存储单元实现;本装置还包括数据版本生成器(Version-generator)、闪回功能模块(FlashBacker)、过期版本数据清理模块(ObsoletedData-clearner)三个功能模块;

所述数据本体库primary-database,是整个装置中存储对象数据本体的单元,针对某个业务主键的所有历次发生的数据变更都会以独立版本的形式存储于primary-database中,而对过期版本的自动清理将确保primary-database不会因为多版本而持续过度膨胀。

所述数据备份库back-database,每次针对某个业务主键发生数据更新和删除操作都会形成相应的历史版本,这些历史版本信息将被额外地记录到back-database中,以备后续的闪回操作能够从中找到需要回滚的数据版本信息。需要特别说明的是,back-database中实际只记录了历史数据对应的版本信息,而不包含数据本体;另外,back-database中的记录信息实际上都包含在写入记录时的主键中,如此可以充分利用主键索引的高性能特性快速地从back-database中获取到数据的历史版本及对应时间戳信息。

所述数据服务版本库servering-database,本发明中,读操作将首先从此装置中获取某个业务主键对应的服务版本信息,所以此装置中需要存放业务主键对应的服务版本信息,这些信息具体是由写操作(包括新增、删除、更新)对此装置中的对应信息进行修改而来;此外,闪回操作也将修改此装置中的信息,以使得读操作能够获取想要闪回的数据版本信息。需要特别说明的是,servering-database中实际只记录了服务版本信息,而不包含数据本体;另外,servering-database中的记录信息实际上都包含在写入记录时的主键中,如此可以充分利用主键索引的高性能特性快速地从servering-database中获取到数据的历史版本及对应时间戳信息。

所述闪回功能模块FlashBacker,作为数据闪回的控制模块,FlashBacker将从back-database中计算出某个时间点上相应记录了的版本信息,再将此版本信息修复到servering-database中,从而使得外部读操作能够获取到想要的闪回版本数据。

所述过期版本数据清理模块ObsoletedData-clearner,此装置模块主要是通过判定back-database中的数据版本是否过期,并将那些过期的版本数据从primary-database中移除来达到清理垃圾版本数据的目的。

一种分布式对象存储系统闪回方法,包括分布式对象存储系统的数据的写入及读取、数据的删除、数据的闪回及过期版本数据的清除;基于key-value数据模型的存储引擎,构建三个数据存储单元:包括数据本体库(下文称primary-database)、数据备份库(下文称back-database)、数据服务版本库(下文称servering-database);当存储系统接收到对数据的操作请求时,基于三个数据存储单元执行写入及读取、数据的删除、数据的闪回及过期版本数据的清除;

所述数据的写入,包括针对写入数据生成唯一的数据版本号;将数据版本号、数据写入的系统时间戳及写入对象数据的业务主键生成存储主键;根据已有的相同写入对象数据的所有版本,计算最新版本数据并在数据服务版本库单独存储,其他非最新版本在数据备份库进行备份;所述业务主键,它是在存储系统存入对象数据时,为对象数据构建的唯一主键,主键内容主要包括对象数据的业务属性;

所述数据的读取,包括根据数据读取请求,从数据服务版本库读取当前与数据业务主键对应的版本号;基于版本号,从数据本体库读取该对象数据的具体信息;

所述数据的删除,是指对服务中的某一个特定版本数据的删除;包括根据请求删除的数据版本确定该数据的存储主键,并从数据服务版本库删除,同时放入数据备份库中备份留存;删除某指定记录时,并不删除数据本体库中的数据本体,留待以后可能的“闪回”;

特别地,由于数据闪回的需要,因而在数据删除时,仅删除数据服务版本库中数据,保留数据本体库中相关该数据的数据本体;

所述数据的闪回及过期版本数据的清除,包括通过备份数据库计算闪回到的时间点,并根据时间点确认数据闪回到的数据版本和过期的数据版本;依据版本号向数据服务版本库中覆盖性写入该数据的存储主键,同时从备份数据库中删除已过期的数据。

当分布式对象存储系统接收到数据写入请求时,进入步骤1-1;

步骤1-1:调用数据版本生成器(下文称version-generator)生成针对当前预写入的对象数据的唯一版本号,此唯一版本号将作为相同业务主键数据间的区别标识;

步骤1-2:整合步骤1产生的数据版本、当前系统时间戳和业务主键,生成该写入对象数据的存储主键,并将生成的存储主键写入数据本体库primary-database中,作为对该对象数据的记录;

步骤1-3:针对某个业务主键数据在primary-database中可能存在多个不同数据版本,为保证读操作能及时读取到最新的服务数据,primary-database在进行写入操作时计算出当前该业务主键数据在primary-database中的最新数据版本;

步骤1-4:将步骤1-3计算出来的最新版本覆盖性地写入到servering-database中,确保servering-database中只包含一条针对特定业务主键数据的记录,使读操作第一时间获取到新版数据的服务版本信息;

步骤1-5:为保证后续数据闪回的需要,计算出primary-database中针对当前业务主键数据的非最新版本,并将上述这些非最新版本的数据写入到back-database中;

特别地,步骤1-2至步骤1-5向primary-database、back-database、servering-database的写入操作必须是原子的,所谓操作是原子的,是指在具备事务特性的存储引擎中,步骤1-2至步骤1-5在同一事务中完成。

当存储系统接收删除对象数据的请求时,进入步骤2-1:系统接收到需要删除特定业务主键对应的某一个特定版本的数据请求;步骤2-2:根据请求中的业务主键及版本号,在servering-database中寻找对应的数据记录,并从servering-database中删除;步骤2-3:由于所删除的数据当前已不再被执行读操作,将该数据的存储主键写入back-database中,以备数据闪回的需要;

特别地,在删除特定版本的对象数据过程中,步骤2-2-步骤2-3向back-database、servering-database的写入操作必须是原子的,所谓操作是原子的,是指在具备事务特性的存储引擎中,步骤2-2至步骤2-3在同一事务中完成。

当存储系统将某个业务对象数据闪回到指定时间点版本,具体步骤包括:

步骤3-1:由于back-database中保留了某个业务对象数据的所有历史版本信息,因而借助back-database能计算出闪回到指定时间点上该业务对象数据对应的版本号,并将该版本号作为数据回滚的即将回滚的版本号;

步骤3-2:根据步骤1计算所得版本号,向servering-database覆盖性地写入包含该版本号的存储主键;

步骤3-3:根据数据闪回到的数据版本,按照对应的版本号删除该版本数据在back-database中的记录;

步骤3-4:当数据成功闪回之前某一时刻的数据版本时,扫描back-database,按照时间戳查找back-database中是否存在超过当前数据闪回到的时间点;如果有,转步骤3-5;

步骤3-5:根据步骤3-4的判断,在back-database中超过当前数据闪回到的时间点的数据版本,被判定为过期版本数据;

步骤3-6:根据已判定为过期版本的数据,按照存储主键从primary-database和back-database中删除;

特别地,上述闪回操作中对back-database、servering-database的写入操作必须是原子的;对primary-database和back-database的删除操作必须是原子的。

特别地,本发明中数据闪回方法能支持反复闪回,即当用户发现闪回后的版本并非其想要的版本时,可以重新闪回到系统中任意一个有效的版本上,包括闪回操作前的版本,使得闪回操作具有可逆性;

当存储系统接收到读取数据的请求,进入步骤4-1。

步骤4-1:根据读取请求信息,从servering-database中读取对应业务主键的当前服务版本号。

步骤4-2:基于步骤4-1的计算结果,从primary-database读取相应的对象数据记录。

至此整个写入、删除、闪回和垃圾清理的过程描述完毕,而读操作过程则证明了闪回设计对读操作的无害性。

本发明与现有技术相比,其具备如下显著效果:

(1)本发明通过构建三个数据存储单元对各种版本及各状态的数据进行保存,包括数据本体库、数据备份库、数据服务版本库,极大降低了数据因闪回特性而增加的系统复杂度,使用户不需要建立额外数据镜像服务器,也不需要考虑镜像文件的序列化和反序列化问题;

(2)本发明中的闪回机制采用基于记录级的历史版本恢复方式,使数据闪回过程只针对指定的数据集合,避免基于时间周期性镜像技术造成对正确操作的“误伤”;

(3)本发明中数据本体始终存储于primary-database中,并不会因为数据的更新和删除而发生数据本体的移动;闪回操作过程实际主要是在单机内针对服务版本信息的变更,没有了数据“搬移”操作大大提升了闪回操作的效率;

(4)本发明可以支持反复闪回,即当用户发现闪回后的版本并非其想要的版本时,可以重新闪回到系统中任意一个有效的版本上(包括闪回操作前的版本),使得闪回操作具有可逆性,这就大大提升了闪回操作的安全性;

(5)本发明将数据版本和时间戳信息一并作为在数据本体库、数据备份库、数据服务版本库中的存储主键,基于主键索引的高性能特性,可以确保过程不会因为闪回特性而受到影响;另本发明能通过扫描数据备份库判定过期版本数据,确保清理过程的安全性;

总之,本发明分布式对象存储系统的数据闪回方法,即分布式对象存储系统的数据闪回及过期版本数据的自动清除方法,通过建立基于存储引擎基本读/写特性的方法,构建不依赖外部的备份服务,并以数据版本和时间戳作为数据存储的主键,实现对多版本数据的读入、记录和存储,并能依据指定版本执行快速的数据回滚;同时,本发明能按照数据备份的时效性要求,自动进行过期版本数据的清理,从而释放占用的相关资源。

附图说明

图1为本发明实施例的装置结构图;

图2为本发明实施例的数据变更及闪回过程的整体时序图;

图3为本发明实施例的基本存储单元的数据变更过程图;

图4为本发明实施例的过期版本数据清理过程图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,首先对本发明的一种分布式对象存储系统闪回方法及装置中所涉及的一些术语做简单解释:

业务主键:它是在对象存储系统存入对象数据(如:图片)时,为对象数据构建的唯一主键;所述业务主键主要包括对象数据的业务属性(如:其所属的业务应用中对应的库表名称、其在业务库表中的唯一标识等);

存储主键:本发明中的数据闪回实际上是将对象数据恢复到该数据的某个历史版本,这样就存在历史时间点和版本两个概念,所以本发明将数据版本号、当前系统时间戳和业务主键组合形成新的复合的数据主键,下文将这个复合的数据主键称为存储主键,并在发明中以此主键进行数据基本存储;

服务版本:由于数据闪回的需要,本发明在某个时刻针对同一个业务主键存在多个版本的数据,而任意时刻只能有一个数据处于外部读操作处理中,,此版本称为服务版本;

过期版本:本发明中每个写入的数据都被标识写入时间戳,那些写入时间已超过某一限定期限的非服务版本将被视为过期版本,它们将作为垃圾数据被清理;

为了更清晰的阐述本发明的目的、技术方案和优点,下面结合具体实施例和附图对本发明进行详细描述。

如图1所示,为本发明实施例的装置结构,包括:一个数据版本生成器(下文称:Version-generator)101,三个基础数据存储单元:数据本体库(下文称:Primary-database)102、Back-database 103、Servering-database 104,以及两个功能模块:过期版本数据清理模块(下文称:ObsoletedData-clearner)105、闪回功能模块(下文称:FlashBacker)106。

所述数据版本生成器101(Version-generator),是用于针每次写入或更新的数据生成相应的版本号;相同业务主键的数据会因不断的更新而生成多个版本的数据;

所述数据本体库102(primary-database),是整个装置中存储对象数据本体的单元,针对某个业务主键的所有历次发生的数据变更都会以独立版本的形式存储于数据本体库中,而对过期版本的自动清理将确保数据本体库不会因为多版本而持续过度膨胀

所述数据备份库103(back-database),每次针对某个业务主键执行数据更新和删除操作都会形成相应的历史版本,这些历史版本的信息都将被额外地记录到back-database中,以备后续的数据闪回操作能够从back-database中找到需要回滚到的数据版本。

特别地,back-database中只记录历史对象数据对应的版本信息,而不包含数据本体;back-database记录的是对象数据的存储主键,以充分利用主键索引的高性能特性快速地从back-database中获取到数据的历史版本及对应时间戳信息。

所述数据服务版本库104(servering-database),用于存放业务主键对应的服务版本信息;servering-database中的信息通过写操作(包括新增、删除及更新)进行修改;

进一步地,闪回操作也能修改servering-database中的信息,以使读操作能够获取有关“需要闪回到的数据版本”的信息;

特别地,servering-database中只记录服务版本信息,不包含数据本体;且servering-database中记录的信息都已包含在存储主键中,以充分利用主键索引的高性能特性,快速地从servering-database中获取到关于数据的历史版本及对应时间戳的信息;

所述闪回功能模块106(FlashBacker),作为数据闪回的控制模块,FlashBacker将从back-database中计算出某个时间点对应的数据版本信息,上相应记录了的版本信息,同时再将此版本信息修复到servering-database中,进而使外部读操作能够获取到它想要的闪回版本数据。

所述过期版本数据清理模块105(ObsoletedData-clearner),此装置模块主要是通过判定back-database中的数据版本是否过期,将那些过期的版本数据从primary-database中移除,达到清理垃圾版本数据的目的。

如图2所示,为本发明实施例的数据变更及闪回过程的整体时序图;如图3、4所示,为本发明实施实例中的一个具体数据变更场景,为方便下面的图例制作及阐述方便,这里将具体的数据写入操作场景设置为:实施例1、写入业务主键为100的数据,其版本为v1,时间戳为t1;实施例2、更新业务主键为100的数据,对应版本和时间戳分别为v2、t2;实施例3、删除业务主键为100的数据;实施例4、将业务主键为100的数据闪回至t1时刻的版本;实施例5、清除过期数据版本。下面结合图例,分别各个操作场景过程。

实施例1,首次写入业务主键为100的数据,具体步骤有:

步骤202:存储系统接收到数据写入请求后,调用Version-generator 101生成唯一版本号v1;

步骤203:存储系统向Primary-database 102写入对象数据本体,存储主键设计为100~v1~t1。结果就如图3中301所示。

步骤204:由于业务主键为100的记录为首次写入,经Primary-database 102计算,当前关于业务主键为100的数据的最新记录是100~v1~t1。

步骤205~206:将100~v1~t1记录到Servering-database 104中,以100~v1~t1最为记录主键,至于相应的数据可以写入空值。结果就如图3中303所示。

步骤207:由于当前对于业务主键为100的记录没有历史版本,因而无需执行该数据的历史版本在数据备份库103中存储,。结果就如图3-302所示。

实施例2,更新业务主键为100的数据,具体步骤包括:

步骤202:由于业务主键为100的数据之前已写入,当存储系统接收到写入请求后,调用Version-generator 101生成该数据的唯一版本号为v2;

步骤203:存储系统向Primary-database 102写入对象数据本体,主键设计为100~v2~t2。结果就如图3-304所示。

步骤204:由于v2为业务主键为100的最新版本,经Primary-database 102计算,关于业务主键为100的数据的最新数据记录为100~v2~t2。

步骤205~206:将100~v2~t2记录到Servering-database 104中。结果就如图3-306所示。

步骤207:相对于存储主键为“100~v2~t2”的数据,存储主键为“100~v1~t1”则是历史版本,将“100~v1~t1”在Back-database 103中记录保存;本条记录以100~v1~t1作为主键,其他对应的数据值可以为空;结果就如图3中305所示。

实施例3:删除业务主键为100的数据,数据版本为v2,具体步骤有:

步骤210:接收到系统发出的删除业务主键为100的记录请求,,Servering-database 104中查找业务主键为100的服务版本,根据请求中要求删除的版本(v2),,从Servering-database 104中移除100~v2~t2;。结果就如图3中309所示。

步骤211:向Back-database 103中写入以100~v2~t2为主键的记录。结果就如图3-308所示。而Primary-database 102中的数据在此次删除操作过程中保持不变,结果就如图3-307所示。

实施例4:将业务主键为100的数据闪回至t1时刻的数据版本,具体步骤有:

步骤217:接收到系统要求将回业务主键为100闪回至t1时刻的版本的请求,FlashBacker 106首先从Back-database 103中查找业务主键为100对应的t1时刻的版本为v1,并将其从Back-database 103中移除。结果就如图3-311所示。

步骤218:将100~v1~t1写入到Servering-database 104中。结果就如图3-312所示。而Primary-database 102中的数据在此次闪回操作过程中保持不变,结果就如图3-310所示。

清除过期数据版本的过程主要是:假令清除操作开始时,t2已经超出了过期期限;则遍历Back-database 103发现100~v2~t2为过期且不服务的版本,于是从Primary-database 102将100~v2~t2对应的本体数据移除,同时将100~v2~t2位于Back-database 103中的记录移除。最终Primary-database 102的结果如图4-404所示,Primary-database 102的结果如图4-405所示,Servering-database 104如图4-406所示。

所属领域的普通技术人员应当理解:以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1