写数据的方法及装置与流程

文档序号:11275930阅读:164来源:国知局
写数据的方法及装置与流程

本发明涉及数据存储技术领域,尤其涉及写数据的方法及装置。



背景技术:

随着信息技术的发展,数字化资源越来越多,数据的安全与备份越发重要。目前通常使用快照技术实现对数据的备份,根据存储网络工业协会(storagenetworkingindustryassociation,snia)的定义,快照是关于制定数据集合的一个完全可用拷贝,包含相应数据在拷贝初始化时刻的映像。现有的快照主流技术分为两种,一种是第一次写时复制(copyonfirstwrite,cofw),另一种技术是写时重定向(redirectonwrite,row)。

在分布式存储的场景下,数据的存储是以块(chunk)为最小单位的,然而目前在写时重定向的快照技术中进行写操作时,通常分配一个chunk大小的新chunk空间进行写操作,当写操作中写入数据小于chunk大小时,先读取源卷中旧chunk的数据,然后进行数据合并再写入新chunk空间,由于这种写数据的方法需要进行先读取数据、合并数据再写入chunk,写操作过程较繁琐,特别是当写操作频繁时,大量的读取、合并操作降低了写数据的性能。



技术实现要素:

本发明的主要目的在于提供一种写数据的方法及装置,旨在对于写时重定向快照过程中,提高写操作的性能的目的。

为实现上述目的,本发明提供一种写数据的装置,所述写数据的装置包括:

第一获取模块,用于写时重定向快照过程中,在未获取到快照生成命令之前,当接收到对源卷的写操作命令时,获取所述写操作命令包含的写入数据的大小信息;

写操作模块,用于根据所述写入数据的大小信息从预置的存储区域申请与所述大小信息匹配的存储空间,在申请到的存储空间进行写操作。

优选地,所述写操作命令中包括所述写入数据,及所述写入数据要写入所述源卷的第一目标写地址;

则所述写操作模块包括:

存储空间申请单元,用于根据所述写入数据的大小信息从所述存储区域申请第一存储空间,所述第一存储空间大小等于所述写入数据的大小与所述第一目标写地址的数据大小之和;

存储单元,用于在所述第一存储空间存储所述写入数据和所述第一目标写地址;

更新单元,用于将所述第一目标写地址与所述第一存储空间的第一存储地址之间的对应关系更新至映射表中,且在所述映射表中记录所述对应关系的更新时间,所述映射表用于保存所述源卷中的地址与所述存储区域的存储地址之间的对应关系及所述对应关系的更新时间。

优选地,所述写数据的装置还包括:

第二获取模块,用于写重定向快照过程中,在未获取到快照生成命令之前,当接收到对所述源卷的读操作命令时,获取所述读操作命令中的目标读地址;

第一判断模块,用于若所述映射表中包含所述目标读地址,则判断所述目标读地址在所述映射表中对应的更新时间是否在最后一次基于所述目标读地址生成快照之后;

数据合并模块,用于所述映射表中包含所述目标读地址且所述目标读地址在所述映射表中对应的更新时间在最后一次基于所述目标读地址生成快照之后时,在所述映射表中查找与所述目标读地址对应的第二存储地址,获取所述存储区域中所述第二存储地址中的数据,将所述第二存储地址中的数据与获取的第一数据合并成第二数据,在所述存储区域申请第二存储空间保存所述第二数据,将所述目标读地址与所述第二存储空间的存储地址之间的对应关系更新至所述映射表中,所述第一数据为所述目标读地址在所述源卷上对应的存储块中的数据;

读操作模块,用于所述映射表中不包含所述目标读地址或所述映射表中包含所述目标读地址但所述目标读地址在所述映射表中对应的更新时间不在最后一次基于所述目标读地址生成快照之后时,读取所述目标读地址在所述 源卷上对应的存储块中的数据。

优选地,所述写数据的装置还包括:

接收模块,用于若在写时重定向快照过程中,接收到对所述源卷的快照生成命令,则根据所述映射表判断所述源卷在接收到所述快照生成命令之前是否有写操作;

第二判断模块,用于当所述源卷在接收到所述快照生成命令之前存在写操作时,获取对源卷的写操作的地址为第三目标写地址,根据所述映射表查找与所述第三目标写地址对应的所述存储区域中的地址,获取所述地址中的数据为第三数据,同时获取所述第三数据的大小;

快照生成模块,用于根据所述第三数据、所述第三数据的大小和所述第三目标写地址生成快照。

优选地,所述快照生成模块包括:

判断单元,用于判断所述第三数据的大小与所述第三目标写地址在所述源卷所对应的第三存储块的大小是否相等;

写操作单元,用于当所述第三数据的大小与所述第三存储块的大小相等时,将所述第三数据写回至所述源卷的第三存储块中;

快照生成单元,用于当所述第三数据的大小与所述第三存储块的大小不相等时,获取所述第三存储块中的数据,将所述第三数据与所述第三存储块中的数据合并成第四数据,将所述第四数据写回至所述源卷的第三存储块中。

本发明进一步提供一种写数据的方法,所述写数据的方法包括以下步骤:

