CN109684338A - 一种存储系统的数据更新方法 - Google Patents
一种存储系统的数据更新方法 Download PDFInfo
- Publication number
- CN109684338A CN109684338A CN201811386532.8A CN201811386532A CN109684338A CN 109684338 A CN109684338 A CN 109684338A CN 201811386532 A CN201811386532 A CN 201811386532A CN 109684338 A CN109684338 A CN 109684338A
- Authority
- CN
- China
- Prior art keywords
- data
- block
- updated
- backup
- updating
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 116
- 230000002159 abnormal effect Effects 0.000 claims abstract description 20
- 230000008569 process Effects 0.000 claims description 50
- 238000012550 audit Methods 0.000 claims description 5
- 230000005856 abnormality Effects 0.000 claims description 4
- 235000015170 shellfish Nutrition 0.000 claims description 2
- 230000009471 action Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 9
- 238000012986 modification Methods 0.000 description 9
- 230000004048 modification Effects 0.000 description 9
- 238000005096 rolling process Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 5
- 238000004590 computer program Methods 0.000 description 3
- 238000012790 confirmation Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 239000002360 explosive Substances 0.000 description 1
- 210000004709 eyebrow Anatomy 0.000 description 1
- 238000005469 granulation Methods 0.000 description 1
- 230000003179 granulation Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1448—Management of the data involved in backup or backup restore
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
一种存储系统的数据更新方法,存储系统中的存储对象以块的形式被存放于至少一个节点上,每个节点存放一个逻辑数据块,各节点上的逻辑数据块共同组成一个完整的存储对象,该数据更新方法包括:获取待更新数据的更新块和备份块;然后将备份块的内容拷贝到逻辑数据块的日志区;继而将更新块的内容拷贝到数据区中待更新数据对应的位置。采用该数据更新方法能够精确地获取和恢复历史数据,并且可以根据版本号,恢复或读取指定版本的数据。此外更新时若发生异常,可以方便地退回到更新前的状态,从而保证了数据的一致性和更新的正确性。
Description
技术领域
本发明涉及数据存储领域,具体涉及一种存储系统的数据更新方法,并且涉及一种基于该数据更新方法的异常处理方法、以及已更新数据的数据读取和回滚过程。
背景技术
由于科学技术的不断进步,特别是互联网等信息技术的飞速发展,使得现代社会每天产生的数据呈爆炸式增长,因此对海量数据存储技术的需求日渐突出。在这一科技背景下,大容量,可扩展,高可用和高可靠的分布式存储系统,正在取代传统的单节点存储系统成为业界的主流。与单节点存储系统相比,多节点的分布式存储系统面对很多复杂的新问题,不仅要有较高的数据存取效率,以满足大量用户同时访问的需求,还要保证数据的安全和正确性。特别是对于电信、金融等领域,对存储系统的可靠性要求更高,需要特别的技术手段来予以保障。
对于一个存储系统来说,发生错误的风险的可能性很大一部分存在于数据更新的过程中。如果在修改数据时系统发生了故障,例如网络中断,机器断电等等,有可能无法正常完成操作,此时不仅新的数据没能正确写入,旧的数据也可能被丢失或者损坏,甚至导致整块数据全部失效。在分布式存储系统中,一块数据的不同部分可能存放于不同的节点。而且分布式存储系统通常采用多副本或纠删码等冗余技术来保障数据的安全,这样即使整块数据都放在相同节点上,多副本中的备份数据,或者纠删码中的原始数据块与校验块(或称编码块),也会被分散于多个节点上。这使得分布式存储系统的数据更新操作变得更加复杂。假设一块数据相关的存储节点有N个,在修改数据时需要对全部N个节点的内容都正确更新,如果其中部分节点完成了更新,而另一部分由于故障等因素没能正确更新,这N个节点就会出现数据版本不一致的情况,由此可能导致整块数据被破坏。在这种情形下,需要对失败的节点再次执行更新操作,直到所有相关节点都被正确更新。但有时故障不能很快地排除,只能将已经更新的节点恢复到未更新之前的状态。也就是说,在任何时刻,都要保证节点间数据的“一致性”,这是分布式存储系统要解决的基本问题。
除了保证数据的正确性,历史数据的可追溯性也是一个高质量存储系统的必备特征。例如查询数据的修改记录,利用快照技术进行数据备份,灾难恢复,误操作的取消等应用场景,都需要准确地记录数据的变化。现代存储系统通常采用日志的方式来实现这一功能。根据用途和性能,日志的层次和粒度可以有多种选择。有整个系统级的日志,记录整个系统的状态变化。亦有文件或对象级的日志,记录文件或存储对象的创建、属性修改、删除等操作,但不会记录数据内容的具体变化,例如Ceph就采用这种日志方式。还有数据内容级的日志,会记录数据内容的具体变化,包括修改位置,修改内容,修改时间等。前两种属于较粗粒度的日志,实现较为简单,但无法对数据内容进行回溯。最后一种属于精细粒度的日志,可以精确地追溯历史数据,但也面对实现复杂度,空间效率和访问效率等难题。
目前数据内容级的更新策略主要有以下几种:
1)全覆盖(Full Overwrite,FO),即直接在待更新的位置用新数据覆盖旧数据。这种方式相当于没有日志,其实现简单,但风险较大,无法满足数据一致性要求,且更新之后无法恢复旧的数据。
2)全日志(Full Logging,FL),把新数据作为日志,存放在系统中专门的日志空间里,同时记录修改的位置(相对数据块起始位置的偏移)和长度。当需要读取数据时,首先读取原始的数据块,然后将被更新的部分用新数据代替。这种方式相对第1)种全覆盖式的策略安全可靠得多。如果更新失败,旧数据仍得以保留。如果要恢复历史数据,只要将新数据删除即可。但采用这种方式每次读取都需要用新数据替换旧数据,影响访问速度。
3)校验日志(Parity Logging,PL),在采用了纠删码的分布式存储系统中,对数据块采用第1)种全覆盖式策略中的就地(in place)更新,对编码块则采用第2)种全日志式策略中的日志更新。这样读取时读到的直接就是修改后的新数据,无需进行替换操作,访问效率较高。当发生错误需要恢复某个历史版本时,首先将编码块恢复成旧数据,然后利用编码块和未修改的数据块,根据所采用的纠删码公式,计算出被修改数据块的旧版本。这样的问题是回滚操作比较复杂,开销较大。而且只适用于每次更新数据块的数量较少的情形。如果被更新数据块的数量超过了其采用纠删码的理论上限,就无法恢复出旧数据了。
4)带保留空间的校验日志(Parity Logging with Reserved space,PLR),其基本与第3)种校验日志式的策略相同,但是需在编码块相邻位置为日志预留出一段空间。当有更新到来时,将更新的变化量(Parity Delta)存放在预留空间中。由于预留空间与数据块所在位置相邻,不仅便于查找定位,访问速度也比较快。但仍然存在回滚操作比较复杂,开销大的问题,并且应用存在局限性,只适用于每次更新数据块的数量较少的情形。如果被更新数据块的数量超过了其采用纠删码的理论上限,就无法恢复出旧数据。
综上所述,一个可靠的存储系统,特别是分布式存储系统,需要通过日志等手段来保证数据更新的正确性以及历史数据的可回溯性。数据内容级的日志技术能够精确地记录数据内容的详细变化,具有重大的应用价值。但在实施中需要控制复杂度,在能够准确恢复历史数据的同时,保证较高的存取效率,不以降低系统性能为前提。现有的方法无法同时满足上述要求。
发明内容
本申请提供一种存储系统的数据更新方法,该方法能够降低存储系统的复杂度,同时在更新发生错误时,采用本方法可以方便地恢复到更新前的状态,从而保证数据的一致性和正确性。
根据本申请的第一方面,本申请提供了一种存储系统的数据更新方法,存储系统中的存储对象以块的形式被存放于至少一个节点上,每个节点存放一个逻辑数据块,各节点上的逻辑数据块共同组成一个完整的存储对象;其包括如下步骤:
获取待更新数据的更新块和备份块;将备份块的内容拷贝到逻辑数据块的日志区;将更新块的内容拷贝到数据区中待更新数据对应的位置。
根据本申请的第二方面,本申请提供了一种数据更新过程的异常处理方法,数据更新过程采用上述的数据更新方法,该异常处理方法用于当在数据更新过程中检测到异常时,将已更新的数据恢复到更新前的状态,其包括如下步骤:
获取数据更新异常的信息;当读取到在用新数据替换旧数据的过程中发生异常时,用待更新数据备份块中旧数据替换被更新后的新数据,然后从日志区删除待更新数据的备份块;当读取到替换过程还没开始,待更新数据的备份块已创建时,从日志区删除待更新数据的备份块;获知待更新数据的备份块还没创建或已删除的信息后,返回更新失败的信息。
根据本申请的第三方面,本申请提供一种对已更新数据的进行数据读取过程,数据更新过程采用上述的数据更新方法,用该过程能够读取之前版本对应的数据,其包括如下步骤:
获取待读取数据的版本号;检查日志区,读取版本号大于待读取数据版本号的备份块;读取逻辑数据块到缓冲区;用之前读取的备份块中的旧数据替换当前逻辑数据块中对应的部分。
根据本申请的第四方面,本申请提供一种已更新数据的数据回滚过程,数据更新过程采用上述的数据更新方法,用该过程将数据回滚到之前版本对应的数据,其包括如下步骤:
读取数据将要回滚的版本号;检查日志区,读取版本号大于数据将要回滚到的版本号的备份块;用之前读取的备份块中的旧数据替换当前逻辑数据块中的对应部分;删除之前读取的备份块并释放空间。
根据本申请的第五方面,本申请提供一种计算机可读存储介质,包括程序,其能够被处理器执行以实现上述方法。
依据上述实施例的存储系统中的数据更新方法,降低了对更新操作原子性的要求和存储系统的复杂度,同时在更新发生错误时,采用本方法可以方便地恢复到更新前的状态,从而保证数据的一致性,并且也为读取历史数据和数据回滚操作带来了便利。
附图说明
图1为存储系统的数据更新过程的示意图;
图2为一种实施例的数据更新过程的流程图;
图3为一种实施例的更新异常处理过程的流程图;
图4为一种实施例的读取历史数据过程的流程图;
图5为一种实施例的用旧数据替换新数据过程的示意图;
图6为一种实施例的备份块并集运算过程的示意图;
图7为一种实施例的数据回滚操作过程的流程图;
图8a为一种实施例的正常情况下数据回滚操作的时序图;
图8b为一种实施例的发生故障时数据回滚操作的时序图。
具体实施方式
下面通过具体实施方式结合附图对本发明作进一步详细说明。其中不同实施方式中类似元件采用了相关联的类似的元件标号。在以下的实施方式中,很多细节描述是为了使得本申请能被更好的理解。然而,本领域技术人员可以毫不费力的认识到,其中部分特征在不同情况下是可以省略的,或者可以由其他元件、材料、方法所替代。在某些情况下,本申请相关的一些操作并没有在说明书中显示或者描述,这是为了避免本申请的核心部分被过多的描述所淹没,而对于本领域技术人员而言,详细描述这些相关操作并不是必要的,他们根据说明书中的描述以及本领域的一般技术知识即可完整了解相关操作。
另外,说明书中所描述的特点、操作或者特征可以以任意适当的方式结合形成各种实施方式。同时,方法描述中的各步骤或者动作也可以按照本领域技术人员所能显而易见的方式进行顺序调换或调整。因此,说明书和附图中的各种顺序只是为了清楚描述某一个实施例,并不意味着是必须的顺序,除非另有说明其中某个顺序是必须遵循的。
本文中为部件所编序号本身,例如“第一”、“第二”等,仅用于区分所描述的对象,不具有任何顺序或技术含义。而本申请所说“连接”、“联接”,如无特别说明,均包括直接和间接连接(联接)。
在本发明实施例中,提供了一种存储系统的数据更新方法,本方法采用数据内容级的日志,能够精确地获取和恢复历史数据,并且可以根据版本号,恢复或读取指定版本的数据。此外采用该更新方法对数据进行更新时若发生异常,可以方便的退回到更新前的状态,从而保证了数据的一致性和更新的正确性。
数据更新作为存储系统的常用操作,如果在数据更新过程中发生异常,极有可能导致更新失败,以至于数据的丢失甚至无法修复。因此高质量的存储系统必须保证数据更新的正确性,特别是分布式存储系统还需要保证节点间数据的一致性。此外,在数据更新过程中,有时需要读取历史数据或将数据回滚到之前的版本,其也是高质量存储系统必备的功能,本实施例旨在根据提供一种使存储系统具备上述功能的数据更新方法。
本发明实施例提供了一种带日志的全覆盖(Full Overwrite with Logging,FOL)数据更新方法,并且采用了数据内容级的日志。该数据更新方法应用于存储系统,在存储系统中,通常有多个存储对象,每个存储对象通常都以块的形式被存放于至少一个节点上,记节点数量为N,则N≥1,每个节点上放一个逻辑数据块,所有的逻辑数据块共同组成一个完整的存储对象。对存储对象内容的修改,实际上是对逻辑数据块进行更新操作,记每次对存储对象内容进行修改时,对应需要更新的逻辑数据块数量为n,则n≤N,为了叙述的方便,在以下描述中用“数据块”表示每个节点上的逻辑数据块。
请参考图1,在本实施例中,存储系统中存储数据块的节点包括数据区和日志区,其中数据区用于存储数据块当前的数据内容,即最新更新后的数据内容,日志区主要用于存储待更新数据的更新信息和被替换的旧数据的内容,在具体实施例中,将更新信息连同被替换的旧数据内容一起称为“备份块”。其中,日志区可以是从节点存储空间中专门分配出来的空间,也可以是采用如同“带保留空间的校验日志”(PLR)的方法,将日志区放在与数据块相邻的预留空间里以提高访问速度。在有的实施例中,存储数据块的节点还包括缓冲区,缓冲区主要在需要读取历史数据时使用,用于临时存储某个历史版本的数据,在方便查看的同时,不会影响到最新版本的数据。
本实施例中,采用图1所示的数据更新方法对存储系统中存储对象的内容进行更新。在初始状态,数据区存储的数据块的版本号记为V0,经过更新后的数据块的版本号用Vi(i≥1)表示,且每次更新时,都会用新数据内容对数据块中一部分相邻的待更新数据或至少两部分不相邻的待更新数据进行替换。其中,用于替换的新数据内容称为“更新块”,但是,具体实施例中,除了要知道更新后的新数据内容,还需要知道新数据内容替换数据的位置,以及为了方便后续读取之前版本的数据,还需要记录每次更新的版本号。为此,每个更新块中除了待更新数据更新后的新数据内容之外,还包括待更新数据的更新信息,更新信息至少包括如下两部分信息:
1)更新位置,用于记录待更新数据的位置信息,即数据块中的需要更新的数据内容的位置。在具体实施例中,更新位置可以用起始位置和更新长度表示,例如用待更新数据相对于数据块起始位置的偏移量表示起始位置,记为Pi;用连续被更新的字节的长度表示更新长度,记为Li;在具体实施例中,更新位置可以记为(Pi,Li),表示在数据块中,从Pi开始有连续Li个连续字节被更新。在其他的实施例中,更新位置可以用起始位置和终止位置表示,例如用待更新数据相对于数据块起始位置的偏移量表示起始位置,记为Pi;用待更新数据相对于数据块终止位置的偏移量表示终止位置,记为Qi;在具体实施例中,更新位置可以记为(Pi,Qi),表示在数据块中,从Pi开始到Qi为止的连续字节被更新。在其他的实例中,有的需要对至少两部分不相邻的待更新数据进行更新操作,此时需要分别针对各部分待更新数据给出相应的更新位置,如当有两部分待更新数据时,采用上述方法,更新位置可以分别记为(Pi,Li),(Pj,Lj),或者(Pi,Qi),(Pj,Qj)。优选的,在本实施例所要描述的数据更新方法中,将待更新数据的更新位置用起始位置和更新长度表示,即表示为(Pi,Li)的形式。
2)版本号,用于记录待更新数据更新完成后数据块的版本编号,在具体实施例中用Vi表示。需要说明的是,对分布式存储系统,一个存储对象可能被分成多个数据块存储在不同的节点上,并且每次更新可能只针对其中部分节点,这样每一个节点上,同一个数据块两次更新期间有可能存在其他节点上数据块的更新,此时为了保证一个存储对象版本号的连续性,版本编号以存储对象层面为基准,即若存储对象第一次更新内容为一个节点上的数据块,第二次更新内容为另外一个节点上的数据块时,虽然存储对象的第二次更新对另外一个节点上的数据块来说是第一次更新,对应数据块的版本号也记为V2,而不是V1。如图1所示为对一个节点上数据块更新的示意图,其中该数据块的第一次更新,即为对应存储对象第一更新,版本号记为V1;该数据块的第二次更新,为对应存储对象的第四次更新,版本号记为V4。
综上所述,待更新数据的更新信息可以表示为([(Pi,Li)],Vk)或([(Pi,Li),(Pj,Lj)],Vk)的形式。
在有的实施例中,待更新数据的更新信息还包括时间戳,在具体实施例中用Ti表示,也就是说时间戳是可选项。在具体实施例中,时间戳可以是当前数据更新开始的时间,例如20181010150123370,在有的实施例中,也可以是此次数据更新完成的时间。如果有时间戳,可以按照修改时间读取历史数据和查找修改记录,否则就只能按照版本号来读取历史数据和查找修改记录。但是如果没有版本号,就无法按照用户需求读取或恢复某一版本的数据,但是不影响读取和恢复原始版本,即V0版本的数据,也不影响最新版本的数据。当待更新数据的更新信息包括时间戳时,更新信息可以表示为([(Pi,Li)],Vk,Tk)或([(Pi,Li),(Pj,Lj)],Vk,Tk)。
请参考图2,基于上述存储系统的数据更新方法包括如下步骤:
步骤101,获取数据块中待更新数据的更新块和备份块。根据数据块中待更新数据的位置信息确定当前数据块的更新位置,在本实施例中,优选的的用起始位置和更新长度表示更新位置,如图1中所示,数据块第一次更新的更新位置表示为(P1,L1)。然后根据此次更新之前数据块的版本号确定此次更新后数据块的版本号,如图1中,第一次更新前数据块版本号为V0,第一次更新后数据块版本号为V1,此时第一次更新的更新信息中版本号记为V1。在有的实施例中,还根据数据更新的当前时间记录时间戳信息,时间戳用Ti表示,其中i与版本号对应的数字一致。综上所述,可以确定待更新数据块的更新信息,记为([(P1,L1)],V1,T1)。待更新信息确定之后,更新信息与用于替换待更新数据的新数据一起组成更新块,与被替换的旧数据一起组成备份块,以此获取数据块中待更新数据的更新块和备份块。
步骤102,将备份块的内容拷贝到数据块的日志区。如图1所示,在第1次更新中,数据块中处于从P1到P1+L1部分的数据内容将被更新,此时为了在保留原始数据的同时对数据块进行更新,将更新位置(P1,L1)处的旧数据连同此次更新的版本号(和时间戳)一起拷贝到日志区保存。同理,当数据块存在至少两部分不相邻的待更新数据需要更新时,需要将两部分对应的旧数据拷贝到日志区,如图1数据块第2次更新时,更新位置为(P2,L2)和(P3,L3)两部分的数据需要更新,此时需要将两区域处的旧数据连同版本号(和时间戳)拷贝到日志区。
步骤103,将更新块的内容拷贝到数据区中待更新数据对应的位置。在步骤102中已经将待更新数据区域的旧数据存储到日志区,为了加快对新数据的读取速度,此步骤将用新数据替换旧数据,将步骤101中获得的更新块拷贝到数据区中待更新数据对应的位置。如图1所示,在第1次更新中,用新数据替换位置处于(P1,L1)处的旧数据;在第2次更新中,用两区域的新数据分别替换对应位置处的旧数据。
在本实施例中,将更新块的内容拷贝到数据区中待更新数据对应的位置即可完成数据更新过程。在有的实施例中,还需要根据更新块的内容更新存储对象的所有数据块的版本号。由于一个存储对象通常以块的形式存放在多个节点上,故当对其中某个节点上的数据进行更新后,需要将存储对象对应的每个节点上的数据块都进行版本号的更新,以保证存储对象版本号的一致性,即需要根据当前更新数据块的版本号对存储对象的所有数据块的版本号进行更新。如图1所示,针对存储对象的第1次更新操作涉及到该数据块,产生了一个版本号V1的备份块,第2次、第3次的时候修改的是其他节点上的数据块,第4次更新的时候再次涉及到了该数据块,所以数据块的版本号为V4,其对应的更新块和备份块版本号也是V4。在另一实施例中,还可以由服务器集中对存储对象的版本号进行记录,而无需在存储对象的每个数据块上对版本号进行更新。
利用图2所述的数据更新方法对数据进行更新,能够精确的记录数据内容的详细变化,并且当在更新过程中发生异常时,可以在排除异常后继续按照上述步骤进行更新操作,同时也可以将已更新的数据块恢复到更新前的状态,以保证数据的一致性和更新的正确性。如图3所示,当数据更新过程中发生异常时,将已更新数据块恢复到更新前状态的异常处理方法包括以下步骤:
步骤111,获取数据更新异常信息。当存储系统发生故障时,例如网络中断、机器断电等,有可能无法正常完成更新操作,即发生数据更新异常的情况。当系统恢复正常后,将根据数据更新过程,读取数据更新的异常信息,得知数据更新已经进行到哪一步。
步骤112,判断是否是用新数据替换旧数据的过程中发生异常,即执行步骤103将更新块的内容拷贝到数据区中的待更新数据对应的位置的过程中发生异常。若是则执行步骤113,若不是则执行步骤114。
步骤113,用日志区中待更新数据的旧数据替换被更新后的新数据。即执行步骤103的逆过程。因日志区中可能存在该数据块多次更新的旧数据,此时应根据发生异常的数据更新过程的版本号选择原始数据,避免因选择失误再次出现异常。
步骤114,判断备份块是否已经创建,因备份块创建后直接存储在日志区中,故此时判断备份块是否已经创建,实际上是判断数据更新过程异常是否是发生在向日志区拷贝备份块的过程中。若数据更新异常发生在向日志区拷贝备份块的过程中,则执行步骤115,若不是则执行步骤116.
步骤115,从日志区中删除待更新数据的备份块。与步骤113相同的理由,因日志区中可能存在该数据块多次更新的备份块,此时应选择发生异常的备份块版本,以避免因选择失误再次出现异常。
步骤116,返回更新失败。经过步骤111-115操作后,数据已然恢复到更新前的状态,且日志区中备份块已经被删除或者还没开始创建,此时返回更新失败,再根据需要选择重新更新或者停止更新。
因在分布式存储系统中,一个存储对象往往被分成多个数据块。每次更新操作可能涉及多个数据块,则需要每个数据块都返回更新成功,才能宣布本次更新操作成功。如果存在更新不成功的数据块,所有涉及到的数据块都需要通过上述异常处理方法,退回到更新前的状态,以保证数据的一致性。
采用本实施例所示的数据更新方法,数据区存储的数据为最新得到的数据块,需要读取当前数据时,直接读取即可完成,具有较高的读取效率。但在实际应用中,有时需要读取之前版本的历史数据,则当数据更新过程采用本实施例所述的数据更新方法时,如图4所示,对已更新数据的读取过程包括如下步骤:
步骤121,获取待读取数据的版本号。根据用户输入或者系统命令,得到当前要读取的历史数据的版本号。当版本号为当前数据所处版本时,可以直接读取,下面不再对这种情况进行阐述。
步骤122,读取版本号大于待读取数据版本号的备份块。记需要获得版本号为Vi的数据,首先要检查日志区,将其中版本号大于Vi的备份块读取出来,假设一共有k个这样的备份块,版本号分别为Vj1,Vj2,......,Vjk,其中j1<j2<......<jk,则在本步骤中需从日志区中将这k个备份块读取出来。如图5所示,若用户指定读取版本号为V2的数据,则本数据块中版本号大于V2的备份块只有1个,即只需读取版本为V4的备份块,此备份块中包含两部分不相邻的数据。
步骤123,将最近更新后的数据块读取到缓冲区。最近更新后的数据块即为当前状态下的数据块,即已完成了当前时间之前的所有更新操作的数据块。
步骤124,用步骤122中读取的备份块中的旧数据替换步骤123中读取到缓存区中的数据块的相应数据,在替换过程中,要保证备份块中旧数据的位置信息与要替换的数据块中的位置信息一致。因步骤122中读取的备份块中的旧数据有可能存在位置重叠的情况,故为了保证替换的正确性,按备份块版本号从大到小的顺序进行替换,以步骤122中的k个备份块为例,首先用版本号为Vjk的备份块替换,然后是Vjk-1,......,直到Vj1为止,即可得到版本号为Vi的数据块。再如图5所示,用版本号为V4的备份块中的两部分旧数据分别替换版本号为V4的数据块中的相应位置的数据,即可得到版本号为V2的数据块。对存储对象的所有数据块执行以上步骤,即可得到待读取版本的数据。
在有的实施例中,也可以根据时间戳信息读取历史数据,此时只需根据时间戳信息查找出对应的版本号,然后执行上述过程即可得到待读取版本的数据。在有的实施例中,只根据时间戳信息读取历史数据,此时需根据用户指定的时间戳信息在日志区中查找数据更新时间位于时间戳信息之后的备份块,然后按照从后往前的顺序依次进行替换即可得到待读取版本的数据。
按照步骤124描述的过程用备份块中旧数据进行替换时,需要对多个备份块中的旧数据依次进行替换操作,此时当需要读取的历史数据版本较早时,替换效率较低,特别是当各备份块位置信息重叠较多时,需要针对重叠区域进行多次替换操作,在一定程度上影响了数据的读取效率。针对这一不足,本发明提出了一种提高历史数据读取效率的方法,具体过程如下:
记步骤122中读取的备份块数量为k,对k个备份块先进行并集运算,得到一个(P,L)列表,然后再用(P,L)列表中的旧数据进行替换,采用此种方法,只需进行一次替换操作即可得到待读取版本的数据块,对每个数据块都进行相同的操作,即可得到待读取版本的数据。在对备份块进行并集运算过程中,为了操作方便,可以按照从高版本到低版本的顺序来计算并集,也就是说,先对版本号为Vjk和Vjk-1的备份块求并集,得到版本号为Vjk-1的合并备份块,然后用该合并备份块与版本号为Vjk-2的备份块求并集,以此类推,直到全部k个备份块都完成并集运算。在对两个备份块求并集时,如果两个备份块的位置有重叠,重叠的部分以较旧版本的数据内容为准,而未重叠的部分以各自的内容为准。请参考图6,记两个待求并集的备份块为Vm和Vn,其中m<n,两备份块中更新位置的起始位置和更新长度分别为(100,300)和(200,500),即备份块Vm的更新位置为100到400,备份块Vn的更新位置为200到700,那么在从200到400的位置区域两备份块发生重叠,又因m<n,则此时重叠位置区域需要版本号为Vm的备份块中的数据,即将产生起始位置和更新长度分别为(100,300)和(400,300)的两个合并备份块,前者版本为Vm,数据内容采用原版本为Vm的备份块,后者版本为Vn,内容采用原版本为Vn的备份块中从400到700的数据。采用这种方式最终可以获得一个包含若干互不重叠区域的合并备份块以及一个(P,L)列表。
步骤123中是将当前数据块所有区域的数据读取到缓冲区中,但从替换过程可知,在具体操作中,数据块中步骤122读取备份块对应位置的数据将被替换,故为了提高效率,可以减少不必要的读取工作,即在步骤123中,可以只读取备份块或合并备份块不包含的那些区域的数据。
采用上述两种方法对步骤123和124进行优化,可以保证每个位置上的数据只读取一次,从而减少了运算开销,提高了读取效率。在有些实施例中,利用时间戳信息读取历史数据时,也可用上述两种方法提高读取的效率,这里不再赘述。
采用本实施例所示的数据更新方法,也便于对数据进行回滚操作,其对每个数据块进行回滚操作的过程与历史数据的读取过程类似,如图7所示,对已更新数据的数据回滚过程包括如下步骤:
步骤131,获取数据将要回滚到的版本号。此步骤与步骤121类似,为通过用户输入或系统命令得到系统将要回滚到的版本号。
步骤132,读取版本号大于数据将要回滚到的版本号的备份块。此步骤采用与步骤122相同的方法,此处不再赘述。
步骤133,用步骤132中读取的备份块中旧数据替换当前版本数据中相应区域的数据。此步骤采用与步骤124相同的方法进行替换,为了提高回滚效率,也可以采用上述的备份块并集运算的方式。
步骤134,删除步骤132中读取的备份块并释放空间。因数据回滚操作与读取历史数据的目的不同,系统读取历史数据只是用于查看之前版本的数据,当前最新版本的数据仍然要保留以备他用;而数据回滚操作时将数据回滚到指定版本,之前对数据的更新操作中位于指定版本之后的数据版本将不再保留,故位于指定版本之后的备份块也就失去了价值,需要将其删除以释放空间。
对于分布式存储系统,只有存储对象的所有数据块都回滚到指定版本或时间点,才算完成回滚操作,此时才可以删除备份块。如果其中有某些数据块出现故障回滚失败,则需要重复更新操作,将所有相关数据块都恢复到回滚前的状态,以保证数据的一致性。具体时序过程如图8a和图8b所示:
管理员向存储对象的所有数据块所在节点发出回滚请求,假设存储对象存储于N个节点中,则管理员向N个节点都发出回滚请求,各节点收到请求后按照上述步骤对存储于其中的数据块进行回滚操作,完成后向管理员发送完成确认信息,管理员收到全部N个节点返回的完成确认消息后发送结束回滚的完成指示给各个节点,各节点收到完成指示后方可删除无用的备份块;若管理员收到的是回滚错误的失败消息,将向N个节点发送取消回滚的指示,各节点收到指示后,对已经回滚的数据块区域做反向更新操作。此外,如果超时未收到结束回滚的指示,也启动反向的更新操作以取消回滚,保证数据的一致性。
本发明既适用于单节点的存储系统,也适用于多节点的存储系统。特别是在分布式存储系统中,本发明所使用的数据更新方法降低了对更新操作原子性的要求和存储系统的复杂度,同时在更新发生错误时,采用本方法可以方便地恢复到更新前的状态,从而保证数据的一致性,并且也为读取历史数据和数据回滚操作带来了便利。
本领域技术人员可以理解,上述实施方式中各种方法的全部或部分功能可以通过硬件的方式实现,也可以通过计算机程序的方式实现。当上述实施方式中全部或部分功能通过计算机程序的方式实现时,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器、随机存储器、磁盘、光盘、硬盘等,通过计算机执行该程序以实现上述功能。例如,将程序存储在设备的存储器中,当通过处理器执行存储器中程序,即可实现上述全部或部分功能。另外,当上述实施方式中全部或部分功能通过计算机程序的方式实现时,该程序也可以存储在服务器、另一计算机、磁盘、光盘、闪存盘或移动硬盘等存储介质中,通过下载或复制保存到本地设备的存储器中,或对本地设备的系统进行版本更新,当通过处理器执行存储器中的程序时,即可实现上述实施方式中全部或部分功能。
以上应用了具体个例对本发明进行阐述,只是用于帮助理解本发明,并不用以限制本发明。对于本发明所属技术领域的技术人员,依据本发明的思想,还可以做出若干简单推演、变形或替换。
Claims (13)
1.一种存储系统的数据更新方法,所述存储系统中的存储对象以块的形式被存放于至少一个节点上,每个节点存放一个逻辑数据块,各节点上的逻辑数据块共同组成一个完整的存储对象;
其特征在于,所述数据更新方法包括如下步骤:
获取待更新数据的更新块和备份块;
将所述备份块的内容拷贝到所述逻辑数据块的日志区;
将所述更新块的内容拷贝到数据区中待更新数据对应的位置。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括在将所述更新块的内容拷贝到数据区中待更新数据对应的位置后,根据更新块的内容更新相应逻辑数据块的版本号。
3.根据权利要求1所述的方法,其特征在于,所述更新块的内容包括:待更新数据的新数据和待更新数据的更新信息;
待更新数据的更新信息包括:用于记录待更新数据的位置信息的更新位置、以及用于记录待更新数据更新完成后数据块版本的版本号。
4.根据权利要求2所述的方法,其特征在于,待更新数据的所述更新信息还包括时间戳,所述时间戳用于记录所述逻辑数据块各次数据更新的时间。
5.根据权利要求2所述的方法,其特征在于,对逻辑数据块进行一次更新时,同一个逻辑数据块上有一部分相邻的待更新数据被更新,或者同一个逻辑数据块上有至少两部分不相邻的待更新数据被更新;当同一个逻辑数据块上有至少两部分不相邻的待更新数据被更新时,所述更新位置包括至少两部分待更新数据的位置信息,即将包含至少两部分待更新数据的旧数据的备份块拷贝到日志区,然后将包含至少两部分待更新数据的更新块拷贝到所述逻辑数据块的至少两部分待更新数据对应的位置。
6.一种数据更新过程的异常处理方法,所述数据更新过程采用如权利要求1-5中任一项所述的数据更新方法,其特征在于,所述方法用于当在数据更新过程中检测到异常时,将已更新的数据恢复到更新前的状态,所述方法包括如下步骤:
获取数据更新异常的信息;
当读取到在用新数据替换旧数据的过程中发生异常时,用待更新数据备份块中旧数据替换被更新后的新数据,然后从日志区删除待更新数据的备份块;
当读取到替换过程还没开始,待更新数据的备份块已创建时,从日志区删除待更新数据的备份块;
获知待更新数据的备份块还没创建或已删除的信息后,返回更新失败的信息。
7.一种已更新数据的数据读取过程,所述已更新数据的数据更新过程采用如权利要求1-5中任一项所述的数据更新方法,其特征在于,用所述过程读取之前版本对应的数据,所述过程包括如下步骤:
获取待读取数据的版本号;
检查日志区,读取版本号大于待读取数据版本号的备份块;
读取逻辑数据块到缓冲区;
用之前读取的备份块中的旧数据替换当前逻辑数据块中对应的部分。
8.一种已更新数据的数据回滚过程,所述已更新数据的数据更新过程采用如权利要求1-5中任一项所述的数据更新方法,其特征在于,用所述过程将数据回滚到之前版本对应的数据,所述过程包括如下步骤:
读取数据将要回滚的版本号;
检查日志区,读取版本号大于数据将要回滚到的版本号的备份块;
用之前读取的备份块中的旧数据替换当前逻辑数据块中的对应部分;
删除之前读取的备份块并释放空间。
9.根据权利要求7或8所述的方法,其特征在于,用之前读取的备份块中的旧数据替换当前逻辑数据块中的对应部分包括:对之前读取的备份块,按照版本号从大到小的顺序依次进行替换,直到之前读取的所有备份块中内容完成替换为止。
10.根据权利要求7或8所述的方法,其特征在于,用之前读取的备份块中的旧数据替换当前逻辑数据块中的对应部分包括:对之前读取的各备份块做并集运算,得到包含各备份块旧数据信息的合并备份块,然后用合并备份块中内容替换当前逻辑数据块中的对应数据。
11.根据权利要求7所述的方法,其特征在于,读取逻辑数据块到缓冲区包括:只读取之前读取的备份块中不包含的位置上的数据。
12.根据权利要求8所述的方法,其特征在于,只有存储对象的所有逻辑数据块都回滚到指定的版本时,才能删除相应的备份块。
13.一种计算机可读存储介质,其特征在于,包括程序,所述程序能够被处理器执行以实现如权利要求1-12中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811386532.8A CN109684338A (zh) | 2018-11-20 | 2018-11-20 | 一种存储系统的数据更新方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811386532.8A CN109684338A (zh) | 2018-11-20 | 2018-11-20 | 一种存储系统的数据更新方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109684338A true CN109684338A (zh) | 2019-04-26 |
Family
ID=66185423
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811386532.8A Pending CN109684338A (zh) | 2018-11-20 | 2018-11-20 | 一种存储系统的数据更新方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109684338A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111090663A (zh) * | 2019-12-25 | 2020-05-01 | 上海金仕达软件科技有限公司 | 事务并发控制方法、装置、终端设备及介质 |
CN111476670A (zh) * | 2020-04-08 | 2020-07-31 | 杭州复杂美科技有限公司 | 区块链回滚保险方法、设备和存储介质 |
CN111522825A (zh) * | 2020-04-09 | 2020-08-11 | 陈尚汉 | 基于校验信息块共享缓存机制的高效信息更新方法及系统 |
CN114237495A (zh) * | 2021-11-29 | 2022-03-25 | 歌尔科技有限公司 | 数据更新方法、电子设备及计算机可读存储介质 |
CN117170696A (zh) * | 2023-11-02 | 2023-12-05 | 佛山市钒音科技有限公司 | 一种空调器的ota升级方法及系统 |
WO2023241350A1 (zh) * | 2022-06-17 | 2023-12-21 | 重庆紫光华山智安科技有限公司 | 数据处理方法、装置、数据接入端及存储介质 |
CN118170783A (zh) * | 2024-05-11 | 2024-06-11 | 北京爱宾果科技有限公司 | 分布式存储系统的数据处理方法、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103403679A (zh) * | 2011-12-31 | 2013-11-20 | 华为技术有限公司 | 易失性存储设备持久化过程中的数据更新方法及装置 |
CN105872040A (zh) * | 2016-03-30 | 2016-08-17 | 华中科技大学 | 一种利用网关节点缓存优化分布式块存储写性能的方法 |
CN107544873A (zh) * | 2017-08-28 | 2018-01-05 | 郑州云海信息技术有限公司 | 一种存放备份数据的备份系统和方法 |
CN108701005A (zh) * | 2016-02-18 | 2018-10-23 | 华为技术有限公司 | 数据更新技术 |
-
2018
- 2018-11-20 CN CN201811386532.8A patent/CN109684338A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103403679A (zh) * | 2011-12-31 | 2013-11-20 | 华为技术有限公司 | 易失性存储设备持久化过程中的数据更新方法及装置 |
CN108701005A (zh) * | 2016-02-18 | 2018-10-23 | 华为技术有限公司 | 数据更新技术 |
CN105872040A (zh) * | 2016-03-30 | 2016-08-17 | 华中科技大学 | 一种利用网关节点缓存优化分布式块存储写性能的方法 |
CN107544873A (zh) * | 2017-08-28 | 2018-01-05 | 郑州云海信息技术有限公司 | 一种存放备份数据的备份系统和方法 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111090663A (zh) * | 2019-12-25 | 2020-05-01 | 上海金仕达软件科技有限公司 | 事务并发控制方法、装置、终端设备及介质 |
CN111090663B (zh) * | 2019-12-25 | 2023-07-07 | 上海金仕达软件科技股份有限公司 | 事务并发控制方法、装置、终端设备及介质 |
CN111476670A (zh) * | 2020-04-08 | 2020-07-31 | 杭州复杂美科技有限公司 | 区块链回滚保险方法、设备和存储介质 |
CN111476670B (zh) * | 2020-04-08 | 2023-05-30 | 杭州复杂美科技有限公司 | 区块链回滚保险方法、设备和存储介质 |
CN111522825A (zh) * | 2020-04-09 | 2020-08-11 | 陈尚汉 | 基于校验信息块共享缓存机制的高效信息更新方法及系统 |
CN114237495A (zh) * | 2021-11-29 | 2022-03-25 | 歌尔科技有限公司 | 数据更新方法、电子设备及计算机可读存储介质 |
WO2023241350A1 (zh) * | 2022-06-17 | 2023-12-21 | 重庆紫光华山智安科技有限公司 | 数据处理方法、装置、数据接入端及存储介质 |
CN117170696A (zh) * | 2023-11-02 | 2023-12-05 | 佛山市钒音科技有限公司 | 一种空调器的ota升级方法及系统 |
CN117170696B (zh) * | 2023-11-02 | 2024-03-12 | 佛山市钒音科技有限公司 | 一种空调器的ota升级方法及系统 |
CN118170783A (zh) * | 2024-05-11 | 2024-06-11 | 北京爱宾果科技有限公司 | 分布式存储系统的数据处理方法、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109684338A (zh) | 一种存储系统的数据更新方法 | |
US7191299B1 (en) | Method and system of providing periodic replication | |
US6934877B2 (en) | Data backup/recovery system | |
US7181476B2 (en) | Flashback database | |
US7814057B2 (en) | Page recovery using volume snapshots and logs | |
US7225371B2 (en) | Method and apparatus for storing and retrieving multiple point-in-time consistent data sets | |
US7546485B2 (en) | Method and system for efficient journal-based resynchronization | |
US7987158B2 (en) | Method, system and article of manufacture for metadata replication and restoration | |
US20150213100A1 (en) | Data synchronization method and system | |
US20090006500A1 (en) | Namespace replication program, namespace replication device, and namespace replication method | |
CN109739935A (zh) | 数据读取方法、装置、电子设备以及存储介质 | |
US20210165575A1 (en) | Copy-on-write systems and methods | |
US11093387B1 (en) | Garbage collection based on transmission object models | |
CN111078667B (zh) | 一种数据迁移的方法以及相关装置 | |
US9792941B2 (en) | Method and system for data replication | |
CN102955720A (zh) | 一种提高ext文件系统稳定性的方法 | |
CN101809558A (zh) | 远程异步数据复制系统和方法 | |
US10628298B1 (en) | Resumable garbage collection | |
US20180225052A1 (en) | Modifying membership of replication groups via journal operations | |
US10884871B2 (en) | Systems and methods for copying an operating source volume | |
US20110208694A1 (en) | 'Efficient Data Synchronization in a Distributed Data Recovery System' | |
CN105302667A (zh) | 基于集群架构的高可靠性数据备份与恢复方法 | |
CN105049258A (zh) | 网络容灾系统的数据传输方法 | |
US7856419B2 (en) | Method and system for storage replication | |
CN107111534A (zh) | 一种数据处理的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190426 |
|
RJ01 | Rejection of invention patent application after publication |