CN110865897B - 冲突检测方法和装置以及电子设备 - Google Patents

冲突检测方法和装置以及电子设备 Download PDF

Info

Publication number
CN110865897B
CN110865897B CN201810989643.1A CN201810989643A CN110865897B CN 110865897 B CN110865897 B CN 110865897B CN 201810989643 A CN201810989643 A CN 201810989643A CN 110865897 B CN110865897 B CN 110865897B
Authority
CN
China
Prior art keywords
data
write operation
keys
target data
operation command
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
Application number
CN201810989643.1A
Other languages
English (en)
Other versions
CN110865897A (zh
Inventor
耿倞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201810989643.1A priority Critical patent/CN110865897B/zh
Publication of CN110865897A publication Critical patent/CN110865897A/zh
Application granted granted Critical
Publication of CN110865897B publication Critical patent/CN110865897B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy

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)

Abstract

本发明实施例提供了一种冲突检测方法和装置以及电子设备。该方法包括:读取进行同步操作的两个实例之间的对向同步通道中的数据,所述对向同步通道为两个对向传输数据的同步通道;对所述对向同步通道所针对的写操作命令进行比对,当所述对向同步通道中存在针对同一目标数据的写操作命令时,确定两个所述实例之间存在数据冲突。本发明实施例通过判断实例之间的对向同步通道中是否存在针对同一目标数据的写操作命令,以在数据同步的同时,实现对数据冲突的实时检测,同时减少对数据进行全量校验,以避免出现服务阻塞,提高了用户体验。

Description