写时重定向快照过程中,在未获取到快照生成命令之前,当接收到对源卷的写操作命令时,获取所述写操作命令包含的写入数据的大小信息;

根据所述写入数据的大小信息从预置的存储区域申请与所述大小信息匹配的存储空间,在申请到的存储空间进行写操作。

优选地,所述写操作命令中还包括所述写入数据,及所述写入数据要写入所述源卷的第一目标写地址;

则所述根据所述写入数据的大小信息从预置的存储区域申请与所述大小信息匹配的存储空间,在申请到的存储空间进行写操作包括:

根据所述写入数据的大小信息从所述存储区域申请第一存储空间,所述 第一存储空间大小等于所述写入数据的大小与所述第一目标写地址的数据大小之和;

在所述第一存储空间存储所述写入数据和所述第一目标写地址;

将所述第一目标写地址与所述第一存储空间的第一存储地址之间的对应关系更新至映射表中,且在所述映射表中记录所述对应关系的更新时间,所述映射表用于保存所述源卷中的地址与所述存储区域的存储地址之间的对应关系及所述对应关系的更新时间。

优选地,所述写数据的方法还包括:

写重定向快照过程中,在未获取到快照生成命令之前,当接收到对所述源卷的读操作命令时,获取所述读操作命令中的目标读地址;

若所述映射表中包含所述目标读地址,则判断所述目标读地址在所述映射表中对应的更新时间是否在最后一次基于所述目标读地址生成快照之后;

若所述映射表中包含所述目标读地址且所述目标读地址在所述映射表中对应的更新时间在最后一次基于所述目标读地址生成快照之后,则在所述映射表中查找与所述目标读地址对应的第二存储地址,获取所述存储区域中所述第二存储地址中的数据,将所述第二存储地址中的数据与获取的第一数据合并成第二数据,在所述存储区域申请第二存储空间保存所述第二数据,将所述目标读地址与所述第二存储空间的存储地址之间的对应关系更新至所述映射表中,所述第一数据为所述目标读地址在所述源卷上对应的存储块中的数据;

若所述映射表中不包含所述目标读地址或所述映射表中包含所述目标读地址但所述目标读地址在所述映射表中对应的更新时间不在最后一次基于所述目标读地址生成快照之后,则读取所述目标读地址在所述源卷上对应的存储块中的数据。

优选地,所述写数据的方法还包括:

若在写时重定向快照过程中,接收到对所述源卷的快照生成命令,则根据所述映射表判断所述源卷在接收到所述快照生成命令之前是否有写操作;

当所述源卷在接收到所述快照生成命令之前存在写操作时,获取对源卷的写操作的地址为第三目标写地址,根据所述映射表查找与所述第三目标写地址对应的所述存储区域中的地址,获取所述地址中的数据为第三数据,同 时获取所述第三数据的大小;

根据所述第三数据、所述第三数据的大小和所述第三目标写地址生成快照。

优选地,所述根据所述第三数据、所述第三数据的大小和所述第三目标写地址生成快照包括:

判断所述第三数据的大小与所述第三目标写地址在所述源卷所对应的第三存储块的大小是否相等;

若是,则将所述第三数据写回至所述源卷的第三存储块中;

若否,则获取所述第三存储块中的数据,将所述第三数据与所述第三存储块中的数据合并成第四数据,将所述第四数据写回至所述源卷的第三存储块中。

本发明提出的写数据的方法和装置,写时重定向快照过程中,在未获取到快照生成命令之前,当接收到对源卷的写操作命令时,获取所述写操作命令包含的写入数据的大小信息;根据所述写入数据的大小信息从预置的存储区域申请与所述大小信息匹配的存储空间,在申请到的存储空间进行写操作。通过根据写操作写入数据的大小信息申请相匹配的数据空间,写入写操作命令包含的写入数据和要写入源卷的地址,无需读取原chunk的数据,实现高效写数据的目的。

附图说明

图1为本发明写数据的装置第一实施例的功能模块示意图;

图2为本发明图1所示实施例中写操作模块20的细化功能模块的示意图;

图3为本发明写数据的装置第三实施例的功能模块示意图;

图4为本发明写数据的装置第四实施例的功能模块示意图;

图5为本发明图4所示实施例中快照生成模块90的功能模块示意图;

图6为本发明写数据的方法第一实施例的流程示意图;

图7为本发明图6所示实施例中步骤s20根据所述写入数据的大小从预置的存储区域申请存储空间,在申请到的存储空间进行写操作的细化流程示意图;

图8为本发明写数据的方法第三实施例的流程示意图;

图9为本发明写数据的方法第四实施例的流程示意图;

图10为本发明图9所示实施例中步骤s100根据所述第三数据、所述第三数据的大小和所述第三目标写地址生成快照的细化流程示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明提供一种写数据的装置,参照图1,在第一实施例中,该写数据的装置包括:

第一获取模块10,用于写时重定向快照过程中,在未获取到快照生成命令之前,当接收到对源卷的写操作命令时,获取所述写操作命令包含的写入数据的大小信息;

写操作模块20,用于根据所述写入数据的大小信息从预置的存储区域申请与所述大小信息匹配的存储空间,在申请到的存储空间进行写操作。

本发明提供的写数据的装置主要应用于分布式存储技术中,是使用写时重定向的快照技术时的一种写数据的装置。通常分布式存储场景下,数据的存储是以块(chunk)为最小单位的,每一个存储系统可以根据需要将存储空间划分成若干个大小一致的chunk,在chunk中存放数据,例如可以将存储空间划分为若干个块,其中每个块的大小划分为4兆也可以为112个字节。

本实施例中,在写时重定向快照过程中,当已经生成旧快照但还未接收到新的快照生成命令时,或者是第一份快照未收到快照生成命令时,都可能接收到对源卷的写操作命令。例如在写时重定向快照过程中a、b、c三个时刻分别做快照,在a时刻完成快照后,在b时刻快照生成之前,即收到快照生成命令之前,可能收到写操作命令或读操作命令,在写时重定向快照过程中发生的写操作或读操作具体说是写重定向操作或读重定向操作。上述第一 获取模块10中源卷是指快照过程中将要备份的数据存储空间,可以根据需要对若干块做快照。上述写操作是指向源卷写入数据,当接收到对源卷的写操作命令时,获取写操作命令包含的写入数据的大小信息,上述写入数据是要写入源卷的数据,通常数据是以字节的形式存放在内存中,因此获取写入数据的大小信息可以通过获取写入数据的字节数来得到。

当获取到写入数据的大小信息后根据写入数据的大小信息在预置的存储区域申请存储空间,而不是按照chunk的大小信息申请存储空间,然后再在新申请的存储空间中进行写操作。上述预置的存储区域是存储空间中除了源卷以外的其他存储空间,具体可以根据需要选择新空间进行存放。

在本实施例中,写时重定向快照过程中,在未获取到快照生成命令之前,当接收到对源卷的写操作命令时,获取所述写操作命令包含的写入数据的大小信息;根据所述写入数据的大小信息从预置的存储区域申请与所述大小信息匹配的存储空间,在申请到的存储空间进行写操作。通过根据写操作写入数据的大小信息申请相匹配的数据空间,写入写操作命令包含的写入数据和要写入源卷的地址,无需读取原chunk的数据,实现高效写数据的目的。

进一步地,基于本发明写数据的装置第一实施例,在本发明写数据的装置的第二实施例中,写操作命令中包括所述写入数据,及所述写入数据要写入所述源卷的第一目标写地址;

则参照图2,所述写操作模块20的细化功能模块包括:

存储空间申请单元21,用于根据所述写入数据的大小信息从所述存储区域申请第一存储空间,所述第一存储空间大小等于所述写入数据的大小与所述第一目标写地址的数据大小之和;

存储单元22,用于在所述第一存储空间存储所述写入数据和所述第一目标写地址;

更新单元23,用于将所述第一目标写地址与所述第一存储空间的第一存储地址之间的对应关系更新至映射表中,且在所述映射表中记录所述对应关系的更新时间,所述映射表用于保存所述源卷中的地址与所述存储区域的存储地址之间的对应关系及所述对应关系的更新时间。

本实施例中,上述获取单元中写入数据是写操作命令中要写入源卷的数 据,上述第一目标写地址是写入数据要写入的地址,可以是写入数据将要写入的源卷上的chunk的地址,也可以是写入数据要写入的源卷上的chunk的地址和数据在chunk内的偏移地址。上述第一存储空间是用于存储写入的数据和源卷上要写入数据的地址,第一存储空间的大小等于写入数据的大小与第一目标写地址的数据大小之和当写入数据后,将源卷的第一目标写地址与第一存储空间的第一存储地址之间的对应关系更新至映射表中,上述第一存储地址是第一存储空间的地址,同时在映射表中记录更新时间,可以理解的是,更新时间可以不限定于在映射表中记录,也可以在其他地方记录,通过时间可以确定何时进行了写操作。当映射表更新后,可以通过映射表找到在预置的存储区域存储的新写入数据,也可以找到新写入数据所对应的源卷上的chunk地址。

例如,在源卷中第一个chunk存放数据abcd,在未收到快照生成命令前收到在第一个chunk的d位置写入m的命令时,预置的存储区域申请一个新的存储空间存放要写入的数据m和要写入源卷第一块第四个数据位置的地址,即d的地址,此时申请的存储空间的大小等于数据m的大小与源卷d的地址长度之和。然后更新映射表中d的地址和m的地址,使得能够在读取d时找到新写入的数据m。

在本实施例中,在预置的存储区域申请存储空间大小等于写操作中写入数据的大小与写地址的数据大小之和,无需读取原chunk的数据,提高了写的效率,节省了存储空间。

进一步地,参照图3,基于本发明写数据的装置第二实施例,在本发明写数据的装置第三实施例中,所述写数据的装置还包括:

第二获取模块30,用于写重定向快照过程中,在未获取到快照生成命令之前,当接收到对所述源卷的读操作命令时,获取所述读操作命令中的目标读地址;

第一判断模块40,用于若所述映射表中包含所述目标读地址,则判断所述目标读地址在所述映射表中对应的更新时间是否在最后一次基于所述目标读地址生成快照之后;

数据合并模块50,用于当所述映射表中包含所述目标读地址且所述目标 读地址在所述映射表中对应的更新时间在最后一次基于所述目标读地址生成快照之后时,在所述映射表中查找与所述目标读地址对应的第二存储地址,获取所述存储区域中所述第二存储地址中的数据,将所述第二存储地址中的数据与获取的第一数据合并成第二数据,在所述存储区域申请第二存储空间保存所述第二数据,将所述目标读地址与所述第二存储空间的存储地址之间的对应关系更新至所述映射表中,所述第一数据为所述目标读地址在所述源卷上对应的存储块中的数据;

读操作模块60,用于当所述映射表中不包含所述目标读地址或所述映射表中包含所述目标读地址但所述目标读地址在所述映射表中对应的更新时间不在最后一次基于所述目标读地址生成快照之后时,读取所述目标读地址在所述源卷上对应的存储块中的数据。

本实施例中,在写时重定向快照过程中,当已经生成旧快照但还未接收到新的快照生成命令时,或者是第一份快照未收到快照生成命令时,都可能接收到对源卷的读操作命令,读操作命令可以读取源卷也可能只读取其中某几个chunk。同时,在接收到读操作命令之前可能接收过写操作命令,也可能没有接收过写操作命令,即在接收到读操作命令之前可能进行过写操作,也可能没有进行过写操作。

上述第二获取模块30中目标读地址即获取到读操作命令中要读的数据的地址。当接收到读操作命令时,先获取读操作命令中的目标读地址,根据读操作命令的地址查找映射表,看映射表中是否有该目标读地址的记录,当存在时,表明该目标读地址作为目标写地址进行过写操作记录,再根据目标读地址记录的更新时间判断目标读地址在映射表中对应的更新时间是否在最后一次基于目标读地址生成快照之后,目的是判断写操作的时间是否在目标读地址在最后一生成快照到本次收到读操作之间。当要读目标读地址在映射表中没有记录,表明要读的目标读地址没有进行过写操作,则目标读地址上的数据并无发生改变,此时可以直接读取目标读地址在源卷上对应的存储块中的数据。当要读的块或源卷进行过写操作,但是根据目标读地址记录的更新时间判断得到写操作的更新时间在最近一次生成快照之前,则说明在最后一次生成快照到本次收到读操作之间并未进行过写操作,此时要读的块或源卷上的数据在最后一次生成快照之后并无变化,此时可以直接读取目标读地址 在源卷上对应的存储块中的数据。当在映射表中包含目标读地址的记录且目标读地址在映射表中对应的更新时间在最后一次基于目标读地址生成快照之后,说明在生成快照之后该目标读地址进行过写操作,即表明在最后一次生成快照之后目标读地址对应的存储块中所存储的数据有更新,又由于当写操作时,仅仅写入了实际要写入的数据,因此当要对整个块或是源卷进行读操作时,需要将源卷与写空间里的数据结合起来读。

当在进行读操作时判断得到目标读地址在最后一生成快照到本次收到读操作之间进行过写操作情况下,表明目标读地址曾作为目标写地址进行过写操作。所述第二存储地址是在第二目标写地址执行写操作时,在预置的存储区域新申请的空间存储写数据的地址,第二存储地址与目标读地址的对应关系可以通过映射表获取。上述第一数据是目标读地址在所述源卷上对应的存储块中的数据。当获取了第一数据和第二存储地址中的数据后,将第二存储地址与第一数据合并,具体是把第二存储地址中的数据合并到第一数据的相应位置,合并后的数据为第二数据。上述第二存储空间是在预设存储区新申请的用于保存第二数据的存储空间,此时第二数据为经过写操作之后的最新数据,第二存储空间中可保存第二数据和第二数据对应源卷的地址。读取数据时读取此时第二存储空间中的第二数据。当新申请第二存储空间保存第二数据后,将第二目标写地址与第二存储空间的地址之间的对应关系更新至映射表中,并释放原空间,即释放原来写入数据时申请的用于存储写入数据和存储地址的空间。

例如,当写时重定向快照过程中,按先后顺序在a、b、c三个时刻生成快照,当a时刻的快照生成后,若获取到对源卷的读操作命令,此时获取读操作命令中的读地址。当读地址为第三chunk时,根据查找映射表中第三chunk的记录判断此位置在收到读操作命令和最后一次生成快照期间是否有过写操作,当没有第三chunk的记录或者第三chunk的记录的更新时间不在a时刻之后,直接读取第三chunk中的数据。若第三chunk中存放的数据为abcde,从映射表获取到第三chunk的记录且更新时间在a时刻以后,表明a时刻后进行过写操作,则通过查找映射表找到与第三chunk对应的存储区域中的地址,根据与第三chunk对应的存储区域中的地址查找到存储区域存放的数据为m,修改位置为第三chunk中第五个偏移地址,即将abcde中e修改为m, 此时将m与abcde合并,具体是将m写入第三chunk的e处生成新数据abcdm,在预置的存储区域申请新空间保存abcdm和对应第三chunk的地址,更新映射表中第三chunk在源卷的地址与存储区域中保存abcdm的新空间的地址,并释放存放e的空间。读数据时,读取最新的数据abcdm。

在本实施例中,通过判断接收到读命令与最近生成快照之间是否有写操作来进行数据的读取,使读到的数据为最新的实时数据。

进一步地,参照图4,基于本发明写数据的装置上述实施例,在本发明写数据的装置的第四实施例中,所述写数据的装置还包括:

接收模块70,用于若在写时重定向快照过程中,接收到对所述源卷的快照生成命令,则根据所述映射表判断所述源卷在接收到所述快照生成命令之前是否有写操作;

第二判断模块80,用于当所述源卷在接收到所述快照生成命令之前存在写操作时,获取对源卷的写操作的地址为第三目标写地址,根据所述映射表查找与所述第三目标写地址对应的所述存储区域中的地址,获取所述地址中的数据为第三数据,同时获取所述第三数据的大小;

快照生成模块90,用于根据所述第三数据、所述第三数据的大小和所述第三目标写地址生成快照。

本实施例中,在写时重定向快照过程中,当接收到对源卷的快照生成命令时,此时可以是第一次对源卷进行快照,也可以是在已有旧的快照产生情况下收到的新的快照生成命令。当在收到快照生成命令前,源卷可能进行过写数据的操作或者是读数据的操作,当有过写重定向时,表明源卷中的数据有了写数据的修改,为了生成最新的数据快照,先判断所述源卷在接收到所述快照生成命令之前是否有写操作。当没有进行写操作时,此刻源卷的内容就是最新的数据。

上述第二判断模块中第三目标写地址是在源卷上写操作时要写入数据的地址。通过映射表可以查询该第三目标写地址与存储区域中的对应地址,获取存储区域中的对应地址中的数据为第三数据,当进行了写操作未进行读操作时,该对应地址中存放的是写数据时存储区域里存放的写入数据,当进行了写操作又进行了读操作时,该对应地址中存放的是读数据时将原写数据与 原chunk合并的最新数据。具体如何进行数据合并在写数据的装置第二实施例中进行了详细阐述,这里不再赘述。

判断所述源卷在接收到所述快照生成命令之前是否有写操作的方法可以通过查找映射表得到。上述第三数据的大小可以通过获取第三数据的字节数的方式得到,然后根据第三数据、第三数据的大小和第三数据的写地址生成快照。

优选地,参照图5,本实施例中,上述快照生成模块90包括:

判断单元91,用于判断所述第三数据的大小与所述第三目标写地址在所述源卷所对应的第三存储块的大小是否相等;

写操作单元92,用于当所述第三数据的大小与所述第三存储块的大小相等时,将所述第三数据写回至所述源卷的第三存储块中;

快照生成单元93,用于当所述第三数据的大小与所述第三存储块的大小不相等时,获取所述第三存储块中的数据,将所述第三数据与所述第三存储块中的数据合并成第四数据,将所述第四数据写回至所述源卷的第三存储块中。

本实施例中,上述第三存储块是指第三目标写地址在源卷所对应的块,即为在执行写操作时写操作所对应的块,例如收到写操作将源卷第二chunk中的aaaa写成aaac时,第三目标写地址就是第二chunk的地址,所写的数据就是c,第三目标写地址所对应的第三存储块就是第二chunk。判断第三数据的大小与第三存储块的大小是否相等,当相等时,表明通过写操作写入数据将原chunk数据全部改写,或者是在写操作后产生过读操作,此时写重定向的存储空间里的写数据已是最新数据,将第三数据写回至源卷的第三存储块中,即写回至产生过写操作的chunk处。

当第三数据的大小与第三存储块的大小不相等时,表明此时执行过写操作,但只改写了chunk中的部分数据且并未进行过读操作,生成快照时需要获取此刻最新的数据。此时获取写操作时的第三存储块中的数据,这时第三存储块中的数据为写操作之前的数据,将第三数据与第三存储块中的数据合并生成第四数据,此时第四数据为源卷的第三存储块所对应的最新数据,将第四数据写回到源卷的第三存储块中。

例如,在收到快照生成命令前,源卷上第三chunk存放的数据为abcde 执行过写操作将e修改为m,且并未收到读操作命令,当收到快照生成命令时,通过查找映射表得到源卷有过写操作。此时获取写操作的存储空间里的数据,即获取m,将m的大小与chunk的大小比较,容易得到m的大小小于chunk的大小,则获取源卷上第三chunk的数据,将m与第三chunk中的abcde合并生成新数据。具体是将m写入第三chunk的对应位置保存为新的数据abcdm,此时abcdm为源卷第三chunk的最新数据,将abcdm写入源卷上第三chunk处,此时第三chunk内的数据为生成的快照的内容。

在本实施例中,通过判断收到快照生成命令之前是否有写操作,并获取写操作的数据,根据写操作的数据的大小进行快照的生成,保证了快照生成的时数据为最新的实时数据,同时通过对写操作的数据的大小有选择性的写入数据,提高了快照生成的效率。

参照图6,提出了本发明写数据的方法的第一实施例,该实施例中,写数据的方法包括步骤:

步骤s10,写时重定向快照过程中,在未获取到快照生成命令之前,当接收到对源卷的写操作命令时,获取所述写操作命令包含的写入数据的大小信息;

步骤s20,根据所述写入数据的大小信息从预置的存储区域申请与所述大小信息匹配的存储空间,在申请到的存储空间进行写操作。

本发明提供的写数据的方法主要应用于分布式存储技术中,是使用写时重定向的快照技术时的一种写数据的方法。通常分布式存储场景下,数据的存储是以块(chunk)为最小单位的,每一个存储系统可以根据需要将存储空间划分成若干个大小一致的chunk,在chunk中存放数据,例如可以将存储空间划分为若干个块,其中每个块的大小划分为4兆也可以为112个字节。

本实施例中,在写时重定向快照过程中,当已经生成旧快照但还未接收到新的快照生成命令时,或者是第一份快照未收到快照生成命令时,都可能接收到对源卷的写操作命令。例如在写时重定向快照过程中a、b、c三个时刻分别做快照,在a时刻完成快照后,在b时刻快照生成之前,即收到快照生成命令之前,可能收到写操作命令或读操作命令,在写时重定向快照过程中发生的写操作或读操作具体说是写重定向操作或读重定向操作。上述源卷 是指快照过程中将要备份的数据存储空间,可以根据需要对若干块做快照。上述写操作是指向源卷写入数据,当接收到对源卷的写操作命令时,获取写操作命令包含的写入数据的大小信息,上述写入数据是要写入源卷的数据,通常数据是以字节的形式存放在内存中,因此获取写入数据的大小信息可以通过获取写入数据的字节数来得到。

当获取到写入数据的大小信息后根据写入数据的大小信息在预置的存储区域申请存储空间,而不是按照chunk的大小信息申请存储空间,然后再在新申请的存储空间中进行写操作。上述预置的存储区域是存储空间中除了源卷以外的其他存储空间,具体可以根据需要选择新空间进行存放。

在本实施例中,写时重定向快照过程中,在未获取到快照生成命令之前,当接收到对源卷的写操作命令时,获取所述写操作命令包含的写入数据的大小信息;根据所述写入数据的大小信息从预置的存储区域申请与所述大小信息匹配的存储空间,在申请到的存储空间进行写操作。通过根据写操作写入数据的大小信息申请相匹配的数据空间,写入写操作命令包含的写入数据和要写入源卷的地址,无需读取原chunk的数据,实现高效写数据的目的。

进一步地,基于本发明写数据的方法第一实施例,在本发明写数据的方法的第二实施例中,上述写操作命令中还包括所述写入数据,及所述写入数据要写入所述源卷的第一目标写地址,

则参照图7,上述步骤s20的细化步骤包括:

步骤s21,根据所述写入数据的大小信息从所述存储区域申请第一存储空间,所述第一存储空间大小等于所述写入数据的大小与所述第一目标写地址的数据大小之和;

步骤s22,在所述第一存储空间存储所述写入数据和所述第一目标写地址;

步骤s23,将所述第一目标写地址与所述第一存储空间的第一存储地址之间的对应关系更新至映射表中,且在所述映射表中记录所述对应关系的更新时间,所述映射表用于保存所述源卷中的地址与所述存储区域的存储地址之间的对应关系及所述对应关系的更新时间。

本实施例中,上述写入数据是写操作命令中要写入源卷的数据,上述第 一目标写地址是写入数据要写入的地址,可以是写入数据将要写入的源卷上的chunk的地址,也可以是写入数据要写入的源卷上的chunk的地址和数据在chunk内的偏移地址。上述第一存储空间是用于存储写入的数据和源卷上要写入数据的地址,第一存储空间的大小等于写入数据的大小与第一目标写地址的数据大小之和。当写入数据后,将源卷的第一目标写地址与第一存储空间的第一存储地址之间的对应关系更新至映射表中,上述第一存储地址是第一存储空间的地址,同时在映射表中记录更新时间,可以理解的是,更新时间可以不限定于在映射表中记录,也可以在其他地方记录,通过时间可以确定何时进行了写操作。当映射表更新后,可以通过映射表找到在预置的存储区域存储的新写入数据,也可以找到新写入数据所对应的源卷上的chunk地址。

例如,在源卷中第一个chunk存放数据abcd,在未收到快照生成命令前收到在第一个chunk的d位置写入m的命令时,预置的存储区域申请一个新的存储空间存放要写入的数据m和要写入源卷第一块第四个数据位置的地址,即d的地址,此时申请的存储空间的大小等于数据m的大小与源卷d的地址长度之和。然后更新映射表中d的地址和m的地址,使得能够在读取d时找到新写入的数据m。

在本实施例中,在预置的存储区域申请存储空间大小等于写操作中写入数据的大小与写地址的数据大小之和,无需读取原chunk的数据,提高了写的效率,节省了存储空间。

进一步地,参照图8,基于本发明写数据的方法第二实施例,在本发明写数据的方法的第三实施例中,所述写数据的方法还包括步骤:

步骤s30,写重定向快照过程中,在未获取到快照生成命令之前,当接收到对所述源卷的读操作命令时,获取所述读操作命令中的目标读地址;

步骤s40,判断所述映射表中是否包含所述目标读地址;若是,则执行步骤s70;否则执行步骤s50;

步骤s50,判断所述目标读地址在所述映射表中对应的更新时间是否在最后一次基于所述目标读地址生成快照之后;若是,则执行步骤s60;否则,执行步骤s70;

步骤s60,在所述映射表中查找与所述目标读地址对应的第二存储地址, 获取所述存储区域中所述第二存储地址中的数据,将所述第二存储地址中的数据与获取的第一数据合并成第二数据,在所述存储区域申请第二存储空间保存所述第二数据,将所述目标读地址与所述第二存储空间的存储地址之间的对应关系更新至所述映射表中,所述第一数据为所述目标读地址在所述源卷上对应的存储块中的数据;

步骤s70,读取所述目标读地址在所述源卷上对应的存储块中的数据。

本实施例中,在写时重定向快照过程中,当已经生成旧快照但还未接收到新的快照生成命令时,或者是第一份快照未收到快照生成命令时,都可能接收到对源卷的读操作命令,读操作命令可以读取源卷也可能只读取其中某几个chunk。同时,在接收到读操作命令之前可能接收过写操作命令,也可能没有接收过写操作命令,即在接收到读操作命令之前可能进行过写操作,也可能没有进行过写操作。

上述目标读地址即获取到读操作命令中要读的数据的地址。当接收到读操作命令时,先获取读操作命令中的目标读地址,根据读操作命令的地址查找映射表,看映射表中是否有该目标读地址的记录,当存在时,表明该目标读地址作为目标写地址进行过写操作记录,再根据目标读地址记录的更新时间判断目标读地址在映射表中对应的更新时间是否在最后一次基于目标读地址生成快照之后,目的是判断写操作的时间是否在目标读地址在最后一生成快照到本次收到读操作之间。当要读目标读地址在映射表中没有记录,表明要读的目标读地址没有进行过写操作,则目标读地址上的数据并无发生改变,此时可以直接读取目标读地址在源卷上对应的存储块中的数据。当要读的块或源卷进行过写操作,但是根据目标读地址记录的更新时间判断得到写操作的更新时间在最近一次生成快照之前,则说明在最后一次生成快照到本次收到读操作之间并未进行过写操作,此时要读的块或源卷上的数据在最后一次生成快照之后并无变化,此时可以直接读取目标读地址在源卷上对应的存储块中的数据。当在映射表中包含目标读地址的记录且目标读地址在映射表中对应的更新时间在最后一次基于目标读地址生成快照之后,说明在生成快照之后该目标读地址进行过写操作,即表明在最后一次生成快照之后目标读地址对应的存储块中所存储的数据有更新,又由于当写操作时,仅仅写入了实际要写入的数据,因此当要对整个块或是源卷进行读操作时,需要将源卷与 写空间里的数据结合起来读。

当在进行读操作时判断得到目标读地址在最后一生成快照到本次收到读操作之间进行过写操作情况下,表明目标读地址曾作为目标写地址进行过写操作。所述第二存储地址是在第二目标写地址执行写操作时,在预置的存储区域新申请的空间存储写数据的地址,第二存储地址与目标读地址的对应关系可以通过映射表获取。上述第一数据是目标读地址在所述源卷上对应的存储块中的数据。当获取了第一数据和第二存储地址中的数据后,将第二存储地址与第一数据合并,具体是把第二存储地址中的数据合并到第一数据的相应位置,合并后的数据为第二数据。上述第二存储空间是在预设存储区新申请的用于保存第二数据的存储空间,此时第二数据为经过写操作之后的最新数据,第二存储空间中可保存第二数据和第二数据对应源卷的地址。读取数据时读取此时第二存储空间中的第二数据。当新申请第二存储空间保存第二数据后,将第二目标写地址与第二存储空间的地址之间的对应关系更新至映射表中,并释放原空间,即释放原来写入数据时申请的用于存储写入数据和存储地址的空间。

例如,当写时重定向快照过程中,按先后顺序在a、b、c三个时刻生成快照,当a时刻的快照生成后,若获取到对源卷的读操作命令,此时获取读操作命令中的读地址。当读地址为第三chunk时,根据查找映射表中第三chunk的记录判断此位置在收到读操作命令和最后一次生成快照期间是否有过写操作,当没有第三chunk的记录或者第三chunk的记录的更新时间不在a时刻之后,直接读取第三chunk中的数据。若第三chunk中存放的数据为abcde,从映射表获取到第三chunk的记录且更新时间在a时刻以后,表明a时刻后进行过写操作,则通过查找映射表找到与第三chunk对应的存储区域中的地址,根据与第三chunk对应的存储区域中的地址查找到存储区域存放的数据为m,修改位置为第三chunk中第五个偏移地址,即将abcde中e修改为m,此时将m与abcde合并,具体是将m写入第三chunk的e处生成新数据abcdm,在预置的存储区域申请新空间保存abcdm和对应第三chunk的地址,更新映射表中第三chunk在源卷的地址与存储区域中保存abcdm的新空间的地址,并释放存放e的空间。读数据时,读取最新的数据abcdm。

