CN103502970B - 一种键值对的操作方法及装置 - Google Patents
一种键值对的操作方法及装置 Download PDFInfo
- Publication number
- CN103502970B CN103502970B CN201180003583.8A CN201180003583A CN103502970B CN 103502970 B CN103502970 B CN 103502970B CN 201180003583 A CN201180003583 A CN 201180003583A CN 103502970 B CN103502970 B CN 103502970B
- Authority
- CN
- China
- Prior art keywords
- key
- value
- value pair
- storage system
- shadow
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 41
- 230000009471 action Effects 0.000 claims abstract description 34
- 230000002688 persistence Effects 0.000 claims description 18
- 230000009467 reduction Effects 0.000 claims description 14
- 238000007689 inspection Methods 0.000 claims description 2
- 230000005540 biological transmission Effects 0.000 claims 3
- 230000002085 persistent effect Effects 0.000 description 9
- 230000008569 process Effects 0.000 description 7
- 238000003780 insertion Methods 0.000 description 5
- 230000037431 insertion Effects 0.000 description 5
- 238000011084 recovery Methods 0.000 description 5
- 238000002955 isolation Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 239000004575 stone Substances 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 239000002253 acid Substances 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000012467 final product Substances 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000007257 malfunction Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0894—Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种键值对的操作方法及装置,其中方法包括:为上层应用系统传送的键值对创建影子日志,所述键值对包括键和值,所述影子日志中记录有所述键值对的操作类型、所述键、所述值、所述值的类型;将所述影子日志写入键值存储系统;若所述影子日志被成功写入所述键值存储系统,将所述键值对写入所述键值存储系统。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种键值对的操作方法及装置。
背景技术
在数据库系统中,一个事务是指由一系列数据库操作序列组成的一个完整的逻辑过程。例如银行转帐,从原账户扣除金额,以及向目标账户添加金额,这两个数据库操作的总和,构成一个完整的逻辑过程,不可拆分,这个过程就被称为一个事务,一个事务具有四大特性(英文简称ACID:原子性atomicity、一致性consistency、隔离性isolation、持久性durability)。
键值(Key-Value)存储系统具有很高的可伸缩性和鲁棒性,已经在越来越多的数据库系统中得到了广泛的使用,但是通常Key-Value存储系统在提供基于一个键值(key-value)对的插入(put)/获取(get)/删除(delete)接口时能够保证原子性和一致性,但是Key-Value存储系统对Value的大小存在限制,而且对key-value对的操作是整存整取的操作方式,没有提供能保证一次性put/delete多个key-value对的接口,也就是说现有的Key-Value存储系统无法解决在必须保证原子性和持久性的场景中一次性put/delete多个key-value对的问题。
在计算机科学中,为了实现一个事务的原子性和持久性,现有技术中存在一种预写式日志(WAL,WriteAheadLogging)的方式,预写式日志是关系数据库系统中用于提供原子性和持久性(ACID属性中的两个)的一系列技术,在使用WAL的系统中,所有的操作在提交之前都要先写入日志(log)文件中,log文件中通常包括重做(redo)和撤销(undo)信息。这样做的目的可以通过一个例子来说明:假设一个程序在执行某些操作的过程中机器掉电了,在重新启动时,程序可能需要知道当时执行的操作是成功了还是部分成功或者是失败了,如果使用了WAL,程序就可以检查log文件,并对突然掉电时计划执行的操作内容跟实际上执行的操作内容进行比较,在这个比较的基础上,程序就可以决定是保持原样还是继续完成剩余的操作,或者是撤销已做的操作。
但是现有技术中通过WAL方式实现事务的原子性和持久性的技术方案中,至少存在以下缺陷:1、实现过程复杂且效率低,WAL是系统级的日志系统,对所有更新操作都需要记录下来log文件,以用于出现故障后恢复系统,而大部分的单一put/delete操作都是本身就由key-value存储系统保证了原子性和持久性的,故并不需要重复记录log文件,另外当使用WAL的系统出现故障之后,需要从庞大的日志系统中找到出错的点对应的日志段才能进行恢复,且需要比较复杂的检查点机制;2、WAL记录的是操作日志,出现故障时需要通过操作重放或者找到对应的反向操作进行回退,而基于Key-Value存储系统的应用中有些场景在下次重做或反向操作的时候计算出来的key和value是不能保证跟上次执行时计算出来的结果完全一样,这就导致无法恢复系统;3、由于key-value存储系统的特点是对value的大小存在限制,同时还有个特点是整存整取,也就是说对于value的任何一次修改都必须将整个value取出来增加或者删除value内部部分内容然后再将整个value写进去,这就导致有可能记录下来的操作日志在下次用于恢复的时候发现value过大而写不进去,导致恢复系统失败。
综上所述,现有的WAL方式并不能用于键值存储系统解决在必须保证原子性和持久性的场景中一次性插入或删除多个键值对的问题,这就使得在使用键值存储系统时解决在必须保证原子性和持久性的场景中一次性对多个键值对进行操作成为一个难题。
发明内容
本发明实施例提供了一种键值对的操作方法及装置,能够解决使用键值对系统时在必须保证原子性和持久性的场景中一次性对多个键值对进行操作的问题。
一方面,本发明实施例提供的键值对的操作方法,包括:
为上层应用系统传送的键值对创建影子日志,所述键值对包括键和值,所述影子日志中记录有所述键值对的操作类型、所述键、所述值、所述值的类型;
将所述影子日志写入键值存储系统;
若所述影子日志被成功写入所述键值存储系统,将所述键值对写入所述键值存储系统。
另一方面,本发明实施例提供的键值对的操作装置,包括:
创建单元,用于为上层应用系统传送的键值对创建影子日志,所述键值对包括键和值,所述影子日志中记录有所述键值对的操作类型、所述键、所述值、所述值的类型;
日志存储单元,用于将所述影子日志写入键值存储系统;
键值对存储单元,用于当所述影子日志被成功写入所述键值存储系统时,将所述键值对写入所述键值存储系统。
从以上技术方案可以看出,本发明实施例具有以下优点:
本发明实施例中,由于首先为键值对创建影子日志,然后先将该影子日志写入键值存储系统,只有在影子日志被成功写入键值存储系统时才将上层应用系统传送的键值对写入到键值存储系统,由于为键值对创建的影子日志记录有键值对的操作类型、键、值、值的类型,而影子日志能够被写入键值存储系统,则将键值对写入键值存储系统也就能够保证由键值对组成的事务的原子性和持久性。
附图说明
图1为本发明实施例提供的键值对的操作方法的一个示意图;
图2为本发明实施例提供的影子日志的结构示意图;
图3为本发明实施例提供的键值对的操作装置的一个示意图。
具体实施方式
本发明实施例提供了一种键值对的操作方法及装置,能够解决使用键值对系统时在必须保证原子性和持久性的场景中一次性对多个键值对进行操作的问题。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域的技术人员所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,本发明实施例提供的键值对的操作方法,包括:
101、为上层应用系统传送的键值对创建影子日志,键值对包括键和值,影子日志中记录有键值对的操作类型、键、值、值的类型。
在本发明实施例中,上层应用系统需要将键值对写入键值存储系统,但是为了保证事务的原子性和持久性,上层应用系统可以先将键值对传送给本发明实施例提供的键值对的操作装置,键值对的操作装置从上层应用系统获取到键值对后,为该键值对创建影子日志(英文全称shadowlog),该影子日志同时具有影子拷贝和日志系统的特性。
需要说明的是,上层应用系统传送的键值对包括键(key)和值(value)两部分,本发明实施例中为键值对创建的影子日志中记录有键值对的操作类型、键、值以及该值的类型,另外本发明实施例中键值对的操作装置可以为上层应用系统传送一系列键值对(即一组键值对或多个键值对)创建影子日志,在影子日志中记录各个键值对的操作类型、各个键值对的键和值以及每一个值的类型。本发明实施例中影子日志中将键值对的键和值、操作类型、值的类型都先记录下来,为能够在出现故障时能够原样恢复打下基础。操作类型包括插入(put)、获取(get)、删除(delete)三种,其中,put:将指定Key对应的Value插入到键值存储系统中;get:将指定key从键值存储系统中获取指定value;delete:将指定Key对应的value从键值存储系统中删除。
需要说明的是,本发明实施例中为上层应用系统传送的键值对创建影子日志具体可以包括步骤:
A1、根据键值对生成日志数据,其中,日志数据包括影子键和值,影子键为键的副本;
A2、根据键值对生成日志元数据,其中,日志元数据中包括键、值、值的类型以及键值对的操作类型。
对于步骤A1生成的日志数据(英文全称为logdata)包括影子键(英文全称为shadowkey)和值(该值和键值对中的值完全相同),影子键是键值对中的键的副本,在实际应用中,影子键的生成规则具体可以为:“前缀”+“影子日志ID”+“序列号”,例如,键为key1,则生成的键值对可以为shadowlog#<shadowname>#key1,当实际应用中也可以采用其他的方式根据键值对的键为其生成影子键,影子键生成后再配上原来键值对中的值就构成日志数据了。
对于步骤A2生成的日志元数据(英文全称为logmetadata)中包括键值对的键、值、值的类型、操作类型,其中,操作类型指的是上层应用系统对该键值对进行什么样的操作,具体可以指插入(put)或删除(delete)等操作,值的类型指的是键值对中的值属于什么类型的数据,当上层应用系统传送一系列键值对时,通过值的类型的区分能够将各个键值对根据值的类型的不同划分为不同的组,将值的类型相同的键值对划分为一个组,只需要用一个值的类型代表即可而不需要重复记录,另外键值对中的值记录在影子日志中是二进制数据,只有通过值的类型这一参数才能原样恢复出原键值对中值是什么类型,为原样恢复打下基础。
需要说明的是,通过步骤A1和步骤A2的生成过程,创建的影子日志其实包括日志数据和日志元数据,在实际应用中,还可以在影子日志中携带状态参数(status),状态参数用于标识步骤102中影子日志是否被成功写入键值存储系统,例如可以为状态参数预置两个不同的状态:成功(Yes)和未成功(No),该状态参数具体可以包括在日志元数据中。
为了详细说明本发明实施例中创建的影子日志,接下来以一个实际的应用场景来介绍影子日志,如图2所示为影子日志的结构示意图,在图2中,上层应用系统传送了3个键值对,分别为键1和值1、键2和值2、键3和值3,虚线的左侧是原始的3个键值对,虚线的右侧是创建的影子日志的具体内容,影子日志包括日志数据和日志元数据,在日志数据中,根据键1创建了影子键1:影子日志#<影子名称>#键1,同样根据键2创建了影子键2:影子日志#<影子名称>#键2,根据键3创建了影子键3:影子日志#<影子名称>#键3,并且影子键1、影子键2、影子键3分别配上了原始的键值对中的值1、值2、值3,在日志元数据中包括:影子日志的名称、状态参数、值的类型列表、影子数据信息列表,影子日志的名称为:影子日志#元数据#影子名称#序列号(英文全称为shadowlog#metadata#shadowname#serialnumber),状态参数包括成功(英文缩写Y)和未成功(英文缩写为N)两种,值的类型列表(英文全称为valueclassnamelist)中分别记录了3个键值对的值的类型,影子数据信息列表(英文全称为shadowdatainfolist),在每一个影子数据信息中包括有三个参数:影子键、操作类型、值的类型。
需要说明的是,在本发明实施例中,步骤101为上层应用系统传送的键值对创建影子日志之前还可以包括步骤:
判断上层应用系统传送的键值对是否需要保证原子性和持久性,若需要,触发步骤101执行,即在创建影子日志之前增加判断机制,本发明实施例提供的方法是用于解决在必须保证原子性和持久性的场景中一次性对多个键值对进行操作的问题,增加判断的过程在事务需要保证原子性和持久性时执行本发明实施例提供的方法,以兼容现有的上层应用系统和键值存储系统的交互技术,在实际应用中,可以通过封装成类似批量插入(batchput)/批量删除(batchdelete)接口来实现,当需要对事务的操作保证原子性和持久性时可以调用本发明实施例提供的批量插入/批量删除的接口来实现,也可以封装成一个接口例如批量操作(batchoperation)来实现,此处仅作说明不作限定。
102、将影子日志写入键值存储系统。
在本发明实施例中,步骤1为键值对创建影子日志之后,将创建的影子日志写入键值存储系统中,由于影子日志中记录有键值对的操作类型、键、值、值的类型,将影子日志写入键值存储系统,若能够写入成功,则表示影子日志中记录的值能够被写入键值存储系统中,若上层应用系统传送了一系列键值对(即一组键值对或多个键值对),若影子日志被写入键值存储系统成功了,则表示影子日志中记录的多个键值对的每个值都能够被写入键值存储系统,若影子日志写入存储系统未成功则说明影子日志中记录的值不能够被成功写入键值存储系统。
在实际应用中,如前述描述可以在影子日志中携带状态参数,用该状态参数的不同参数值(例如通过Yes和No)分别表示影子日志被成成功写入键值存储系统或未被成功写入键值存储系统。
需要说明的是,在本发明实施例中,将影子日志写入键值存储系统具体可以包括步骤:
B1、将日志数据写入键值存储系统;
B2、将日志元数据写入所述键值存储系统。
影子日志包括日志数据和日志元数据,对于步骤B1,写入键值存储系统的日志数据包括影子键和值,若日志数据能够被成功写入键值存储系统,则说明该日志数据中的值能够被写入键值存储系统。
对于步骤B2,将日志数据写入键值存储系统之后,将日志元数据写入键值存储系统,日志元数据包括键值对的操作类型、键、值、值的类型,日志元数据被写入键值存储系统为原始键值对出现故障时的原样恢复打下基础。
103、若影子日志被成功写入键值存储系统,将键值对写入键值存储系统。
在本发明实施例中,当步骤102将影子日志写入键值存储系统成功时,将上层应用系统传送的键值对写入键值存储系统,在本发明实施例中,是在创建的影子日志被成功写入键值存储系统之后才将上层应用系统传送的原始键值对写入键值存储系统中,当上层应用系统传送的原始键值对为多个时,由于为这些个键值对创建的影子日志能够被成功写入键值存储系统,故这些多个键值对也能够保证都被写入键值存储系统,能够保证由这些键值对组成的事件被操作的原子性和持久性,其中,原子性指的是事务的全部操作集合在数据库中要么全部正确反映、要么全部不反映的特性,持久性指的是一个事务成功完成后,它对数据库的更改便持久地保存在数据库之中,并且是完全的,即使系统可能出现故障。
需要说明的是,本发明实施例中步骤102执行之后还可以包括和步骤103并列的步骤:
若影子日志没有被成功写入键值存储系统,将创建的影子日志删除,并向上层应用系统反馈写入失败。
例如,可以通过在影子日志中携带的状态参数来识别,当状态参数为未成功时,表示影子日志没有被成功写入键值存储系统,将步骤101中创建的影子日志删除并向上层应用系统反馈写入失败,由上层应用系统对需要写入键值存储系统的键值对进行重新配置,需要说明的是,影子日志没有被成功写入键值存储系统的原因有很多,例如键值存储系统对值的大小存在限制,如键值存储系统只支持键的大小最大为1M,大于这个1M限制的值在进行操作时就会发生写入失败,又如键值存储系统自身设定的约束条件当键值对不满足该约束条件时无法成功写入键值存储系统,例如值不能为空、键值存储系统磁盘被写满等均可以作为键值存储系统自身设定的约束条件,当这些约束条件不满足时影子日志就无法成功被写入键值存储系统,由于影子系统中记录有键值对的操作类型、键、值、值的类型,所以原始的键值对也无法成功写入键值存储系统,在本发明实施例中,当影子日志无法成功写入键值存储系统时向上层应用系统反馈写入失败,由上层应用系统对需要写入键值存储系统的键值对进行重新配置,即本发明实施例中能够提前报错,及时报错给上层应用系统,而本发明实施例中原始的键值对此时并没有写入键值存储系统,而不用按照现有技术中通过WAL方式在故障恢复时才发现错误。
需要说明的是,在本发明实施例中步骤103执行之后还可以包括步骤:若将键值对成功写入键值存储系统,删除影子日志,即当影子日志的试写入功能实现之后,本发明实施例中并不需要永久性的保存该影子日志,这和现有技术中WAL方式中每一个操作在提交之前都需要保存在日志文件中是不同的,本发明实施例中创建影子日志主要是为了保证原始的键值对能够成功写入键值存储系统,而根据原始的键值对创建了影子日志,并且先将影子日志写入到键值存储系统,在影子日志成功写入键值存储系统之后再将原始的键值对写入键值存储系统。
需要说明的是,在本发明实施例中步骤103执行之后还可以包括步骤:
C1、若将键值对没有成功写入键值存储系统,从影子日志中获取操作类型、键、值、值的类型;
C2、根据操作类型、键、值、值的类型还原出键值对;
C3、将还原后的键值对写入键值存储系统。
也就是说,在步骤103执行失败时,本发明实施例还提供的原样恢复机制,从影子日志中提取键值对的相应信息,然后根据这些信息原样恢复出原始的键值对,即执行步骤C2,根据影子日志中记录的操作类型得到原键值对的操作类型、根据影子日志中记录的键、值以及值的类型可以得到原键值对,另外键值对中的值记录在影子日志中是二进制数据,只有通过值的类型这一参数才能原样恢复出原键值对中值是什么类型,通过该值的类型就能够原样恢复出原键值对中的值,而不需要按照现有技术中采用的WAL方式来恢复键和值,避免了按照现有的方式再次执行计算出来的结果不完全一样的问题,然后将还原的键值对写入键值存储系统。当上层应用系统传送多个键值对时,将多个键值对写入键值存储系统时,可能存在部分写入失败的情况,那么本发明实施例中通过日志元数据中包括的内容就直接可以恢复出原始的键值对,将还原后的键值对写入键值存储系统即可。
在将还原后的键值对写入键值存储系统之后还可以包括步骤:将创建的影子日志删除。
需要说明的是,在本发明实施例中,为了保证任何一个过程中出错都能够恢复,在步骤101之后还可以包括步骤:对影子日志进行周期异步任务巡检,在异步任务巡检的周期还没到来时,若上层应用系统向键值存储系统读取键值对,触发将键值对写入键值存储系统的操作,然后再响应上层应用系统的读取请求。也就是说,如果异步任务巡检恢复的周期还没到来,而这个时候上层应用需要读取刚创建了影子日志用于保证原子性和持久性的操作的原子对,则需要继续完成将键值对写入键值存储系统的操作,然后向上层应用系统反馈需要读取的键值对。例如周期性的巡检影子日志的状态参数,当状态参数表示未成功时,可以直接删除影子日志,以避免占用过多的空间资源,当状态参数表示成功时,可以进行重做,即执行步骤C1至C3,然后再将创建的影子日志删除,例如,周期设定1秒,就是指每隔1秒就轮询一下影子日志的状态。
以上实施例介绍了本发明实施例对事务的操作保证了原子性以及持久性,为了能够进一步的保证事务的其它两个特性(隔离性和一致性),可以通过增加锁机制,对数据集中的所有键进行加锁来进行并发控制,从而实现隔离性以及一致性。
本发明实施例中,由于首先为键值对创建影子日志,然后先将该影子日志写入键值存储系统,只有在影子日志被成功写入键值存储系统时才将上层应用系统传送的键值对写入到键值存储系统,由于为键值对创建的影子日志记录有键值对的操作类型、键、值、值的类型,而影子日志能够被写入键值存储系统,则将键值对写入键值存储系统也就能够保证由键值对组成的事务的原子性和持久性。
以上实施例介绍了本发明实施例提供的键值对的操作方法,接下来介绍本发明实施例提供的键值对的操作装置,在实际应用中,键值对的操作装置具体可以和键值存储系统和上层应用系统完全解耦,单独部署在键值存储系统和上层应用系统之间,独立成一个事务适配层,也可以以插件的形式发布,在需要保证事务的原子性和持久性时直接运行,当然本发明实施例提供的键值对的操作装置还可以部署在键值存储系统中,以扩大现有的键值存储系统无法保证多个键值对在操作时的原子性和持久性,扩大键值存储系统的应用范围,当然本发明实施例提供的键值对的操作装置还可以部署在上层应用系统中,这样就能够增加上层应用系统能够使用的键值存储系统的范围,从而有利于降低成本。
如图3所示,键值对的操作装置300,包括:
创建单元301,用于为上层应用系统传送的键值对创建影子日志,其中,键值对包括键和值,影子日志中记录有键值对的操作类型、键、值、值的类型;
日志存储单元302,用于将影子日志写入键值存储系统;
键值对存储单元303,用于当影子日志被成功写入键值存储系统时,将键值对写入键值存储系统。
需要说明的是,对于创建单元301而言,在实际应用中,具体可以包括:
第一生成模块,用于根据键值对生成日志数据,其中,日志数据包括影子键和值,影子键为所述键的副本;
第二生成模块,用于根据键值对生成日志元数据,日志元数据中包括键、值、值的类型、操作类型。
需要说明的是,对于日志存储单元302而言,在实际应用中,具体可以包括:
第一写入模块,用于将日志数据写入键值存储系统;
第二写入模块,用于将日志元数据写入所述键值存储系统。
如图3所示,在日志存储单元302执行之后,键值对的操作装置300还可以如下单元:失败处理单元304,用于当影子日志没有被成功写入键值存储系统时,将创建的影子日志删除,并向上层应用系统反馈写入失败,
如图3所示,在键值对存储单元303执行之后,键值对的操作装置300还可以如下单元:第一删除单元305,用于若将键值对成功写入键值存储系统,删除影子日志。
如图3所示,在键值对存储单元303执行之后,键值对的操作装置300还可以如下单元:
获取单元306,用于若将键值对没有成功写入键值存储系统,从影子日志中获取操作类型、键、值、值的类型;
还原单元307,用于根据操作类型、键、值、值的类型还原出键值对;
键值对重存储单元308,用于将还原后的键值对写入键值存储系统。
在键值对重存储单元308执行之后,键值对的操作装置300还可以如下单元:第二删除单元309,用于在键值对重存储单元执行之后将创建的影子日志删除。
需要说明的是,在本发明实施例中,在创建单元301执行之后还可以包括:巡检单元(未在图3中示出),用于对影子日志进行周期异步任务巡检,在异步任务巡检的周期还没到来时,若上层应用系统向键值存储系统读取键值对,触发将键值对写入键值存储系统的操作,然后再响应上层应用系统的读取请求。在创建单元301执行之前还可以包括:判断单元(未在图3中示出),用于判断上层应用系统传送的键值对是否需要保证原子性和持久性,若需要,触发创建单元301执行。
需要说明的是,上述装置各模块/单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其带来的技术效果与本发明方法实施例相同,具体内容可参见本发明如图1所示的方法实施例中的叙述,此处不再赘述。
本发明实施例中,由于创建单元首先为键值对创建影子日志,然后日志存储单元先将该影子日志写入键值存储系统,只有在影子日志被成功写入键值存储系统时键值对存储单元才将上层应用系统传送的键值对写入到键值存储系统,由于为键值对创建的影子日志记录有键值对的操作类型、键、值、值的类型,而影子日志能够被写入键值存储系统,则将键值对写入键值存储系统也就能够保证由键值对组成的事务的原子性和持久性。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上对本发明所提供的一种键值对的操作方法及装置进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,因此,本说明书内容不应理解为对本发明的限制。
Claims (19)
1.一种键值对的操作方法,其特征在于,包括:
为上层应用系统传送的键值对创建影子日志,所述键值对包括键和值,所述影子日志中记录有所述键值对的操作类型、所述键、所述值、所述值的类型;
将所述影子日志写入键值存储系统;
若所述影子日志被成功写入所述键值存储系统,将所述键值对写入所述键值存储系统。
2.根据权利要求1所述的键值对的操作方法,其特征在于,所述为上层应用系统传送的键值对创建影子日志包括:
根据所述键值对生成日志数据,所述日志数据包括影子键和所述值,所述影子键为所述键的副本;
根据所述键值对生成日志元数据,所述日志元数据中包括所述键、所述值、所述值的类型、所述操作类型。
3.根据权利要求2所述的键值对的操作方法,其特征在于,所述将所述影子日志写入键值存储系统包括:
将所述日志数据写入所述键值存储系统;
将所述日志元数据写入所述键值存储系统。
4.根据权利要求1所述的键值对的操作方法,其特征在于,所述方法还包括:
若所述影子日志没有被成功写入所述键值存储系统,将创建的影子日志删除,并向所述上层应用系统反馈写入失败。
5.根据权利要求1或4所述的键值对的操作方法,其特征在于,所述影子日志中携带有状态参数,所述状态参数用于标识所述影子日志是否被成功写入所述键值存储系统。
6.根据权利要求1所述的键值对的操作方法,其特征在于,所述方法还包括:若将所述键值对成功写入所述键值存储系统,删除所述影子日志。
7.根据权利要求1所述的键值对的操作方法,其特征在于,所述方法还包括:
若将所述键值对没有成功写入所述键值存储系统,从所述影子日志中获取所述操作类型、所述键、所述值、所述值的类型;
根据所述操作类型、所述键、所述值、所述值的类型还原出键值对;
将还原后的键值对写入所述键值存储系统。
8.根据权利要求7所述的键值对的操作方法,其特征在于,所述将还原后的键值对写入所述键值存储系统之后还包括:将创建的影子日志删除。
9.根据权利要求1所述的键值对的操作方法,其特征在于,所述为上层应用系统传送的键值对创建影子日志之后,还包括:
对所述影子日志进行周期异步任务巡检;
在所述异步任务巡检的周期还没到来时,若所述上层应用系统向所述键值存储系统读取所述键值对,触发将键值对写入键值存储系统的操作,然后再响应所述上层应用系统的读取请求。
10.根据权利要求1所述的键值对的操作方法,其特征在于,所述为上层应用系统传送的键值对创建影子日志之前,还包括:
判断所述上层应用系统传送的键值对是否需要保证原子性和持久性,若需要,触发所述为上层应用系统传送的键值对创建影子日志执行。
11.一种键值对的操作装置,其特征在于,包括:
创建单元,用于为上层应用系统传送的键值对创建影子日志,所述键值对包括键和值,所述影子日志中记录有所述键值对的操作类型、所述键、所述值、所述值的类型;
日志存储单元,用于将所述影子日志写入键值存储系统;
键值对存储单元,用于当所述影子日志被成功写入所述键值存储系统时,将所述键值对写入所述键值存储系统。
12.根据权利要求11所述的键值对的操作装置,其特征在于,所述创建单元包括:
第一生成模块,用于根据所述键值对生成日志数据,所述日志数据包括影子键和所述值,所述影子键为所述键的副本;
第二生成模块,用于根据所述键值对生成日志元数据,所述日志元数据中包括所述键、所述值、所述值的类型、所述操作类型。
13.根据权利要求12所述的键值对的操作装置,其特征在于,日志存储单元包括:
第一写入模块,用于将所述日志数据写入所述键值存储系统;
第二写入模块,用于将所述日志元数据写入所述键值存储系统。
14.根据权利要求11所述的键值对的操作装置,其特征在于,所述装置还包括:
失败处理单元,用于当所述影子日志没有被成功写入所述键值存储系统时,将创建的影子日志删除,并向所述上层应用系统反馈写入失败。
15.根据权利要求11所述的键值对的操作装置,其特征在于,所述装置还包括:
第一删除单元,用于若将所述键值对成功写入所述键值存储系统,删除所述影子日志。
16.根据权利要求11所述的键值对的操作装置,其特征在于,所述装置还包括:
获取单元,用于若将所述键值对没有成功写入所述键值存储系统,从所述影子日志中获取所述操作类型、所述键、所述值、所述值的类型;
还原单元,用于根据所述操作类型、所述键、所述值、所述值的类型还原出键值对;
键值对重存储单元,用于将还原后的键值对写入所述键值存储系统。
17.根据权利要求16所述的键值对的操作装置,其特征在于,所述装置还包括:
第二删除单元,用于在所述键值对重存储单元执行之后将创建的影子日志删除。
18.根据权利要求11所述的键值对的操作装置,其特征在于,所述装置还包括:
巡检单元,用于对所述影子日志进行周期异步任务巡检,在所述异步任务巡检的周期还没到来时,若所述上层应用系统向所述键值存储系统读取所述键值对,触发将键值对写入键值存储系统的操作,然后再响应所述上层应用系统的读取请求。
19.根据权利要求11所述的键值对的操作装置,其特征在于,所述装置还包括:
判断单元,用于判断所述上层应用系统传送的键值对是否需要保证原子性和持久性,若需要,触发所述创建单元执行。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2011/084320 WO2013091183A1 (zh) | 2011-12-21 | 2011-12-21 | 一种键值对的操作方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103502970A CN103502970A (zh) | 2014-01-08 |
CN103502970B true CN103502970B (zh) | 2016-01-27 |
Family
ID=48667642
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201180003583.8A Active CN103502970B (zh) | 2011-12-21 | 2011-12-21 | 一种键值对的操作方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN103502970B (zh) |
WO (1) | WO2013091183A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103838844B (zh) * | 2014-03-03 | 2018-01-19 | 珠海市君天电子科技有限公司 | 一种键值对数据存储、传输方法及装置 |
CN107765992B (zh) * | 2016-08-22 | 2021-01-15 | 华为技术有限公司 | 一种处理数据的方法和装置 |
CN108287832B (zh) * | 2017-01-09 | 2022-02-01 | 上海掌门科技有限公司 | 插入标签的方法和装置 |
CN109542665A (zh) * | 2017-09-21 | 2019-03-29 | 阿里巴巴集团控股有限公司 | 掉电恢复方法、数据写入方法及装置 |
WO2019127456A1 (zh) * | 2017-12-29 | 2019-07-04 | 华为技术有限公司 | 处理预写日志的方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1289966A (zh) * | 1999-09-29 | 2001-04-04 | 株式会社东芝 | 通过事务对多个文件实现原子更新的事务文件系统 |
US7526720B1 (en) * | 2000-11-22 | 2009-04-28 | Adobe Systems Incorporated | System and method for storing data associated with a file |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7451166B2 (en) * | 2005-01-13 | 2008-11-11 | International Business Machines Corporation | System and method for maintaining checkpoints of a keyed data structure using a sequential log |
US8396932B2 (en) * | 2010-04-07 | 2013-03-12 | Apple Inc. | Apparatus and method for efficiently managing data in a social networking service |
US8700670B2 (en) * | 2010-04-12 | 2014-04-15 | Symantec Corporation | Insert optimization for B+ tree data structure scalability |
-
2011
- 2011-12-21 WO PCT/CN2011/084320 patent/WO2013091183A1/zh active Application Filing
- 2011-12-21 CN CN201180003583.8A patent/CN103502970B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1289966A (zh) * | 1999-09-29 | 2001-04-04 | 株式会社东芝 | 通过事务对多个文件实现原子更新的事务文件系统 |
US7526720B1 (en) * | 2000-11-22 | 2009-04-28 | Adobe Systems Incorporated | System and method for storing data associated with a file |
Also Published As
Publication number | Publication date |
---|---|
CN103502970A (zh) | 2014-01-08 |
WO2013091183A1 (zh) | 2013-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105095013B (zh) | 数据存储方法、恢复方法、相关装置以及系统 | |
CN103502970B (zh) | 一种键值对的操作方法及装置 | |
CN102891849B (zh) | 业务数据同步方法、恢复方法及装置和网络设备 | |
US8806264B2 (en) | Methods for detecting split brain in a distributed system | |
CN111581020B (zh) | 一种分布式块存储系统中数据恢复的方法和装置 | |
CN105159818A (zh) | 内存数据管理中日志恢复方法及其仿真系统 | |
US20070239758A1 (en) | Loosely Coupled Log Sequence Identifiers | |
CN109189608A (zh) | 一种保证复制事务一致性的方法以及相应的复制装置 | |
CN102750322B (zh) | 一种机群文件系统分布式元数据一致性保证方法和系统 | |
CN111400267B (zh) | 记录日志的方法和装置 | |
CN103034564A (zh) | 数据容灾演练方法、数据容灾演练装置及系统 | |
CN104166605A (zh) | 基于增量数据文件的数据备份方法及系统 | |
JP2018049635A (ja) | トランザクション処理方法および装置 | |
CN105049258A (zh) | 网络容灾系统的数据传输方法 | |
CN102340537B (zh) | 一种分布式事务处理方法和装置 | |
CN102024021A (zh) | 一种逻辑文件系统元数据的日志方法 | |
CN110825546A (zh) | 一种面向高可用数据库集群的恢复方法、系统及设备终端 | |
CN103503388B (zh) | 一种分布式队列消息读取方法及设备、系统 | |
US7913109B2 (en) | Storage control apparatus and storage control method | |
CN105892954A (zh) | 基于多副本的数据存储方法和装置 | |
CN106933707B (zh) | 基于raid技术的数据存储设备数据恢复方法及系统 | |
CN103714059B (zh) | 一种更新数据的方法及装置 | |
CN109947592A (zh) | 一种数据同步方法、装置以及相关设备 | |
CN116303789A (zh) | 多分片多副本数据库并行同步方法、装置及可读介质 | |
CN106997305B (zh) | 一种事务处理方法与装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220215 Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province Patentee after: Huawei Cloud Computing Technologies Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |