连续存储数据的修改方法、装置和系统与流程

文档序号:21456484发布日期:2020-07-10 17:52阅读:140来源:国知局
连续存储数据的修改方法、装置和系统与流程
本发明涉及数据存储
技术领域
,尤其涉及一种连续存储数据的修改方法、装置和系统。
背景技术
:在存储应用领域,存在小文件密集存储的需求,这些小文件都是一些几kb的文件,例如json文件、xml文件、txt文件等,这些文件数据存在一些固有属性,可以使用一个类型值来表示,例如使用数字1表示交通车辆数据,数字2表示交通人脸数据等。同时,存在对同一类的小文件批量提取的需求。对于这些小文件存储若使用传统的随机存储方式,单条数据提取时,无性能差异;但如果是按某类型值数据进行批量提取时,随机存储的小文件需要每一个文件分别提取,产生大量小io提取,性能极差。因此可以将同一类型的小文件连续存储在同一数据块中,需要批量提取某一类小文件时,只需要检索到所有的数据块信息,而后对每一个数据块进行读取即可。由于小文件均为连续存储,单次可以合并读取成千上万个小文件,合并小io为大io,达到提高数据提取效率的目的。但是,对于上述连续存储数据的方案,修改成为了一个难题。一种实现方式为:如果在原始数据块所对应的位置直接进行修改,若单条数据大小发生变化,则每次修改时需要将该数据块中的所有数据读出,修改其中一条数据后再写入块,该种方式性能极低,并且修改过程中会导致业务中断。另一种思路是将修改数据写入新的数据块中,更新索引中记录的位置为新的数据块位置,但这样就不满足数据连续存储的需求,极大程度降低了数据提取性能。技术实现要素:本发明提供一种连续存储数据的修改方法、装置和系统,在保证数据连续提取性能的前提下,以实现随机修改。第一方面,本发明提供一种连续存储数据的修改方法,包括:根据获取到的修改请求,获取修改数据在第一数据块中对应的源数据的索引信息;根据所述第一数据块中对应的源数据的索引信息,分配所述第一数据块的第一修改写入区中用于存储所述修改数据的第一存储空间;所述第一数据块包括所述第一修改写入区和第一源数据区;所述第一源数据区连续存储至少两条源数据;所述至少两条源数据包括所述修改数据对应的源数据;所述第一修改写入区用于存储所述第一源数据区中源数据对应的修改数据;在所述第一存储空间中写入所述修改数据,并更新所述第一数据块中所述修改数据对应的源数据的索引信息。第二方面,本发明实施例提供一种连续存储数据的修改装置,包括:获取模块,用于根据获取到的修改请求,获取第一数据块中修改数据对应的源数据的索引信息;分配模块,用于根据所述第一数据块中修改数据对应的源数据的索引信息,分配所述第一数据块的第一修改写入区中用于存储所述修改数据的第一存储空间;所述第一数据块还包括第一源数据区;所述第一源数据区连续存储至少两条源数据;所述至少两条源数据包括所述修改数据对应的源数据;所述第一修改写入区用于存储所述第一源数据区中源数据对应的修改数据;处理模块,用于在所述第一存储空间中写入所述修改数据,并更新所述第一数据块中所述修改数据对应的源数据的索引信息。第三方面,本发明实施例提供一种集群系统,包括:第一集群节点,第二集群节点;其中,所述第一集群节点用于接收修改请求,并将所述修改请求发送给所述第二集群节点;所述修改请求包括:所述第二集群节点的标识,以及修改数据;所述第二集群节点,配置为执行如第一方面中任一项所述的方法。第四方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面中任一项所述的方法。第五方面,本发明实施例提供一种电子设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行第一方面中任一项所述的方法。本发明实施例提供的连续存储数据的修改写方法、装置和系统,根据获取到的修改请求,获取修改数据在第一数据块中对应的源数据的索引信息;根据所述第一数据块中对应的源数据的索引信息,分配所述第一数据块的第一修改写入区中用于存储所述修改数据的第一存储空间;所述第一数据块还包括第一源数据区;所述第一源数据区连续存储至少两条源数据;所述至少两条源数据包括所述修改数据对应的源数据;所述第一修改写入区用于存储所述第一源数据区中源数据对应的修改数据;在所述第一存储空间中写入所述修改数据,并更新所述第一数据块中所述修改数据对应的源数据的索引信息。该方法在保证数据连续提取性能的前提下,满足随机修改需求,将修改数据写入该数据块中第一修改写入区,并且在修改的过程中仍可以提取源数据区的源数据,不中断业务。附图说明此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。图1为本发明一实施例提供的系统架构图;图2是本发明提供的连续存储数据的修改方法一实施例的流程示意图;图3是本发明提供的一实施例的数据块结构示意图;图4是本发明提供的方法一实施例的第一数据块存储原理示意图图5是本发明提供的方法一实施例的主备块存储原理示意图;图6是本发明提供的方法一实施例的整理前后的数据存储示意图;图7是本发明提供的方法一实施例的数据块整理流程示意图;图8是本发明提供的连续存储数据的修改装置实施例的结构示意图;图9是本发明提供的电子设备实施例的结构示意图;图10是本发明提供的集群系统实施例的结构示意图。通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。本发明的说明书和权利要求书及所述附图中的术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。首先对本发明所涉及的名词和应用场景进行介绍:1、连续存储数据,可以认为是在物理存储区域中连续存放的数据,也可以认为是在逻辑存储区域中连续存放的数据,“连续”表示多条不同的数据存储时,上一条数据的末地址,和下一条数据的首地址紧密相连,中间不存在任何其他存储空间。连续存储数据意味着读取数据时可以合并多次小输入/输出io操作为单次较大io操作,且多次小io操作时间复杂度远高于单次大io操作的时间复杂度。2、修改,对于同一个索引键值key对应的数据,首次上传成功(即存储成功)后,第二次及之后的针对该key对应的数据的再次上传称为对该key对应数据的修改。多次修改的数据大小,是在一定范围内的不限大小。例如最大为4kb,最小为1kb,且1kb~4kb范围均支持。其中,上传例如指的是从客户端设备上传到服务器中,服务器可以是一个集群系统中的一个节点。本发明实施例提供的方法,应用于数据存储场景中。例如,如图1所示的系统,包括:客户端设备、至少两个集群节点。客户端设备可以是台式机、便携式电脑、掌上电脑、移动手机、平板电脑等终端设备。一个集群节点可以对应一个设备。在一实施例中,至少两个集群节点例如包括第一集群节点和第二集群节点。其中,第一集群节点可以接收客户端设备发送的修改请求,该修改请求中携带修改数据对应的集群节点的标识、修改数据以及修改数据的标识信息;例如该修改数据对应的集群节点的标识为第二集群节点的标识,则第一集群节点可以将该修改请求发送给第二集群节点,由第二集群节点根据修改请求进行数据修改。在其他实施例中,修改数据对应的集群节点的标识也可以是第一集群节点的标识,本申请对此并不限定。下面以具体的实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。图2是本发明提供的连续存储数据的修改方法一实施例的流程示意图。本实施例的执行主体可以为集群系统中任一集群节点a。如图2所示,本实施例提供的方法,包括:步骤201、根据获取到的修改请求,获取第一数据块中修改数据对应的源数据的索引信息;具体的,修改请求可以为该集群节点a接收客户端设备发送的修改请求,或从其他集群节点接收到该修改请求转发给该集群节点a,该集群节点a根据获取到的修改请求,获取该修改数据对应的源数据的索引信息,该索引信息为第一数据块中该修改数据对应的源数据的索引信息。在一实施例中,一条源数据对应一条索引信息,索引信息通常存储于数据库中,索引信息可以记录为key-value格式,key例如为文件名,key值为每条源数据独一无二,value中则记录有存储位置等信息,例如索引信息中value信息包括:所述修改数据对应的源数据所在的存储设备的标识、所述第一数据块的标识id、所述修改数据对应的源数据在所述第一源数据区的偏移信息以及所述修改数据对应的源数据的数据长度信息。其中,存储设备例如为该集群节点a的存储设备或该集群节点a的存储设备上的某个磁盘块,偏移信息可以为源数据在源数据区的块内偏移offset。例如,一条数据的索引信息可以为表1记录的索引信息。表1索引信息索引key文件名(唯一性)索引value存储设备1、第一数据块id、偏移信息offset、数据长度len步骤202、根据第一数据块中修改数据对应的源数据的索引信息,分配第一数据块中第一修改写入区中用于存储修改数据的第一存储空间;第一数据块还包括第一源数据区;第一源数据区连续存储至少两条源数据;至少两条源数据包括修改数据对应的源数据;第一修改写入区用于存储第一源数据区中源数据对应的修改数据;具体的,为了保证连续存储数据提取性能,同时满足随机修改需求,并且在修改的过程中仍可以提取源数据,不中断业务。如图3所示,本发明实施例中将一个数据块划分为修改写入区和源数据区,源数据区用于存储源数据,修改写入区用于存储该数据块中源数据对应的修改后的数据,一个数据块占用一定大小的存储区域(例如64mb),数据块的大小可以由不同业务决定。一个数据块中源数据区的源数据是连续存储的。数据块还可以包括该数据块的块信息,例如该数据块的id、数据块长度、修改写入区和源数据区的比例、是否为第一数据块等信息。其中,第一数据块例如可以为主数据块或备份数据块。对于第一数据块来说,图3中修改写入区为第一修改写入区,源数据区为第一源数据区。在一实施例中,源数据区与修改写入区按一定预设比例(例如6:1)进行分配,实际应用中可以根据修改频率进行配置,例如修改频率较大,则分配的修改写入区的大小可以较大。在一实施例中,修改写入区中,以数据片为单位,存储修改后的数据。数据片内存储的数据按照和源数据区相同的数据存储结构存储。在其他实施例中也可以采用与源数据区相同的数据存储结构存储,本申请对此并不限定。在一实施例中,数据片可以为定长数据片,对于同一条源数据的多次修改的数据存储在修改写入区中同一个数据片内;数据片的长度可以预先设定,例如设定为源数据区中源数据长度的最大值加上修改写入区的信息区长度,其中信息区存储数据实际长度、数据校验信息、数据url信息等与单条数据强相关的必要信息,进而根据修改写入区的大小以及数据片长度计算修改写入区中存储修改数据的最大个数。在其他实施例中修改写入区中数据片也可以为大小不同的数据片,本申请对此并不限定。图3中数据片结构中len表示修改数据的实际长度,图3中信息区以存储修改数据的实际长度为例进行说明。在一实施例中,源数据区中可以按照每条源数据长度的最大值计算存储源数据的最大个数。在一实施例中,单条源数据首次写入第一数据块的存储区域时,从当前第一数据块中源数据区该条源数据对应的偏移位置开始写入数据,写入完成后,记录下该条源数据的索引信息。在写入修改数据时,首先确定该修改数据对应的源数据的索引信息,进而根据该修改数据对应的源数据的索引信息,找到源数据所属的第一数据块的id,从而分配该第一数据块id对应的第一数据块中第一修改写入区中的第一存储空间,该第一存储空间用于存储该修改数据;其中,第一源数据区可以存储包括该修改数据对应的源数据的至少两条源数据;所述第一源数据区的存储空间的大小与所述第一修改写入区的存储空间的大小按照预设比例分配。第一存储空间可以为如图3所示中的数据片,例如某一修改请求要求修改源数据区第一条源数据,该第一条源数据对应的修改数据写入修改写入区的第一个数据片中,在一实施例中在该修改请求之后又接收到某一修改请求要求修改源数据区第一条源数据,该第一条源数据对应的修改数据依然写入修改写入区的第一个数据片中。例如,某一修改请求要求修改源数据区第三条源数据,该第三条源数据对应的修改数据写入修改写入区的第二个数据片中。其中,源数据区能够连续存储至少两条数据,在实际应用中,也可以存储一条数据,对于修改来说,本申请方案也适用于一条数据的存储和修改。步骤203、在第一存储空间中写入修改数据,并更新第一数据块中修改数据对应的源数据的索引信息。具体的,在第一修改写入区中的第一存储空间(例如某个数据片对应的存储空间),并更新该第一数据块中修改数据对应的源数据的索引信息。更新索引信息,具体可以通过如下方式实现:将第一数据块中修改数据对应的源数据的索引信息中的偏移信息更新为修改数据在所述第一修改写入区的偏移信息,并将第一数据块中修改数据对应源数据的索引信息中的数据长度信息更新为所述修改数据的数据长度信息。更新后的源数据的索引信息,包括:文件名;修改数据所在的存储设备的标识、所述第一数据块的标识id、所述修改数据在所述第一修改写入区的偏移信息以及所述修改数据的数据长度信息。在读取写入的修改数据时,将根据更新后的索引信息读取。数据批量提取时,当一个数据块内的源数据未被修改过时,直接从源数据区批量提取数据返回即可;当数据块内有源数据修改后,从源数据区批量提取数据,并需要将修改后的源数据替换为修改写入区中写入的修改数据再返回。在将修改数据写入第一存储空间时,需根据修改数据的key进行数据校验。校验过程主要是为了避免分配修改写入区的数据片出错。若分配的修改写入区中的数据片是一个已写入数据的数据片,那么需要用到修改写入区数据片中信息区的校验信息。校验信息中包含该条数据的key,在修改时,检查本次修改数据的key与该数据片已写入数据的key是否相同,若不同则认为出错,分配的数据片错误,不执行本次修改,避免已写入数据被覆盖。本实施例的方法,根据获取到的修改请求,获取修改数据在第一数据块中对应的源数据的索引信息;根据所述第一数据块中对应的源数据的索引信息,分配所述第一数据块的第一修改写入区中用于存储所述修改数据的第一存储空间;所述第一数据块还包括第一源数据区;第一源数据区连续存储至少两条源数据;至少两条源数据包括所述修改数据对应的源数据;所述第一修改写入区用于存储所述第一源数据区中源数据对应的修改数据;在所述第一存储空间中写入所述修改数据,并更新所述第一数据块中所述修改数据对应的源数据的索引信息。该方法在保证数据连续提取性能的前提下,满足随机修改需求,将修改数据写入该数据块中第一修改写入区,并且在修改的过程中仍可以提取源数据区的源数据,不中断业务。在上述实施例的基础上,步骤202具体可以通过如下方式实现:根据第一数据块中修改数据对应的源数据的索引信息,确定修改数据对应的第一数据块;从第一数据块的第一修改写入区中分配第一存储空间。具体的,根据修改数据对应的源数据的索引信息,首先可定位到该修改数据对应的第一数据块,然后在该第一数据块的第一修改写入区分配对应的第一存储空间。进一步的,从第一数据块的第一修改写入区中分配第一存储空间,具体可以通过如下方式实现:确定修改数据对应的源数据是否已进行修改;若修改数据对应的源数据已进行修改,则将第一修改写入区中源数据对应的存储空间作为第一存储空间;若修改数据对应的源数据未进行修改,则从第一修改写入区中未写入数据的存储空间中分配第一存储空间。具体的,可以先确定该修改数据对应的源数据是否已进行修改,若已进行修改写,则继续写入之前该第一修改写入区中源数据对应的存储空间,例如图3中第2个数据片已写入该源数据对应的修改数据,则此次该源数据对应的修改数据也写入第2个数据片中。一个数据片可以对应一个源数据的修改数据,可以重复修改写入。若该修改数据对应的源数据未进行过修改,则从第一修改写入区中未写入数据的存储空间中顺序分配一块新的存储空间,例如图3所示,第1、2个数据片已存储修改数据,则此次可以分配第3个数据片对应的存储空间作为第一存储空间。其中,可以按照如下方式确定源数据是否进行修改写:确定已修改的key记录中是否存在修改数据的key;若存在,则确定修改数据对应的源数据已进行修改;若不存在,则确定修改数据对应的源数据未进行修改;相应的,所在第一存储空间中写入修改数据之后,还包括:若修改数据被写入成功,则将修改数据的key记录到已修改的key记录中。具体的,可以将已修改的源数据的key记录到一个key记录中,在进行修改时,可以查询该key记录确定该key对应的源数据是否已进行修改。在一个可选的实施例中,如图4所示,以接收修改请求的节点与写入修改数据的节点为不同集群节点为例进行说明,在实际应用中,第一集群节点与第二集群节点可以是同一个集群节点。客户端设备向集群系统中第一集群节点发送修改请求,包括节点id、修改数据和修改数据的信息(该信息例如包括修改数据key值),第一集群节点解析得到对应的节点id(修改数据对应的源数据存储在该节点id对应的节点上)和修改数据的key,将修改数据发送给节点id对应的第二集群节点,该节点id对应的集群节点查询本地数据块获取修改数据对应的源数据的索引信息,进而获取到第一数据块id,申请第一数据块id对应的第一数据块中key对应的第一修改写入区中的数据片(即该修改数据对应的源数据在第一修改写入区中对应的数据片),将修改数据写入该第一修改写入区中的数据片,并更新第一数据块中修改数据对应的源数据的索引信息,向客户端设备返回修改成功的指示信息。在上述实施例的基础上,为了数据安全性,也为了数据高可用性,可以将数据按照数据块为单位进行备份存储。相同的数据既存储在主数据块中,也存储在备份数据块中。数据写入时,可以先写入主数据块,待主数据块写入成功后再写入备份数据块中。主数据块和备份数据块既可以存储在相同的物理存储介质,也可以存储在不同的物理存储介质中,本案发明实施例对此并不限制。前述实施例中的第一数据块可以是主数据块也可以是备份数据块,此处第一数据块作为主数据块、第二数据块作为备份数据块为例进行说明:本实施例的方法,还包括:获取修改数据在第二数据块中对应的源数据的索引信息;根据第二数据块中对应的源数据的索引信息,分配第二数据块的第二修改写入区中用于存储修改数据的第二存储空间;第二数据块还包括第二源数据区;第二源数据区存储修改数据在第一备份数据块中对应的源数据;第二修改写入区用于存储第二源数据区中源数据对应的修改数据;在第二存储空间中写入修改数据,并更新第二数据块中修改数据对应的源数据的索引信息。具体的,图3中修改写入区在此实施例中对应第二修改写入区,源数据区在此实施例中对应第二源数据区。写入第二数据块中的执行流程与写入第一数据块中相同,此处不再赘述。在以上修改的过程中,写入第一数据块时,为保障数据完整性,此时不允许同时读该第一数据块,对于第二数据块同样适用。为了保证读业务不中断,此时第二数据块将发挥作用,在第一数据块处于修改过程中时,第二数据块不能进行修改,因此,此时可以从第二数据块读取数据,从而保障了读业务的不中断。在一个可选的实施例中,如图5所示,其中,第一集群节点与第二集群节点和第三集群节点可以是相同的集群节点或不同的集群节点,图5中以不同的集群节点为例进行说明,客户端设备向集群系统中第一集群节点发送修改请求,包括节点id、修改数据和修改数据的信息(该信息例如包括修改数据key值),第一集群节点解析得到对应的节点id(修改数据对应的源数据存储在该节点id对应的节点上)和修改数据的key,将修改数据发送给节点id对应的第二集群节点,该节点id对应的第二集群节点将修改数据发给第二数据块所在的第三集群节点,第二数据块所在的第三集群节点查询本地数据块获取第二数据块中修改数据对应的源数据的索引信息,进而获取到第二数据块id,申请第二数据块id对应的第二数据块中key对应的第二修改写入区中的数据片(即该修改数据对应的源数据在第二修改写入区中对应的数据片),将修改数据写入该第二修改写入区中的数据片,并更新第二数据块中修改数据对应的源数据的索引信息,向客户端设备返回修改成功的指示信息。如图5所示,由于数据是双副本存储在不同的数据块中(不同的数据块可以存储在不同的物理节点上),因此修改可以是先修改第一数据块、再修改第二数据块,两个块执行相同的数据修改操作,那么可能存在一个修改成功,一个修改失败的场景(例如单个节点不在线、数据块被其他线程独占打开失败等)。在这种场景下,仍需要返回给用户修改成功,但是程序会记录下一个异步修改任务。该任务记录本次修改的key,以及修改成功的节点、修改失败的节点信息,后台会定时巡检执行该任务,执行时将从修改成功的数据块读取最新数据写入到修改失败的数据块中,执行成功后删除该任务。在一实施例中,如图5所示,可以同时修改第一数据块和第二数据块(采用多线程并发执行),或者,先修改第一数据块再修改第二数据块,本申请实施例对此并不限定。在上述实施例的基础上,将修改数据存储在修改写入区中,批量提取数据时,会存在数据替换的操作,即将已修改的源数据替换为修改写入区中写入的修改数据,数据替换即存在数据拷贝操作,因此会有一定的性能损耗,为了克服该性能损耗,本实施例中引入数据整理方案。若确定满足预设的整理触发条件,则将第一数据块中第一修改写入区的已写入数据,写入到第一源数据区中与已写入数据对应的源数据所在位置,并更新第一数据块中已写入数据对应的源数据的索引信息;整理触发条件包括以下至少一项:已使用的第一修改写入区的存储空间占整个第一修改写入区的存储空间的比例达到预设阈值、第一数据块中存在已进行修改的源数据且第一数据块超过预设时长未进行修改。具体的,一方面,如果一个数据块内数据进行修改的比例超过一定比例,即修改写入区中写入数据所占的存储空间占修改写入区存储空间的比例超过一定比例,可能会导致修改写入区待使用的容量不足;另一方面,本发明实施例方案的核心是使得数据块中每条数据连续存储,提高数据批量提取性能。因此,综合以上两个原因,需要定时将数据块修改写入区写入的修改数据回写到源数据区,并更新该数据块中所有偏移、长度发生过变化的源数据的索引信息,回写完成后,释放修改写入区的存储空间,允许新的修改数据写入。以上过程可以称为数据块整理流程。以上数据块整理流程需要预设的触发条件触发执行,该触发条件包括以下至少一项:已使用的第一修改写入区的存储空间占整个第一修改写入区的存储空间的比例达到预设阈值、所述第一数据块中存在已进行修改的源数据且所述第一数据块超过预设时长未进行修改。在具体实现中,需要记录每个数据块的已使用的修改写入区的存储空间、超时未修改时间,并定时检测以上两个条件,若满足任一触发条件,均可以开始执行数据块整理流程。数据块整理流程的实现方案可以采用如下几种:一种实现方案:在第一数据块进行整理之前,还包括:将第二数据块进行锁定;第二数据块在锁定时处于只读状态;相应的,在第一数据块整理完成之后,对第二数据块进行解锁。具体的,当第一数据块进行整理时,优先保证该第一数据块的数据已备份至第二数据块中,否则暂不开始整理。当第一数据块整理流程开始后,第二数据块锁定,不允许该第二数据块进行整理。当第一数据块整理完成后,通知第二数据块解锁,其中,第二数据块可以存储在与第一数据块不同的节点中。数据块整理过程中,进行整理流程的第一数据块不允许读写、修改,第二数据块可读。执行数据整理时,首先需要读取到第一修改写入区的所有写入的修改数据,按照其源数据在第一源数据区的顺序排列,依次写入到第一源数据区对应的源数据所在位置,并保持全部写入完成后,所有源数据依然连续存储。全部写入完成后,更新该第一数据块中全部数据的索引信息中的存储位置信息。数据整理成功后,解锁备份的第二数据块,整理完成。该方案通过数据存储在第一数据块以及备份的第二数据块中来保障数据的安全性,而且第一数据块以及备份的第二数据块的整理过程必须互斥进行。其中,可以预先存储第一数据块以及备份的第二数据块的对应关系。另一种实现方案:在第一数据块进行整理之前,还包括:将第一数据块的数据备份到第三数据块中;第三数据块在将第一数据块中第一修改写入区的已写入数据,写入到第一源数据区的过程中处于只读状态;写入成功后,释放第三数据块的存储空间。具体的,在一种可选的实施例中,第一数据块和第二数据块的整理流程可以独立进行,在进行整理时可以将第一数据块(或第二数据块)进行数据备份,即备份在第三数据块中,整理过程中第三数据块处于只读模式,整理完成后,释放第三数据块;若整理过程中发生异常,则从第三数据块中恢复数据到第一数据块(或第二数据块)。此方案增加了对第三数据块的数据写入,io代价较大。第二数据块的整理流程同第一数据块的整理流程相同,此处不再赘述。如图6所示,示出了数据块中修改前、修改后、整理完成后的结果,修改前源数据区存储了数据1、数据2,修改后在修改写入区中写入了数据1对应的新数据1,整理完成后将修改写入区中的新数据1替换数据1,写入到源数据区中。在数据整理过程中可能会整理失败。例如,整理流程执行过程中物理主机忽然断电,或者整理到一半物理磁盘忽然离线等。这些因素可能导致数据块中部分数据为新,部分数据为旧,甚至数据完全错乱。为了解决这种概率性事件导致的数据丢失,利用数据备份机制进行数据恢复。数据恢复流程如下:若将第一数据块中第一修改写入区的已写入数据,写入到第一源数据区中失败,则将第一数据块对应的第二数据块的数据拷贝至新的第一数据块的存储空间中,并更新第一数据块中源数据的索引信息。具体的,由于整理前第一数据块存在备份数据块,例如第二数据块,若第一数据块整理失败,可以使用备份的第二数据块进行数据恢复。若第二数据块整理失败,同样也可以使用第一数据块进行数据恢复。本实施例中,以第一数据块整理失败为例进行说明,开辟一个新的第一数据块,读取第二数据块中全部最新数据(若该key已被修改则从第二数据块的修改写入区读,否则从第二数据块的源数据区读),按照在第二数据块中的位置写入新的第一数据块的源数据区。全部写入完成后,更新第一数据块中全部数据的索引信息,即更新索引信息中数据的存储位置信息。在一实施例中,完成恢复后,需要对原已损坏第一数据块执行重置块操作,该块被重置后,可以作为一个新数据块进行使用(即该数据块对应的存储空间可以作为一个新数据块进行使用),且也不会再获取到该已损坏的第一数据块,避免了数据的重复恢复。在一个可选的实施例中,可以定时确定是否存在整理失败的数据块,获取整理失败的数据块的信息,并进行数据恢复。进一步的,在数据恢复完成后,可以删除原第一数据块。更新第一数据块-第二数据块的对应关系。恢复完成的数据块中,依然遵循块内数据连续存储的机制。在一个可选的实施例中,如图7所示,数据块整理流程如下:首先定时检测到需要整理的数据块,判断该数据块是否为主数据块,若是主数据块则查询是否已备份完成,若已备份完成,则向备份数据块下发锁定,锁定成功后,即可开始进行数据整理;进一步确定是否整理成功,若整理成功,则解锁备份数据块,若整理失败,则调用数据恢复接口进行数据块恢复,将备份数据块中的数据拷贝至新的主数据块中,并更新主数据块中数据对应的索引信息,例如更新索引信息中存储位置信息。若判断该数据块为备份数据块,则向主数据块下发锁定,锁定成功后,即可开始进行数据块整理。进一步确定是否整理成功,若整理成功,则解锁主数据块,若整理失败,则调用数据恢复接口进行数据块恢复,将主数据块中的数据拷贝至新的备份数据块中,并更新备份数据块中数据对应的索引信息,例如更新索引信息中存储位置信息。被锁定的备份数据块/主数据块,限制其不进行整理。本发明实施例的方法,数据块内划分为源数据区与修改写入区,并且将新数据定时回写到源数据区(即数据整理过程),使得能够保证数据连续存储,从而实现数据批量提取时小io合并为大io,达到提高数据提取性能的目的。数据的备份存储保证了在修改的同时,读数据业务不中断,并且在数据整理失败的情况下,能够及时恢复数据,保证了数据安全性。图8为本发明提供的连续存储数据的修改装置实施例的结构图,如图8所示,该连续存储数据的修改装置包括:获取模块801,用于根据获取到的修改请求,获取第一数据块中修改数据对应的源数据的索引信息;分配模块802,用于根据所述第一数据块中修改数据对应的源数据的索引信息,分配所述第一数据块的第一修改写入区中用于存储所述修改数据的第一存储空间;所述第一数据块还包括第一源数据区;所述第一源数据区连续存储至少两条源数据;所述至少两条源数据包括所述修改数据对应的源数据;所述第一修改写入区用于存储所述第一源数据区中源数据对应的修改数据;处理模块803,用于在所述第一存储空间中写入所述修改数据,并更新所述第一数据块中所述修改数据对应的源数据的索引信息。在一种可能的实现方式中,所述获取模块801,用于:根据所述修改请求中包括的所述修改数据的索引键值key,获取所述第一数据块中修改数据对应的源数据的索引信息;所述key包括:所述修改数据的文件名;所述索引信息包括以下至少一项:所述修改数据对应的源数据所在的存储设备的标识、所述第一数据块的标识id、所述修改数据对应的源数据在所述第一源数据区的偏移信息以及所述修改数据对应的源数据的数据长度信息。在一种可能的实现方式中,所述分配模块802,用于:根据所述第一数据块中修改数据对应的源数据的索引信息,确定所述修改数据对应的所述第一数据块;从所述第一数据块的第一修改写入区中分配所述第一存储空间。在一种可能的实现方式中,所述分配模块802,用于:确定所述修改数据对应的源数据是否已进行修改;若所述修改数据对应的源数据已进行修改,则将所述第一修改写入区中所述源数据对应的存储空间作为所述第一存储空间;若所述修改数据对应的源数据未进行修改,则从所述第一修改写入区中未写入数据的存储空间中分配所述第一存储空间。在一种可能的实现方式中,所述分配模块802,用于:确定已修改的key记录中是否存在所述修改数据的key;若存在,则确定所述修改数据对应的源数据已进行修改;若不存在,则确定所述修改数据对应的源数据未进行修改;相应的,所述在所述第一存储空间中写入所述修改数据之后,还包括:若所述修改数据被写入成功,则将所述修改数据的key记录到所述已修改写的key记录中。在一种可能的实现方式中,所述处理模块803,用于:将所述第一数据块中修改数据对应源数据的索引信息中的偏移信息更新为所述修改数据在所述第一修改写入区的偏移信息,并将所述第一数据块中修改数据对应源数据的索引信息中的数据长度信息更新为所述修改数据的数据长度信息。在一种可能的实现方式中,所述第一源数据区的存储空间的大小与所述第一修改写入区的存储空间的大小按照预设比例分配。在一种可能的实现方式中,获取模块801还用于:获取所述修改数据在第二数据块中对应的源数据的索引信息;分配模块802,还用于根据所述第二数据块中对应的源数据的索引信息,分配所述第二数据块的第二修改写入区中用于存储所述修改数据的第二存储空间;所述第二数据块还包括第二源数据区;所述第二源数据区存储所述修改数据在第二数据块中对应的源数据;所述处理模块803,还用于在所述第二存储空间中写入所述修改数据,并更新所述第二数据块中所述修改数据对应的源数据的索引信息。在一种可能的实现方式中,所述处理模块803,用于:若确定满足预设的触发条件,则将所述第一数据块中第一修改写入区的已写入数据,写入到所述第一源数据区中与所述已写入数据对应的源数据所在位置,并更新所述第一数据块中所述已写入数据对应的源数据的索引信息;所述触发条件包括以下至少一项:已使用的第一修改写入区的存储空间占整个第一修改写入区的存储空间的比例达到预设阈值、所述第一数据块中存在已进行修改的源数据且所述第一数据块超过预设时长未进行修改。在一种可能的实现方式中,所述处理模块803,用于:将第二数据块进行锁定;所述第二数据块在锁定时处于只读状态;相应的,在写入到所述第一源数据区中与所述已写入数据对应的源数据所在位置完成之后,对所述第二数据块进行解锁。在一种可能的实现方式中,所述处理模块803,用于:若将所述第一数据块中第一修改写入区的已写入数据,写入到所述第一源数据区中失败,则将所述第一数据块对应的第二数据块的数据拷贝至新的第一数据块的存储空间中,并更新所述第一数据块中源数据的索引信息。在一种可能的实现方式中,所述处理模块803,用于:将所述第一数据块的数据备份到第三数据块中;所述第三数据块在将所述第一数据块中第一修改写入区的已写入数据,写入到所述第一源数据区中的过程中处于只读状态;在将所述第一数据块中第一修改写入区的已写入数据,写入到所述第一源数据区写入成功后,释放所述第三数据块的存储空间。本实施例的装置,用于执行前述方法实施例中对应的方法,其具体实施过程可以参见前述方法实施例,此处不再赘述。图9为本发明提供的电子设备实施例的结构图,如图9所示,该电子设备包括:处理器901,以及,用于存储处理器901的可执行指令的存储器902。可选的,还可以包括:通信接口903,用于实现与其他设备的通信。上述部件可以通过一条或多条总线进行通信。其中,处理器901配置为经由执行所述可执行指令来执行前述方法实施例中对应的方法,其具体实施过程可以参见前述方法实施例,此处不再赘述。图10为本发明提供的集群系统实施例的结构图,如图10所示,该集群系统包括:第一集群节点,第二集群节点;其中,所述第一集群节点用于接收修改请求,并将所述修改请求发送给所述第二集群节点;所述修改请求包括:所述第二集群节点的标识、修改数据和修改数据的信息;所述第二集群节点,配置为执行如权利要求1-12任一项所述的方法。本实施例的集群系统,用于实现前述方法实施例中对应的方法,其具体实施过程可以参见前述方法实施例,此处不再赘述。本发明实施例中还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述方法实施例中对应的方法,其具体实施过程可以参见前述方法实施例,其实现原理和技术效果类似,此处不再赘述。本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本发明旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本
技术领域
中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求书指出。应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求书来限制。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1