在本实施例中,通过判断接收到读命令与最近生成快照之间是否有写操 作来进行数据的读取,使读到的数据为最新的实时数据。

进一步地,参照图9,基于本发明写数据的方法上述实施例,在本发明写数据的方法的第四实施例中,所述写数据的方法还包括步骤:

步骤s80,若在写时重定向快照过程中,接收到对所述源卷的快照生成命令,则根据所述映射表判断所述源卷在接收到所述快照生成命令之前是否有写操作;

步骤s90,当所述源卷在接收到所述快照生成命令之前存在写操作时,获取对源卷的写操作的地址为第三目标写地址,根据所述映射表查找与所述第三目标写地址对应的所述存储区域中的地址,获取所述地址中的数据为第三数据,同时获取所述第三数据的大小;

步骤s100,根据所述第三数据、所述第三数据的大小和所述第三目标写地址生成快照。

本实施例中,在写时重定向快照过程中,当接收到对源卷的快照生成命令时,此时可以是第一次对源卷进行快照,也可以是在已有旧的快照产生情况下收到的新的快照生成命令。当在收到快照生成命令前,源卷可能进行过写数据的操作或者是读数据的操作,当有过写重定向时,表明源卷中的数据有了写数据的修改,为了生成最新的数据快照,先判断所述源卷在接收到所述快照生成命令之前是否有写操作。当没有进行写操作时,此刻源卷的内容就是最新的数据。

上述第三目标写地址是在源卷上写操作时要写入数据的地址。通过映射表可以查询该第三目标写地址与存储区域中的对应地址,获取存储区域中的对应地址中的数据为第三数据,当进行了写操作未进行读操作时,该对应地址中存放的是写数据时存储区域里存放的写入数据,当进行了写操作又进行了读操作时,该对应地址中存放的是读数据时将原写数据与原chunk合并的最新数据。具体如何进行数据合并在写数据的方法第二实施例中进行了详细阐述,这里不再赘述。

判断所述源卷在接收到所述快照生成命令之前是否有写操作的方法可以通过查找映射表得到。上述第三数据的大小可以通过获取第三数据的字节数的方式得到,然后根据第三数据、第三数据的大小和第三数据的写地址生成 快照。

优选地,参照图10,本实施例中,上述根据所述第三数据、所述第三数据的大小和所述第三目标写地址生成快照包括:

步骤s110,判断所述第三数据的大小与所述第三目标写地址在所述源卷所对应的第三存储块的大小是否相等;若是,则执行步骤s120;否则,执行步骤s130;

步骤s120,将所述第三数据写回至所述源卷的第三存储块中;

步骤s130,获取所述第三存储块中的数据,将所述第三数据与所述第三存储块中的数据合并成第四数据,将所述第四数据写回至所述源卷的第三存储块中。

本实施例中,上述第三存储块是指第三目标写地址在源卷所对应的块,即为在执行写操作时写操作所对应的块,例如收到写操作将源卷第二chunk中的aaaa写成aaac时,第三目标写地址就是第二chunk的地址,所写的数据就是c,第三目标写地址所对应的第三存储块就是第二chunk。判断第三数据的大小与第三存储块的大小是否相等,当相等时,表明通过写操作写入数据将原chunk数据全部改写,或者是在写操作后产生过读操作,此时写重定向的存储空间里的写数据已是最新数据,将第三数据写回至源卷的第三存储块中,即写回至产生过写操作的chunk处。

当第三数据的大小与第三存储块的大小不相等时,表明此时执行过写操作,但只改写了chunk中的部分数据且并未进行过读操作,生成快照时需要获取此刻最新的数据。此时获取写操作时的第三存储块中的数据,这时第三存储块中的数据为写操作之前的数据,将第三数据与第三存储块中的数据合并生成第四数据,此时第四数据为源卷的第三存储块所对应的最新数据,将第四数据写回到源卷的第三存储块中。

例如,在收到快照生成命令前,源卷上第三chunk存放的数据为abcde执行过写操作将e修改为m,且并未收到读操作命令,当收到快照生成命令时,通过查找映射表得到源卷有过写操作。此时获取写操作的存储空间里的数据,即获取m,将m的大小与chunk的大小比较,容易得到m的大小小于chunk的大小,则获取源卷上第三chunk的数据,将m与第三chunk中的abcde合并生成新数据。具体是将m写入第三chunk的对应位置保存为新的数据 abcdm,此时abcdm为源卷第三chunk的最新数据,将abcdm写入源卷上第三chunk处,此时第三chunk内的数据为生成的快照的内容。

在本实施例中,通过判断收到快照生成命令之前是否有写操作,并获取写操作的数据,根据写操作的数据的大小进行快照的生成,保证了快照生成的时数据为最新的实时数据,同时通过对写操作的数据的大小有选择性的写入数据,提高了快照生成的效率。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

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