冲突检测方法和装置以及电子设备
技术领域
本发明涉及数据同步技术领域,尤其涉及一种冲突检测方法和装置以及电子设备。
背景技术
异地多活是指存在至少两个可以同时对外服务的节点,如果任意一个点故障,则可以迅速地切换到其他节点,并由其他节点继续对外服务,因此,各节点之间需要保持数据一致。
在基于Redis数据库的异地多活架构中,需要在多个Redis数据库中的实例之间进行数据同步,而Redis并没有提供及时检测数据冲突的机制。针对Redis实例中数据不一致的情况,现有技术通常采用全量数据校验的方式进行冲突检测。
发明人在实现本发明的过程中,发现现有技术至少存在如下问题:全量数据校验的方式,只能定期进行,无法做到实时检测;并且,当存在大key(某个Key中存储的value很大)的情况下,可能会造成服务阻塞。
发明内容
本发明实施例提供一种冲突检测方法和装置以及电子设备,以解决现有技术中,全量数据校验无法实时进行,且可能造成服务阻塞的缺陷,提高用户体验。
为达到上述目的,本发明实施例提供了一种冲突检测方法,包括:
读取进行同步操作的两个实例之间的对向同步通道中的数据,所述对向同步通道为两个对向传输数据的同步通道;
对所述对向同步通道所针对的写操作命令进行比对,当所述对向同步通道中存在针对同一目标数据的写操作命令时,确定两个所述实例之间存在数据冲突。
本发明实施例还提供了一种冲突检测装置,包括:
数据读取模块,用于读取进行同步操作的两个实例之间的对向同步通道中的数据,所述对向同步通道为两个对向传输数据的同步通道;
第一冲突检测模块,用于对所述对向同步通道所针对的写操作命令进行比对,当所述对向同步通道中存在针对同一目标数据的写操作命令时,确定两个所述实例之间存在数据冲突。
本发明实施例还提供一种电子设备,包括:
存储器,用于存储程序;
处理器,用于运行所述存储器中存储的所述程序,以用于:
读取进行同步操作的两个实例之间的对向同步通道中的数据,所述对向同步通道为两个对向传输数据的同步通道;
对所述对向同步通道所针对的写操作命令进行比对,当所述对向同步通道中存在针对同一目标数据的写操作命令时,确定两个所述实例之间存在数据冲突。
本发明实施例提供的冲突检测方法和装置以及电子设备,通过判断实例之间的对向同步通道中是否存在针对同一目标数据的写操作命令,以在数据同步的同时,实现对数据冲突的实时检测,同时减少对数据进行全量校验,以避免出现服务阻塞,提高了用户体验。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本发明实施例提供的业务系统的系统框图;
图2为本发明提供的冲突检测方法一个实施例的流程图;
图3为本发明提供的冲突检测方法另一个实施例的流程图;
图4为本发明提供的冲突检测方法一个具体实施例的流程图;
图5为本发明提供的冲突检测方法另一个具体实施例的流程图;
图6为本发明提供的冲突检测方法又一个具体实施例的流程图;
图7为本发明提供的冲突检测方法再一个具体实施例的流程图;
图8为本发明提供的冲突检测装置一个实施例的结构示意图;
图9为本发明提供的冲突检测装置另一个实施例的结构示意图;
图10为本发明提供的电子设备实施例的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
Redis是Remote Dictionary Server(远程字典服务)的缩写,是一种键值数据库,可以用来缓存或存储数据。其提供了字符串(string)、列表(list)、哈希表(hash)、集合(set)和有序集合(sorted set,即,zset)五种数据结构。在现有的基于Redis数据库的异地多活架构中,需要在多个Redis数据库中的实例之间进行数据同步,而Redis没有提供及时检测数据冲突的机制。针对Redis实例中数据不一致的情况,现有技术通常采用全量数据校验的方式进行冲突检测。而全量数据校验的方式,只能定期进行,无法做到实时检测;并且,当存在大key的情况下,可能会造成服务阻塞。针对全量数据校验无法实时进行,且可能造成服务阻塞的问题,本申请提出了一种通过实时检测两个Redis实例之间的同步通道(channel)中的写操作,来实时判断是否存在冲突的方案。在两个Redis实例进行同步时,一个实例通过同步通道向另一个实例以命令的方式传输数据,当两个实例之间存在两个对向传输数据的同步通道,且在这两个同步通道中存在针对同一目标数据的写操作(例如,实例A和实例B之间存在对向同步通道AB和BA,其中,在同步通道AB中,数据由A向B传输,在同步通道BA中,数据由B向A传输,而这两个同步通道中存在针对同一目标数据X的写操作),则表明这两个实例在互相向对方同步同一个目标数据(即,实例A在向实例B同步目标数据X,而实例B同时也在向实例A同步目标数据X),因此可以判断这两个实例之间存在数据冲突。从而实现在数据同步时实时地检测数据冲突,同时减少对数据进行全量校验,避免出现服务阻塞,提高用户体验。
本发明实施例提供的方法可应用于任何基于Redis数据库的业务系统。图1为本发明实施例提供的业务系统的系统框图,图1所示的结构仅仅是本发明的技术方案可以应用的业务系统的示例之一。如图1所示,业务系统中包括冲突检测装置。该装置包括:数据读取模块和第一冲突检测模块,可以用来执行下述图2至图7所示的处理流程。在该业务系统中,首先,读取进行同步操作的两个实例之间的对向同步通道中的数据,该对向同步通道为两个对向传输数据的同步通道;然后,对对向同步通道所针对的写操作命令进行比对,当对向同步通道中存在针对同一目标数据的写操作命令时,确定这两个实例之间存在数据冲突。从而,在数据同步的同时,就能够实时地检测数据冲突,并且能够减少对数据进行全量校验,以避免出现服务阻塞,提高了用户体验。
上述实施例是对本发明实施例的技术原理和示例性的应用框架的说明,下面通过多个实施例来进一步对本发明实施例具体技术方案进行详细描述。
实施例一
图2为本发明提供的冲突检测方法一个实施例的流程图,该方法的执行主体可以为上述业务系统,也可以为基于Redis数据库的各种服务器设备,也可以为集成在这些服务器设备上的装置或芯片。如图2所示,该冲突检测方法包括如下步骤:
S201,读取进行同步操作的两个实例之间的对向同步通道中的数据。
在本发明实施例中,两个实例之间的对向同步通道为两个对向传输数据的同步通道。在两个Redis实例进行数据同步时,可以首先读取这两个Redis实例之间的对向同步通道中的数据,获取各同步通道所针对的Redis写操作命令。
S202,对对向同步通道所针对的写操作命令进行比对,当对向同步通道中存在针对同一目标数据的写操作命令时,确定两个实例之间存在数据冲突。
在本发明实施例中,当获取到对向同步通道所针对的写操作命令时,对其进行比对,如果对向同步通道中存在针对同一目标数据的写操作命令,则确定两个实例之间存在数据冲突。
具体地,在进行冲突检测时,如果对向同步通道所针对的写操作命令为,针对字符串(string)数据的同类写操作命令(如,APPEND、BITOP、DECR、DECRBY、GETSET、INCR、INCRBY、INCRBYFLOAT或MSET),或者为,针对列表(list)数据的表头插入、表尾插入、表头移除、表尾移除或表尾移除表头插入的同类写操作命令(如,LPUSH、LPUSHX、RPUSH、RPUSHX、LPOP、RPOP或RPOPLPUSH),或者为,针对列表(list)数据的指定位置插入、指定元素移除、设置元素值、修剪、表头移除或表尾移除的同类写操作命令(如,LINSERT、LREM、LSET、LTRIM、LPOP或RPOP),且该写操作命令所针对的键(key)相同(例如,在两个实例的对向同步通道中,同时存在上述写操作命令中的同一条命令(例如,在两个同步通道中都存在命令LPUSH),且在两个同步通道中该条命令所针对的key相同;再例如,在两个实例的对向同步通道中,分别存在上述同类写操作命令中的任意两条命令(例如,在一个同步通道中存在命令LINSERT,在另一个同步通道中存在命令LREM),且这两条命令所针对的key相同),则对该key在目标数据中所对应的值(value)进行比对;当该key在目标数据中所对应的value相同时,确定两个Redis实例之间存在数据冲突。
另外,在进行冲突检测时,如果对向同步通道所针对的写操作命令为,针对集合(set)数据的添加、移除或移动的同类写操作命令(如,SADD、SREM或SMOVE),且该写操作命令所针对的key和字段(field)分别相同时(例如,在两个实例的对向同步通道中,同时存在上述写操作命令中的同一条命令(例如,在两个同步通道中都存在命令SADD),且在两个同步通道中该条命令所针对的key相同、所针对的field也相同;再例如,在两个实例的对向同步通道中,分别存在上述同类写操作命令中的任意两条命令(例如,在一个同步通道中存在命令SREM,在另一个同步通道中存在命令SMOVE),且这两条命令所针对的key相同、所针对的field也相同),则确定两个Redis实例之间存在数据冲突。
另外,在进行冲突检测时,如果对向同步通道所针对的写操作命令为,针对集合(set)数据的差集存储、交集存储或并集存储的同类写操作命令(如,SDIFFSTORE、SINTERSTORE或SUNIONSTORE),或者为,针对有序集合(zset)数据的排序区间移除、分数区间移除或字典区间移除的同类写操作命令(如,ZREMRANGEBYRANK、ZREMRANGEBYSCORE或ZREMRANGEBYLEX),或者为,针对有序集合(zset)数据的并集存储或交集存储的同类写操作命令(如,ZUNIONSTORE或ZINTERSTORE),且该写操作命令所针对的key相同(例如,在两个实例的对向同步通道中,同时存在上述写操作命令中的同一条命令(例如,在两个对向同步通道中都存在命令ZUNIONSTORE),且在两个同步通道中该条命令所针对的key相同;再例如,在两个实例的对向同步通道中,分别存在上述同类写操作命令中的任意两条命令(例如,在一个同步通道中存在命令SDIFFSTORE,在另一个同步同道中存在命令SUNIONSTORE),且这两条命令所针对的key相同),则获取该key在目标数据中对应的field数目;当该key在目标数据中对应的field数目不同时,确定两个Redis实例之间存在数据冲突;当该key在目标数据中对应的field数目相同时,获取该key在目标数据中对应的value;当该key在目标数据中对应的value不同时,确定两个Redis实例之间存在数据冲突;当该key在目标数据中均不存在相应的value时,确定两个Redis实例之间不存在数据冲突。
另外,在进行冲突检测时,如果对向同步通道所针对的写操作命令为,针对哈希表(hash)数据的删除字段、值增加增量、值增加浮点数增量、添加字段-值对或设置字段值的同类写操作命令(如,HDEL、HINCRBY、HINCRBYFLOAT、HMSET、HSET或HSETNX),或者为,针对有序集合(zset)数据的添加、值增加增量或移除的同类写操作命令(如,ZADD、ZINCRBY或ZREM),且该写操作命令所针对的key和field分别相同(例如,在两个实例的对向同步通道中,同时存在上述写操作命令中的同一条命令(例如,在两个对向同步通道中都存在命令ZADD),且在两个同步通道中该条命令所针对的key相同、所针对的field也相同;再例如,在两个实例的对向同步通道中,分别存在上述同类写操作命令中的任意两条命令(例如,在一个同步通道中存在命令HMSET,在另一个同步通道中存在命令HSET),且这两条命令所针对的key相同、所针对的field也相同),则获取该key在目标数据中对应的该field的value;当该key在目标数据中对应的该field的value不同时,确定两个Redis实例之间存在数据冲突;当该key在目标数据中对应的该field均不存在相应的value时,确定两个Redis实例之间不存在数据冲突。
本发明实施例提供的冲突检测方法,通过判断实例之间的对向同步通道中是否存在针对同一目标数据的写操作命令,以在数据同步的同时,实现对数据冲突的实时检测,同时减少对数据进行全量校验,以避免出现服务阻塞,提高了用户体验。
实施例二
图3为本发明提供的冲突检测方法另一个实施例的流程图。如图3所示,在上述图2所示实施例的基础上,本实施例提供的冲突检测方法还可以包括以下步骤:
S301,两个实例之间进行数据同步,将同步数据写入两个实例之间的同步通道。
在本发明实施例中,当两个实例之间进行数据同步时,首先将同步数据写入两个实例之间的同步通道中。当两个实例之间互相进行数据同步时,将在这两个实例之间形成两个对向传输数据的同步通道。
S302,读取进行同步操作的两个实例之间的对向同步通道中的数据。
S303,对对向同步通道所针对的写操作命令进行比对,当对向同步通道中存在针对同一目标数据的写操作命令时,确定两个实例之间存在数据冲突。
在本发明实施例中,步骤S302至S303与上述图2所示实施例中的步骤S201至S202相同,在此不再赘述。
S304,将对向同步通道中用于确定存在数据冲突的写操作命令,存入待检测队列。
在本发明实施例中,当Redis实例之间进行数据同步时,将对向同步通道中用于确定存在数据冲突的写操作命令,存入待检测队列中,以使得同步程序与检测程序的进程同步进行,从而实现边同步数据边实时检测数据冲突。
S305,针对待检测队列中的用于确定存在数据冲突的写操作命令,定时检测该写操作指令所针对的键在目标数据中对应的值的类型。
S306,当该键在目标数据中对应的值的类型不同时,确定该写操作命令所针对的两个实例之间存在数据冲突。
在本发明实施例中,由于检测数据冲突与数据同步同时进行,因此,当检测到数据冲突时,数据同步可能还没有结束,也就是说,真正的数据冲突还没有产生,因此可以在一定的时间窗口内,定时检测待检测队列中的检测数据(写操作命令)是否存在冲突,若存在从冲突,则继续放入待检测队列以进行多次检测,若冲突已解决,则将检测数据(写操作命令)移除待检测队列,结束冲突检测(即,最终一致即为一致)。
另外,在对待检测队列中的检测数据进行冲突检测时,首先,可以获取该写操作指令所针对的key在目标数据中对应的值的类型(例如,可以使用TYPE命令获取key所存储的值的类型)。当该key在目标数据中对应的值的类型不同时,确定该写操作命令所针对的两个实例之间存在数据冲突(即,“Type冲突”)。当该key在目标数据中对应的值的类型相同时,则进一步根据具体的数据类型进行进一步的检测。
进一步地,本发明实施例提供的冲突检测方法,还可以包括:
S307,获取待检测队列中的写操作命令的被检测次数。。
S308,当被检测次数大于预设次数阈值时,将该写操作命令移出待检测队列。
在本发明实施例中,还可以预先设置次数阈值,当针对某写操作命令的检测次数超过该预设次数阈值时,直接将该写操作命令移出待检测队列。
本发明实施例提供的冲突检测方法,通过判断实例之间的对向同步通道中是否存在针对同一目标数据的写操作命令,以在数据同步的同时,实现对数据冲突的实时检测,将确定冲突的命令存入待检测队列,进行多次检测,以降低误检率,同时减少对数据进行全量校验,以避免出现服务阻塞,提高了用户体验。
实施例三
图4为本发明提供的冲突检测方法一个具体实施例的流程图。如图4所示,在上述图2和图3所示实施例的基础上,本发明提供了一种具体的冲突检测方法,该方法可以包括如下步骤:
S401,读取进行同步操作的两个实例之间的对向同步通道中的数据。
S402,当对向同步通道中存在针对字符串数据的同类写操作命令、且该写操作命令所针对的键相同,或者,存在针对列表数据的表头插入、表尾插入、表头移除、表尾移除或表尾移除表头插入的同类写操作命令、且该写操作命令所针对的键相同,或者,存在针对列表数据的指定位置插入、指定元素移除、设置元素值、修剪、表头移除或表尾移除的同类写操作命令、且该写操作命令所针对的键相同时,对该键在目标数据中所对应的值进行比对。
S403,当该键在目标数据中所对应的值相同时,确定两个实例之间存在数据冲突,将该写操作命令存入待检测队列。
在本发明实施例中,如果对向同步通道所针对的写操作命令为,针对字符串(string)数据的同类写操作命令(如,APPEND、BITOP、DECR、DECRBY、GETSET、INCR、INCRBY、INCRBYFLOAT或MSET),且该写操作命令所针对的key相同,则对该key在目标数据中所对应的value进行比对;当该key在目标数据中所对应的value相同时,确定两个Redis实例之间存在数据冲突。
另外,如果对向同步通道所针对的写操作命令为,针对列表(list)数据的表头插入、表尾插入、表头移除、表尾移除或表尾移除表头插入的同类写操作命令(如,LPUSH、LPUSHX、RPUSH、RPUSHX、LPOP、RPOP或RPOPLPUSH),且该写操作命令所针对的key相同,则对该key在目标数据中所对应的value进行比对;当该key在目标数据中所对应的value相同时,确定两个Redis实例之间存在数据冲突。
具体地,如果表头(Left)或者表尾(Right)一端同时发生多次插入(push),或者插入(push)和移除(pop)交替进行,则需要对对应的表头或者表尾检查所有插入的元素,例如,可以使用LRANGE命令,以获取指定范围内的元素的值进行对比。
另外,如果对向同步通道所针对的写操作命令为,针对列表(list)数据的指定位置插入、指定元素移除、设置元素值、修剪、表头移除或表尾移除的同类写操作命令(如,LINSERT、LREM、LSET、LTRIM、LPOP或RPOP),且该写操作命令所针对的key相同,则对该key在目标数据中所对应的value进行比对;当该key在目标数据中所对应的value相同时,确定两个Redis实例之间存在数据冲突。
具体地,也可以使用LRANGE命令,针对对应位置获取value进行对比。如果是在表头或表尾位置,还要考虑POP产生冲突的情况。
S404,针对待检测队列中的用于确定存在数据冲突的写操作命令,定时检测该写操作指令所针对的键在目标数据中对应的值的类型。
S405,当该键在目标数据中对应的值的类型相同时,针对字符串数据的同类写操作命令,或者,针对列表数据的表头插入、表尾插入、表头移除、表尾移除或表尾移除表头插入的同类写操作命令,或者,针对列表数据的指定位置插入、指定元素移除、设置元素值、修剪、表头移除或表尾移除的同类写操作命令,获取该写操作命令所针对的键在目标数据中所对应的值,并进行比对。
在本发明实施例中,当待检测队列中的用于确定存在数据冲突的写操作命令所针对的键在目标数据中对应的值的类型相同时,针对字符串(string)数据的同类写操作命令(如,APPEND、BITOP、DECR、DECRBY、GETSET、INCR、INCRBY、INCRBYFLOAT或MSET),获取该写操作命令所针对的key在目标数据中所对应的value以进行比对。
另外,当待检测队列中的用于确定存在数据冲突的写操作命令所针对的键在目标数据中对应的值的类型相同时,针对列表(list)数据的表头插入、表尾插入、表头移除、表尾移除或表尾移除表头插入的同类写操作命令(如,LPUSH、LPUSHX、RPUSH、RPUSHX、LPOP、RPOP或RPOPLPUSH),获取该写操作命令所针对的key在目标数据中所对应的value以进行比对。
具体地,可以使用LRANGE命令,以获取指定范围内的元素的值进行对比。
另外,当待检测队列中的用于确定存在数据冲突的写操作命令所针对的键在目标数据中对应的值的类型相同时,针对列表(list)数据的指定位置插入、指定元素移除、设置元素值、修剪、表头移除或表尾移除的同类写操作命令(如,LINSERT、LREM、LSET、LTRIM、LPOP或RPOP),获取该写操作命令所针对的key在目标数据中所对应的value以进行比对。
具体地,也可以使用LRANGE命令,针对对应位置获取value进行对比。
S406,当该键在目标数据中所对应的值相同时,确定两个实例之间存在数据冲突。
S407,当该键在目标数据中所对应的值不同时,确定两个实例之间不存在数据冲突,并将该写操作命令移出待检测队列。
本发明实施例提供的冲突检测方法,通过判断实例之间的对向同步通道所针对的写操作命令中的键以及相应的字段和值,以检测是否存在针对同一目标数据的写操作命令,从而在数据同步的同时,实现对数据冲突的实时检测,针对同步数据的增量内容,有针对性地检测可能存在冲突的命令,减少了对数据进行全量校验,避免了出现服务阻塞,能够在不影响正常服务的情况下,提供高效、及时的冲突检测,提高了用户体验。
实施例四
图5为本发明提供的冲突检测方法另一个具体实施例的流程图。如图5所示,在上述图2和图3所示实施例的基础上,本发明提供了一种具体的冲突检测方法,该方法可以包括如下步骤:
S501,读取进行同步操作的两个实例之间的对向同步通道中的数据。
S502,当对向同步通道中存在针对集合数据的添加、移除或移动的同类写操作命令、且该写操作命令所针对的键和字段分别相同时,确定两个实例之间存在数据冲突,将该写操作命令存入待检测队列。
在本发明实施例中,如果对向同步通道所针对的写操作命令为,针对集合(set)数据的添加、移除或移动的同类写操作命令(如,SADD、SREM或SMOVE),且该写操作命令所针对的key和field分别相同时,确定两个实例之间存在数据冲突。
S503,针对待检测队列中的用于确定存在数据冲突的写操作命令,定时检测该写操作指令所针对的键在目标数据中对应的值的类型。
S504,当该键在目标数据中对应的值的类型相同时,针对集合数据的添加、移除或移动的同类写操作命令,获取该写操作命令所针对的键和字段在目标数据中所对应的值,并进行比对。
在本发明实施例中,当待检测队列中的用于确定存在数据冲突的写操作命令所针对的键在目标数据中对应的值的类型相同时,针对集合(set)数据的添加、移除或移动的同类写操作命令(如,SADD、SREM或SMOVE),获取该写操作命令所针对的key和field在目标数据中所对应的value以进行比对,例如,可以使用SISMEMBER命令对key和field进行操作。
S505,当该键和字段在目标数据中所对应的值相同时,确定两个实例之间存在数据冲突。
S506,当该键和字段在目标数据中所对应的值不同时,确定两个实例之间不存在数据冲突,并将该写操作命令移出待检测队列。
S507,当该键和字段在目标数据中均不存在相应的值时,确定两个实例之间不存在数据冲突,并将该写操作命令移出待检测队列。
本发明实施例提供的冲突检测方法,通过判断实例之间的对向同步通道所针对的写操作命令中的键以及相应的字段和值,以检测是否存在针对同一目标数据的写操作命令,从而在数据同步的同时,实现对数据冲突的实时检测,针对同步数据的增量内容,有针对性地检测可能存在冲突的命令,减少了对数据进行全量校验,避免了出现服务阻塞,能够在不影响正常服务的情况下,提供高效、及时的冲突检测,提高了用户体验。
实施例五
图6为本发明提供的冲突检测方法又一个具体实施例的流程图。如图6所示,在上述图2和图3所示实施例的基础上,本发明提供了一种具体的冲突检测方法,该方法可以包括如下步骤:
S601,读取进行同步操作的两个实例之间的对向同步通道中的数据。
S602,当对向同步通道中存在针对集合数据的差集存储、交集存储或并集存储的同类写操作命令、且该写操作命令所针对的键相同,或者,存在针对有序集合数据的排序区间移除、分数区间移除或字典区间移除的同类写操作命令、且该写操作命名所针对的键相同,或者,存在针对有序集合数据的并集存储或交集存储的同类写操作命令、且该写操作命令所针对的键相同时,获取该键在目标数据中对应的字段数目。
S603,当该键在目标数据中对应的字段数目不同时,确定两个实例之间存在数据冲突,将该写操作命令存入待检测队列;当该键在目标数据中对应的字段数目相同时,获取该键在目标数据中对应的值;当该键在目标数据中对应的值不同时,确定两个实例之间存在数据冲突,将该写操作命令存入待检测队列;当该键在目标数据中均不存在相应的值时,确定两个实例之间不存在数据冲突。
在本发明实施例中,如果对向同步通道所针对的写操作命令为,针对集合(set)数据的差集存储、交集存储或并集存储的同类写操作命令(如,SDIFFSTORE、SINTERSTORE或SUNIONSTORE),且该写操作命令所针对的key相同,则可以使用SCARD命令来获取该key在目标数据中对应的field数目;当该key在目标数据中对应的field数目不同时,确定两个Redis实例之间存在数据冲突;当该key在目标数据中对应的field数目相同时,可以使用SSCAN命令来获取该key在目标数据中对应的value;当该key在目标数据中对应的value不同时,确定两个Redis实例之间存在数据冲突;当该key在目标数据中均不存在相应的value时,确定两个Redis实例之间不存在数据冲突。
另外,如果对向同步通道所针对的写操作命令为,针对有序集合(zset)数据的排序区间移除、分数区间移除或字典区间移除的同类写操作命令(如,ZREMRANGEBYRANK、ZREMRANGEBYSCORE或ZREMRANGEBYLEX),且该写操作命令所针对的key相同。由于涉及范围删除,不能进行增量校验,因此,可以使用ZCARD命令来获取该key在目标数据中对应的field数目;当该key在目标数据中对应的field数目不同时,确定两个Redis实例之间存在数据冲突;当该key在目标数据中对应的field数目相同时,可以使用ZSCAN命令来获取该key在目标数据中对应的value;当该key在目标数据中对应的value不同时,确定两个Redis实例之间存在数据冲突;当该key在目标数据中均不存在相应的value时,确定两个Redis实例之间不存在数据冲突。
另外,如果对向同步通道所针对的写操作命令为,针对有序集合(zset)数据的并集存储或交集存储的同类写操作命令(如,ZUNIONSTORE或ZINTERSTORE),且该写操作命令所针对的key相同。由于涉及范围删除,不能进行增量校验,因此,可以使用ZCARD命令来获取该key在目标数据中对应的field数目;当该key在目标数据中对应的field数目不同时,确定两个Redis实例之间存在数据冲突;当该key在目标数据中对应的field数目相同时,可以使用ZSCAN命令来获取该key在目标数据中对应的value;当该key在目标数据中对应的value不同时,确定两个Redis实例之间存在数据冲突;当该key在目标数据中均不存在相应的value时,确定两个Redis实例之间不存在数据冲突。
S604,针对待检测队列中的用于确定存在数据冲突的写操作命令,定时检测该写操作指令所针对的键在目标数据中对应的值的类型。
S605,当该键在目标数据中对应的值的类型相同时,针对集合数据的差集存储、交集存储或并集存储的同类写操作命令,或者,针对有序集合数据的排序区间移除、分数区间移除或字典区间移除的同类写操作命令,或者针对有序集合数据的并集存储或交集存储的同类写操作命令,获取该写操作命令所针对的键在目标数据中对应的字段数目,并进行比对。
S606,当该键在目标数据中对应的字段数目不同时,确定两个实例之间存在数据冲突。
S607,当该键在目标数据中对应的字段数目相同时,获取该键在目标数据中对应的值;当该键在目标数据中对应的值不同时,确定两个实例之间存在数据冲突。
在本发明实施例中,当待检测队列中的用于确定存在数据冲突的写操作命令所针对的键在目标数据中对应的值的类型相同时,针对集合(set)数据的差集存储、交集存储或并集存储的同类写操作命令(如,SDIFFSTORE、SINTERSTORE或SUNIONSTORE),可以使用SCARD命令来获取该写操作命令所针对的key在目标数据中对应的field数目,并进行比对。当该key在目标数据中对应的field数目相同时,可以使用SSCAN命令来获取该key在目标数据中对应的value。
另外,当待检测队列中的用于确定存在数据冲突的写操作命令所针对的键在目标数据中对应的值的类型相同时,针对有序集合(zset)数据的排序区间移除、分数区间移除或字典区间移除的同类写操作命令(如,ZREMRANGEBYRANK、ZREMRANGEBYSCORE或ZREMRANGEBYLEX),可以使用ZCARD命令来获取该key在目标数据中对应的field数目,并进行对比。当该key在目标数据中对应的field数目相同时,可以使用ZSCAN命令来获取该key在目标数据中对应的value。
另外,当待检测队列中的用于确定存在数据冲突的写操作命令所针对的键在目标数据中对应的值的类型相同时,针对有序集合(zset)数据的并集存储或交集存储的同类写操作命令(如,ZUNIONSTORE或ZINTERSTORE),可以使用ZCARD命令来获取该key在目标数据中对应的field数目,并进行对比。当该key在目标数据中对应的field数目相同时,可以使用ZSCAN命令来获取该key在目标数据中对应的value。
S608,当该键在目标数据中对应的值相同时,确定两个实例之间不存在数据冲突,并将该写操作命令移出待检测队列;当该键在目标数据中均不存在相应的值时,确定两个实例之间不存在数据冲突,并将该写操作命令移出待检测队列。
本发明实施例提供的冲突检测方法,通过判断实例之间的对向同步通道所针对的写操作命令中的键以及相应的字段和值,以检测是否存在针对同一目标数据的写操作命令,从而在数据同步的同时,实现对数据冲突的实时检测,针对同步数据的增量内容,有针对性地检测可能存在冲突的命令,减少了对数据进行全量校验,避免了出现服务阻塞,能够在不影响正常服务的情况下,提供高效、及时的冲突检测,提高了用户体验。
实施例六
图7为本发明提供的冲突检测方法再一个具体实施例的流程图。如图7所示,在上述图2和图3所示实施例的基础上,本发明提供了一种具体的冲突检测方法,该方法可以包括如下步骤:
S701,读取进行同步操作的两个实例之间的对向同步通道中的数据。
S702,当对向同步通道中存在针对哈希表数据的删除字段、值增加增量、值增加浮点数增量、添加字段-值对或设置字段值的同类写操作命令、且该写操作命令所针对的键和字段分别相同,或者,存在针对有序集合数据的添加、值增加增量或移除的同类写操作命令、且该写操作命令所针对的键和字段分别相同时,获取该键在目标数据中对应的字段的值;
S703,当该键在目标数据中对应的上述字段的值不同时,确定两个实例之间存在数据冲突,将该写操作命令存入待检测队列;当该键在目标数据中对应的上述字段均不存在相应的值时,确定两个实例之间不存在数据冲突。
在本发明实施例中,如果对向同步通道所针对的写操作命令为,针对哈希表(hash)数据的删除字段、值增加增量、值增加浮点数增量、添加字段-值对或设置字段值的同类写操作命令(如,HDEL、HINCRBY、HINCRBYFLOAT、HMSET、HSET或HSETNX),且该写操作命令所针对的key和field分别相同,则可以使用HGET命令来获取该key在目标数据中对应的该field的value;当该key在目标数据中对应的该field的value不同时,确定两个Redis实例之间存在数据冲突;当该key在目标数据中对应的该field均不存在相应的value时,确定两个Redis实例之间不存在数据冲突。
另外,如果对向同步通道所针对的写操作命令为,针对有序集合(zset)数据的添加、值增加增量或移除的同类写操作命令(如,ZADD、ZINCRBY或ZREM),且该写操作命令所针对的key和field分别相同,则可以使用ZSCORE命令来获取该key在目标数据中对应的该field的value;当该key在目标数据中对应的该field的value不同时,确定两个Redis实例之间存在数据冲突;当该key在目标数据中对应的该field均不存在相应的value时,确定两个Redis实例之间不存在数据冲突。
S704,针对待检测队列中的用于确定存在数据冲突的写操作命令,定时检测该写操作指令所针对的键在目标数据中对应的值的类型。
S705,当该键在目标数据中对应的值的类型相同时,针对哈希表数据的删除字段、值增加增量、值增加浮点数增量、添加字段-值对或设置字段值的同类写操作命令,或者,针对有序集合数据的添加、值增加增量或移除的同类写操作命令,获取该写操作命令所针对的键在目标数据中对应的该字段的值。
在本发明实施例中,当待检测队列中的用于确定存在数据冲突的写操作命令所针对的键在目标数据中对应的值的类型相同时,针对哈希表(hash)数据的删除字段、值增加增量、值增加浮点数增量、添加字段-值对或设置字段值的同类写操作命令(如,HDEL、HINCRBY、HINCRBYFLOAT、HMSET、HSET或HSETNX),可以使用HGET命令来获取该key在目标数据中对应的该field的value。
另外,当待检测队列中的用于确定存在数据冲突的写操作命令所针对的键在目标数据中对应的值的类型相同时,针对有序集合(zset)数据的添加、值增加增量或移除的同类写操作命令(如,ZADD、ZINCRBY或ZREM),可以使用ZSCORE命令来获取该key在目标数据中对应的该field的value。
S706,当该键在目标数据中对应的该字段的值不同时,确定两个实例之间存在数据冲突。
S707,当该键在目标数据中对应的该字段均不存在相应的值时,确定两个实例之间不存在数据冲突,并将该写操作命令移出待检测队列。
本发明实施例提供的冲突检测方法,通过判断实例之间的对向同步通道所针对的写操作命令中的键以及相应的字段和值,以检测是否存在针对同一目标数据的写操作命令,从而在数据同步的同时,实现对数据冲突的实时检测,针对同步数据的增量内容,有针对性地检测可能存在冲突的命令,减少了对数据进行全量校验,避免了出现服务阻塞,能够在不影响正常服务的情况下,提供高效、及时的冲突检测,提高了用户体验。
实施例七
图8为本发明提供的冲突检测装置一个实施例的结构示意图,可用于执行如图2所示的方法步骤。如图8所示,该装置可以包括:数据读取模块81和第一冲突检测模块82。
其中,数据读取模块81用于读取进行同步操作的两个实例之间的对向同步通道中的数据,该对向同步通道为两个对向传输数据的同步通道;第一冲突检测模块82用于对对向同步通道所针对的写操作命令进行比对,当对向同步通道中存在针对同一目标数据的写操作命令时,确定两个实例之间存在数据冲突。
具体地,第一冲突检测模块82还可以用于,当对向同步通道中存在针对字符串数据的同类写操作命令、且该写操作命令所针对的键相同,或者,存在针对列表数据的表头插入、表尾插入、表头移除、表尾移除或表尾移除表头插入的同类写操作命令、且该写操作命令所针对的键相同,或者,存在针对列表数据的指定位置插入、指定元素移除、设置元素值、修剪、表头移除或表尾移除的同类写操作命令、且该写操作命令所针对的键相同时,对该键在目标数据中所对应的值进行比对;当该键在目标数据中所对应的值相同时,确定两个实例之间存在数据冲突。
第一冲突检测模块82还可以用于,当对向同步通道中存在针对集合数据的添加、移除或移动的同类写操作命令、且该写操作命令所针对的键和字段分别相同时,确定两个实例之间存在数据冲突。
第一冲突检测模块82还可以用于,当对向同步通道中存在针对集合数据的差集存储、交集存储或并集存储的同类写操作命令、且该写操作命令所针对的键相同,或者,存在针对有序集合数据的排序区间移除、分数区间移除或字典区间移除的同类写操作命令、且该写操作命名所针对的键相同,或者,存在针对有序集合数据的并集存储或交集存储的同类写操作命令、且该写操作命令所针对的键相同时,获取该键在目标数据中对应的字段数目;当该键在目标数据中对应的字段数目不同时,确定两个实例之间存在数据冲突;当该键在目标数据中对应的字段数目相同时,获取该键在目标数据中对应的值;当该键在目标数据中对应的值不同时,确定两个实例之间存在数据冲突;当该键在目标数据中均不存在相应的值时,确定两个实例之间不存在数据冲突。
第一冲突检测模块82还可以用于,当对向同步通道中存在针对哈希表数据的删除字段、值增加增量、值增加浮点数增量、添加字段-值对或设置字段值的同类写操作命令、且该写操作命令所针对的键和字段分别相同,或者,存在针对有序集合数据的添加、值增加增量或移除的同类写操作命令、且该写操作命令所针对的键和字段分别相同时,获取该键在目标数据中对应的该字段的值;当该键在目标数据中对应的该字段的值不同时,确定两个实例之间存在数据冲突;当该键在目标数据中对应的该字段均不存在相应的值时,确定两个实例之间不存在数据冲突。
本发明实施例中各模块的功能详见图2所示实施例中的具体描述,在此不再赘述。
本发明实施例提供的冲突检测装置,通过判断实例之间的对向同步通道中是否存在针对同一目标数据的写操作命令,以在数据同步的同时,实现对数据冲突的实时检测,同时减少对数据进行全量校验,以避免出现服务阻塞,提高了用户体验。
实施例八
图9为本发明提供的冲突检测装置另一个实施例的结构示意图,可以用于执行如图3至图7所示的方法步骤。如图9所示,在上述图8所示实施例的基础上,本发明实施例提供的冲突检测装置还可以包括:第二冲突检测模块91。该第二冲突检测模块91可以用于将对向同步通道中用于确定存在数据冲突的写操作命令,存入待检测队列;针对待检测队列中的用于确定存在数据冲突的写操作命令,定时检测该写操作指令所针对的键在目标数据中对应的值的类型;当该键在目标数据中对应的值的类型不同时,确定该写操作命令所针对的两个实例之间存在数据冲突。
具体地,第二冲突检测模块91还可以用于,当该键在目标数据中对应的值的类型相同时,针对字符串数据的同类写操作命令,或者,针对列表数据的表头插入、表尾插入、表头移除、表尾移除或表尾移除表头插入的同类写操作命令,或者,针对列表数据的指定位置插入、指定元素移除、设置元素值、修剪、表头移除或表尾移除的同类写操作命令,获取该写操作命令所针对的键在目标数据中所对应的值,并进行比对;当该键在目标数据中所对应的值相同时,确定两个实例之间存在数据冲突;当该键在目标数据中所对应的值不同时,确定两个实例之间不存在数据冲突,并将该写操作命令移出待检测队列。
第二冲突检测模块91还可以用于,当该键在目标数据中对应的值的类型相同时,针对集合数据的添加、移除或移动的同类写操作命令,获取该写操作命令所针对的键和字段在目标数据中所对应的值,并进行比对;当该键和字段在目标数据中所对应的值相同时,确定两个实例之间存在数据冲突;当该键和字段在目标数据中所对应的值不同时,确定两个实例之间不存在数据冲突,并将该写操作命令移出待检测队列;当该键和字段在目标数据中均不存在相应的值时,确定两个实例之间不存在数据冲突,并将该写操作命令移出待检测队列。
第二冲突检测模块91还可以用于,当该键在目标数据中对应的值的类型相同时,针对集合数据的差集存储、交集存储或并集存储的同类写操作命令,或者,针对有序集合数据的排序区间移除、分数区间移除或字典区间移除的同类写操作命令,或者针对有序集合数据的并集存储或交集存储的同类写操作命令,获取该写操作命令所针对的键在目标数据中对应的字段数目,并进行比对;当该键在目标数据中对应的字段数目不同时,确定两个实例之间存在数据冲突;当该键在目标数据中对应的字段数目相同时,获取该键在目标数据中对应的值;当该键在目标数据中对应的值不同时,确定两个实例之间存在数据冲突;当该键在目标数据中对应的值相同时,确定两个实例之间不存在数据冲突,并将该写操作命令移出待检测队列;当该键在目标数据中均不存在相应的值时,确定两个实例之间不存在数据冲突,并将该写操作命令移出待检测队列。
第二冲突检测模块91还可以用于,当该键在目标数据中对应的值的类型相同时,针对哈希表数据的删除字段、值增加增量、值增加浮点数增量、添加字段-值对或设置字段值的同类写操作命令,或者,针对有序集合数据的添加、值增加增量或移除的同类写操作命令,获取该写操作命令所针对的键在目标数据中对应的该字段的值;当该键在目标数据中对应的该字段的值不同时,确定两个实例之间存在数据冲突;当该键在目标数据中对应的该字段均不存在相应的值时,确定两个实例之间不存在数据冲突,并将该写操作命令移出待检测队列。
进一步地,在本发明实施例中,第二冲突检测模块91还可以用于,获取待检测队列中的写操作命令的被检测次数;当该被检测次数大于预设次数阈值时,将该写操作命令移出待检测队列。
本发明实施例中各模块的功能详见图3至图7所示实施例中的具体描述,在此不再赘述。
本发明实施例提供的冲突检测装置,通过判断实例之间的对向同步通道所针对的写操作命令中的键以及相应的字段和值,以检测是否存在针对同一目标数据的写操作命令,从而在数据同步的同时,实现对数据冲突的实时检测,针对同步数据的增量内容,有针对性地检测可能存在冲突的命令,减少了对数据进行全量校验,避免了出现服务阻塞,能够在不影响正常服务的情况下,提供高效、及时的冲突检测,提高了用户体验。
实施例九
以上描述了冲突检测装置的内部功能和结构,该装置可实现为一种电子设备。图10为本发明提供的电子设备实施例的结构示意图。如图10所示,该电子设备包括存储器101和处理器102。
存储器101,用于存储程序。除上述程序之外,存储器101还可被配置为存储其它各种数据以支持在电子设备上的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。
存储器101可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
处理器102,与存储器101耦合,执行存储器101所存储的程序,以用于:
读取进行同步操作的两个实例之间的对向同步通道中的数据,该对向同步通道为两个对向传输数据的同步通道;
对对向同步通道所针对的写操作命令进行比对,当对向同步通道中存在针对同一目标数据的写操作命令时,确定两个实例之间存在数据冲突。
进一步,如图10所示,电子设备还可以包括:通信组件103、电源组件104、音频组件105、显示器106等其它组件。图10中仅示意性给出部分组件,并不意味着电子设备只包括图10所示组件。
通信组件103被配置为便于电子设备和其他设备之间有线或无线方式的通信。电子设备可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件103经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件103还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
电源组件104,为电子设备的各种组件提供电力。电源组件104可以包括电源管理系统,一个或多个电源,及其他与为电子设备生成、管理和分配电力相关联的组件。
音频组件105被配置为输出和/或输入音频信号。例如,音频组件105包括一个麦克风(MIC),当电子设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器101或经由通信组件103发送。在一些实施例中,音频组件105还包括一个扬声器,用于输出音频信号。
显示器106包括屏幕,其屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

Claims (23)

1.一种冲突检测方法,其特征在于,包括:
读取进行同步操作的两个实例之间的对向同步通道中的数据,所述对向同步通道为两个对向传输数据的同步通道;
对所述对向同步通道所针对的写操作命令进行比对,当所述对向同步通道中存在针对同一目标数据的写操作命令时,确定两个所述实例之间存在数据冲突。
2.根据权利要求1所述的冲突检测方法,其特征在于,所述对所述对向同步通道所针对的写操作命令进行比对,当所述对向同步通道中存在针对同一目标数据的写操作命令时,确定两个所述实例之间存在数据冲突,包括:
当所述对向同步通道中存在针对字符串数据的同类写操作命令、且所述写操作命令所针对的键相同,或者,存在针对列表数据的表头插入、表尾插入、表头移除、表尾移除或表尾移除表头插入的同类写操作命令、且所述写操作命令所针对的键相同,或者,存在针对列表数据的指定位置插入、指定元素移除、设置元素值、修剪、表头移除或表尾移除的同类写操作命令、且所述写操作命令所针对的键相同时,对所述键在目标数据中所对应的值进行比对;
当所述键在目标数据中所对应的值相同时,确定两个所述实例之间存在数据冲突。
3.根据权利要求1所述的冲突检测方法,其特征在于,所述对所述对向同步通道所针对的写操作命令进行比对,当所述对向同步通道中存在针对同一目标数据的写操作命令时,确定两个所述实例之间存在数据冲突,包括:
当所述对向同步通道中存在针对集合数据的添加、移除或移动的同类写操作命令、且所述写操作命令所针对的键和字段分别相同时,确定两个所述实例之间存在数据冲突。
4.根据权利要求1所述的冲突检测方法,其特征在于,所述对所述对向同步通道所针对的写操作命令进行比对,当所述对向同步通道中存在针对同一目标数据的写操作命令时,确定两个所述实例之间存在数据冲突,包括:
当所述对向同步通道中存在针对集合数据的差集存储、交集存储或并集存储的同类写操作命令、且所述写操作命令所针对的键相同,或者,存在针对有序集合数据的排序区间移除、分数区间移除或字典区间移除的同类写操作命令、且所述写操作命令所针对的键相同,或者,存在针对有序集合数据的并集存储或交集存储的同类写操作命令、且所述写操作命令所针对的键相同时,获取所述键在目标数据中对应的字段数目;
当所述键在目标数据中对应的字段数目不同时,确定两个所述实例之间存在数据冲突;
当所述键在目标数据中对应的字段数目相同时,获取所述键在目标数据中对应的值;
当所述键在目标数据中对应的值不同时,确定两个所述实例之间存在数据冲突;
当所述键在目标数据中均不存在相应的值时,确定两个所述实例之间不存在数据冲突。
5.根据权利要求1所述的冲突检测方法,其特征在于,所述对所述对向同步通道所针对的写操作命令进行比对,当所述对向同步通道中存在针对同一目标数据的写操作命令时,确定两个所述实例之间存在数据冲突,包括:
当所述对向同步通道中存在针对哈希表数据的删除字段、值增加增量、值增加浮点数增量、添加字段-值对或设置字段值的同类写操作命令、且所述写操作命令所针对的键和字段分别相同,或者,存在针对有序集合数据的添加、值增加增量或移除的同类写操作命令、且所述写操作命令所针对的键和字段分别相同时,获取所述键在目标数据中对应的所述字段的值;
当所述键在目标数据中对应的所述字段的值不同时,确定两个所述实例之间存在数据冲突;
当所述键在目标数据中对应的所述字段均不存在相应的值时,确定两个所述实例之间不存在数据冲突。
6.根据权利要求1所述的冲突检测方法,其特征在于,还包括:
将所述对向同步通道中用于确定存在数据冲突的所述写操作命令,存入待检测队列;
针对所述待检测队列中的用于确定存在数据冲突的所述写操作命令,定时检测所述写操作命令所针对的键在目标数据中对应的值的类型;
当所述键在目标数据中对应的值的类型不同时,确定所述写操作命令所针对的两个所述实例之间存在数据冲突。
7.根据权利要求6所述的冲突检测方法,其特征在于,还包括:
当所述键在目标数据中对应的值的类型相同时,针对字符串数据的同类写操作命令,或者,针对列表数据的表头插入、表尾插入、表头移除、表尾移除或表尾移除表头插入的同类写操作命令,或者,针对列表数据的指定位置插入、指定元素移除、设置元素值、修剪、表头移除或表尾移除的同类写操作命令,获取所述写操作命令所针对的键在目标数据中所对应的值,并进行比对;
当所述键在目标数据中所对应的值相同时,确定两个所述实例之间存在数据冲突;
当所述键在目标数据中所对应的值不同时,确定两个所述实例之间不存在数据冲突,并将所述写操作命令移出所述待检测队列。
8.根据权利要求6所述的冲突检测方法,其特征在于,还包括:
当所述键在目标数据中对应的值的类型相同时,针对集合数据的添加、移除或移动的同类写操作命令,获取所述写操作命令所针对的键和字段在目标数据中所对应的值,并进行比对;
当所述键和字段在目标数据中所对应的值相同时,确定两个所述实例之间存在数据冲突;
当所述键和字段在目标数据中所对应的值不同时,确定两个所述实例之间不存在数据冲突,并将所述写操作命令移出所述待检测队列;
当所述键和字段在目标数据中均不存在相应的值时,确定两个所述实例之间不存在数据冲突,并将所述写操作命令移出所述待检测队列。
9.根据权利要求6所述的冲突检测方法,其特征在于,还包括:
当所述键在目标数据中对应的值的类型相同时,针对集合数据的差集存储、交集存储或并集存储的同类写操作命令,或者,针对有序集合数据的排序区间移除、分数区间移除或字典区间移除的同类写操作命令,或者针对有序集合数据的并集存储或交集存储的同类写操作命令,获取所述写操作命令所针对的键在目标数据中对应的字段数目,并进行比对;
当所述键在目标数据中对应的字段数目不同时,确定两个所述实例之间存在数据冲突;
当所述键在目标数据中对应的字段数目相同时,获取所述键在目标数据中对应的值;
当所述键在目标数据中对应的值不同时,确定两个所述实例之间存在数据冲突;
当所述键在目标数据中对应的值相同时,确定两个所述实例之间不存在数据冲突,并将所述写操作命令移出所述待检测队列;
当所述键在目标数据中均不存在相应的值时,确定两个所述实例之间不存在数据冲突,并将所述写操作命令移出所述待检测队列。
10.根据权利要求6所述的冲突检测方法,其特征在于,还包括:
当所述键在目标数据中对应的值的类型相同时,针对哈希表数据的删除字段、值增加增量、值增加浮点数增量、添加字段-值对或设置字段值的同类写操作命令,或者,针对有序集合数据的添加、值增加增量或移除的同类写操作命令,获取所述写操作命令所针对的键在目标数据中对应的所述字段的值;
当所述键在目标数据中对应的所述字段的值不同时,确定两个所述实例之间存在数据冲突;
当所述键在目标数据中对应的所述字段均不存在相应的值时,确定两个所述实例之间不存在数据冲突,并将所述写操作命令移出所述待检测队列。
11.根据权利要求6所述的冲突检测方法,其特征在于,还包括:
获取所述待检测队列中的所述写操作命令的被检测次数;
当所述被检测次数大于预设次数阈值时,将所述写操作命令移出所述待检测队列。
12.一种冲突检测装置,其特征在于,包括:
数据读取模块,用于读取进行同步操作的两个实例之间的对向同步通道中的数据,所述对向同步通道为两个对向传输数据的同步通道;
第一冲突检测模块,用于对所述对向同步通道所针对的写操作命令进行比对,当所述对向同步通道中存在针对同一目标数据的写操作命令时,确定两个所述实例之间存在数据冲突。
13.根据权利要求12所述的冲突检测装置,其特征在于,所述第一冲突检测模块还用于,当所述对向同步通道中存在针对字符串数据的同类写操作命令、且所述写操作命令所针对的键相同,或者,存在针对列表数据的表头插入、表尾插入、表头移除、表尾移除或表尾移除表头插入的同类写操作命令、且所述写操作命令所针对的键相同,或者,存在针对列表数据的指定位置插入、指定元素移除、设置元素值、修剪、表头移除或表尾移除的同类写操作命令、且所述写操作命令所针对的键相同时,对所述键在目标数据中所对应的值进行比对;当所述键在目标数据中所对应的值相同时,确定两个所述实例之间存在数据冲突。
14.根据权利要求12所述的冲突检测装置,其特征在于,所述第一冲突检测模块还用于,当所述对向同步通道中存在针对集合数据的添加、移除或移动的同类写操作命令、且所述写操作命令所针对的键和字段分别相同时,确定两个所述实例之间存在数据冲突。
15.根据权利要求14所述的冲突检测装置,其特征在于,所述第一冲突检测模块还用于,当所述对向同步通道中存在针对集合数据的差集存储、交集存储或并集存储的同类写操作命令、且所述写操作命令所针对的键相同,或者,存在针对有序集合数据的排序区间移除、分数区间移除或字典区间移除的同类写操作命令、且所述写操作命令所针对的键相同,或者,存在针对有序集合数据的并集存储或交集存储的同类写操作命令、且所述写操作命令所针对的键相同时,获取所述键在目标数据中对应的字段数目;当所述键在目标数据中对应的字段数目不同时,确定两个所述实例之间存在数据冲突;当所述键在目标数据中对应的字段数目相同时,获取所述键在目标数据中对应的值;当所述键在目标数据中对应的值不同时,确定两个所述实例之间存在数据冲突;当所述键在目标数据中均不存在相应的值时,确定两个所述实例之间不存在数据冲突。
16.根据权利要求14所述的冲突检测装置,其特征在于,所述第一冲突检测模块还用于,当所述对向同步通道中存在针对哈希表数据的删除字段、值增加增量、值增加浮点数增量、添加字段-值对或设置字段值的同类写操作命令、且所述写操作命令所针对的键和字段分别相同,或者,存在针对有序集合数据的添加、值增加增量或移除的同类写操作命令、且所述写操作命令所针对的键和字段分别相同时,获取所述键在目标数据中对应的所述字段的值;当所述键在目标数据中对应的所述字段的值不同时,确定两个所述实例之间存在数据冲突;当所述键在目标数据中对应的所述字段均不存在相应的值时,确定两个所述实例之间不存在数据冲突。
17.根据权利要求14所述的冲突检测装置,其特征在于,还包括:
第二冲突检测模块,用于将所述对向同步通道中用于确定存在数据冲突的所述写操作命令,存入待检测队列;针对所述待检测队列中的用于确定存在数据冲突的所述写操作命令,定时检测所述写操作命令所针对的键在目标数据中对应的值的类型;当所述键在目标数据中对应的值的类型不同时,确定所述写操作命令所针对的两个所述实例之间存在数据冲突。
18.根据权利要求17所述的冲突检测装置,其特征在于,所述第二冲突检测模块还用于,当所述键在目标数据中对应的值的类型相同时,针对字符串数据的同类写操作命令,或者,针对列表数据的表头插入、表尾插入、表头移除、表尾移除或表尾移除表头插入的同类写操作命令,或者,针对列表数据的指定位置插入、指定元素移除、设置元素值、修剪、表头移除或表尾移除的同类写操作命令,获取所述写操作命令所针对的键在目标数据中所对应的值,并进行比对;当所述键在目标数据中所对应的值相同时,确定两个所述实例之间存在数据冲突;当所述键在目标数据中所对应的值不同时,确定两个所述实例之间不存在数据冲突,并将所述写操作命令移出所述待检测队列。
19.根据权利要求17所述的冲突检测装置,其特征在于,所述第二冲突检测模块还用于,当所述键在目标数据中对应的值的类型相同时,针对集合数据的添加、移除或移动的同类写操作命令,获取所述写操作命令所针对的键和字段在目标数据中所对应的值,并进行比对;当所述键和字段在目标数据中所对应的值相同时,确定两个所述实例之间存在数据冲突;当所述键和字段在目标数据中所对应的值不同时,确定两个所述实例之间不存在数据冲突,并将所述写操作命令移出所述待检测队列;当所述键和字段在目标数据中均不存在相应的值时,确定两个所述实例之间不存在数据冲突,并将所述写操作命令移出所述待检测队列。
20.根据权利要求17所述的冲突检测装置,其特征在于,所述第二冲突检测模块还用于,当所述键在目标数据中对应的值的类型相同时,针对集合数据的差集存储、交集存储或并集存储的同类写操作命令,或者,针对有序集合数据的排序区间移除、分数区间移除或字典区间移除的同类写操作命令,或者针对有序集合数据的并集存储或交集存储的同类写操作命令,获取所述写操作命令所针对的键在目标数据中对应的字段数目,并进行比对;当所述键在目标数据中对应的字段数目不同时,确定两个所述实例之间存在数据冲突;当所述键在目标数据中对应的字段数目相同时,获取所述键在目标数据中对应的值;当所述键在目标数据中对应的值不同时,确定两个所述实例之间存在数据冲突;当所述键在目标数据中对应的值相同时,确定两个所述实例之间不存在数据冲突,并将所述写操作命令移出所述待检测队列;当所述键在目标数据中均不存在相应的值时,确定两个所述实例之间不存在数据冲突,并将所述写操作命令移出所述待检测队列。
21.根据权利要求17所述的冲突检测装置,其特征在于,所述第二冲突检测模块还用于,当所述键在目标数据中对应的值的类型相同时,针对哈希表数据的删除字段、值增加增量、值增加浮点数增量、添加字段-值对或设置字段值的同类写操作命令,或者,针对有序集合数据的添加、值增加增量或移除的同类写操作命令,获取所述写操作命令所针对的键在目标数据中对应的所述字段的值;当所述键在目标数据中对应的所述字段的值不同时,确定两个所述实例之间存在数据冲突;当所述键在目标数据中对应的所述字段均不存在相应的值时,确定两个所述实例之间不存在数据冲突,并将所述写操作命令移出所述待检测队列。
22.根据权利要求17所述的冲突检测装置,其特征在于,所述第二冲突检测模块还用于,获取所述待检测队列中的所述写操作命令的被检测次数;当所述被检测次数大于预设次数阈值时,将所述写操作命令移出所述待检测队列。
23.一种电子设备,其特征在于,包括:
存储器,用于存储程序;
处理器,用于运行所述存储器中存储的所述程序,以用于:
读取进行同步操作的两个实例之间的对向同步通道中的数据,所述对向同步通道为两个对向传输数据的同步通道;
对所述对向同步通道所针对的写操作命令进行比对,当所述对向同步通道中存在针对同一目标数据的写操作命令时,确定两个所述实例之间存在数据冲突。
CN201810989643.1A 2018-08-28 2018-08-28 冲突检测方法和装置以及电子设备 Active CN110865897B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810989643.1A CN110865897B (zh) 2018-08-28 2018-08-28 冲突检测方法和装置以及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810989643.1A CN110865897B (zh) 2018-08-28 2018-08-28 冲突检测方法和装置以及电子设备

Publications (2)

Publication Number Publication Date
CN110865897A CN110865897A (zh) 2020-03-06
CN110865897B true CN110865897B (zh) 2023-05-02

Family

ID=69651512

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810989643.1A Active CN110865897B (zh) 2018-08-28 2018-08-28 冲突检测方法和装置以及电子设备

Country Status (1)

Country Link
CN (1) CN110865897B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101005428A (zh) * 2006-01-19 2007-07-25 华为技术有限公司 一种检测与解决数据同步冲突的实现方法
CN102945260A (zh) * 2012-10-18 2013-02-27 江苏南开之星软件技术有限公司 一种基于用户级文件双向同步的冲突检测方法
WO2014045080A1 (en) * 2012-09-18 2014-03-27 Nokia Corporation Methods, apparatuses and computer program products for providing a protocol to resolve synchronization conflicts when synchronizing between multiple devices
CN104714756A (zh) * 2013-12-17 2015-06-17 国际商业机器公司 用于在双向同步镜像环境中进行本地锁定的方法和计算机系统
WO2016034061A1 (zh) * 2014-09-01 2016-03-10 国家电网公司 一种基于数据包的移动数据同步冲突预处理与消解方法
CN106934048A (zh) * 2017-03-16 2017-07-07 北京搜狐新媒体信息技术有限公司 数据在线迁移方法、代理节点
CN107203433A (zh) * 2017-06-13 2017-09-26 微梦创科网络科技(中国)有限公司 一种共享内存的多个程序间数据同步方法和装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8321639B2 (en) * 2009-12-30 2012-11-27 Lsi Corporation Command tracking for direct access block storage devices
US10489378B2 (en) * 2015-12-08 2019-11-26 Sap Se Detection and resolution of conflicts in data synchronization

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101005428A (zh) * 2006-01-19 2007-07-25 华为技术有限公司 一种检测与解决数据同步冲突的实现方法
WO2014045080A1 (en) * 2012-09-18 2014-03-27 Nokia Corporation Methods, apparatuses and computer program products for providing a protocol to resolve synchronization conflicts when synchronizing between multiple devices
CN102945260A (zh) * 2012-10-18 2013-02-27 江苏南开之星软件技术有限公司 一种基于用户级文件双向同步的冲突检测方法
CN104714756A (zh) * 2013-12-17 2015-06-17 国际商业机器公司 用于在双向同步镜像环境中进行本地锁定的方法和计算机系统
WO2016034061A1 (zh) * 2014-09-01 2016-03-10 国家电网公司 一种基于数据包的移动数据同步冲突预处理与消解方法
CN106934048A (zh) * 2017-03-16 2017-07-07 北京搜狐新媒体信息技术有限公司 数据在线迁移方法、代理节点
CN107203433A (zh) * 2017-06-13 2017-09-26 微梦创科网络科技(中国)有限公司 一种共享内存的多个程序间数据同步方法和装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
宋果林等."卫星AIS检测概率分析及冲突信号分离".《电子设计工程》.2016,第24卷(第7期),第63-66页. *

Also Published As

Publication number Publication date
CN110865897A (zh) 2020-03-06

Similar Documents

Publication Publication Date Title
CN108572789B (zh) 磁盘存储方法和装置、消息推送方法和装置及电子设备
CN109739936A (zh) 数据同步方法、系统、服务器及计算机可读存储介质
US10606806B2 (en) Method and apparatus for storing time series data
CN105550298B (zh) 一种关键词模糊匹配的方法及装置
US11188560B2 (en) Synchronizing object in local object storage node
US20090063527A1 (en) Processing of database statements with join predicates on range-partitioned tables
US10169391B2 (en) Index management
CN110874358B (zh) 多属性列的存储、检索方法和装置以及电子设备
CN110874383B (zh) 数据处理方法、装置及电子设备
CN105608462A (zh) 字符相似性的判断方法及装置
CN112764663A (zh) 云存储空间的空间管理方法、装置和系统、电子设备以及计算机可读存储介质
CN110865897B (zh) 冲突检测方法和装置以及电子设备
CN111291112B (zh) 分布式数据库的读写控制方法和装置以及电子设备
US11797218B2 (en) Method and device for detecting slow node and computer-readable storage medium
CN112613745A (zh) 记录仪管理方法、系统、存储介质以及电子设备
CN110535962B (zh) 基于认证设备的数据同步方法、装置、设备和存储介质
CN113064919A (zh) 数据处理方法、数据存储系统、计算机设备及存储介质
CN110647421B (zh) 数据库处理方法、装置、系统以及电子设备
CN109213431B (zh) 多副本数据的一致性检测方法和装置以及电子设备
CN110795318B (zh) 数据处理方法和装置以及电子设备
CN111831472B (zh) 快照创建方法和装置以及电子设备
US8381234B2 (en) System and method for managing applications having logical pointer and flag
CN110866003B (zh) 索引值数目的估算方法和装置以及电子设备
CN112486979B (zh) 数据处理方法、装置和系统、电子设备以及计算机可读存储介质
CN108132757B (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
GR01 Patent grant
GR01 Patent grant