CN108255848B - 实现条件更新的方法、设备及系统 - Google Patents

实现条件更新的方法、设备及系统 Download PDF

Info

Publication number
CN108255848B
CN108255848B CN201611242860.1A CN201611242860A CN108255848B CN 108255848 B CN108255848 B CN 108255848B CN 201611242860 A CN201611242860 A CN 201611242860A CN 108255848 B CN108255848 B CN 108255848B
Authority
CN
China
Prior art keywords
update
key
update key
request
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.)
Active
Application number
CN201611242860.1A
Other languages
English (en)
Other versions
CN108255848A (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 CN201611242860.1A priority Critical patent/CN108255848B/zh
Publication of CN108255848A publication Critical patent/CN108255848A/zh
Application granted granted Critical
Publication of CN108255848B publication Critical patent/CN108255848B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/235Update request formulation

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请的目的是提供一种新的实现条件更新的方案,用以解决条件更新功能难以实现的问题,该方案首先由前端设备发送尝试更新请求,尝试在后台设备中进行条件更新,若后台设备中不存在更新键,则通知前端设备,使得前端设备在其对应的前端存储中查询该更新键,由此对完成了对全量数据的查询,此时若前端存储中仍不存在更新键,则表示全量数据中没有该更新键,若前端存储中存在更新键,对其进行更新条件的判断并通过后,向后台设备中正式更新请求,由后台设备完成条件更新请求对应的更新操作。由于系统的全量数据由后台设备和前端存储中的数据组成,通过两次请求的方式,对全量数据进行了查询,由此实现条件更新的功能。

Description

实现条件更新的方法、设备及系统
技术领域
本申请涉及信息技术领域,尤其涉及一种实现条件更新的方案。
背景技术
条件更新(conditional update)是数据系统中一种常用的数据修改方式,用于解决数据并发操作的问题,其具体实现逻辑为:客户端发送的条件更新请求中包含更新条件,更新条件可以是一条件值(conditional value),只有当服务器端当前的值与该条件值一致时,才对指定键的值进行修改或删除的更新(update)操作。
对于传统的关系型数据库系统(如MySQL)或者基于Paxos算法的数据系统(如Zookeeper),由于其服务器端保存了整个系统的全量数据,因此在收到客户端的条件更新请求之后,可以在服务器端基于全量数据实现更新条件的判断,由此实现条件更新。
而对于如图1所示的数据系统,该系统提供键值(key-value)形式的数据服务,包含不同地域的前端集群110、后台设备120和全局锁服务130(Global Lock Service)。
每个前端集群110对应一个地域(Region),例如Region hangzhou、RegionSilicon valley、Region Singapore等。每个Region中部署有多个前端设备(Frontend)同时对外提供服务,Frontend用于接收客户端(client)发送的写请求,并将该请求封装后提交到后台设备中,同时Frontend还能够接收客户端送的读请求,在对应的前端存储(LocalStorage)中查询key对应的value,并返回给客户端。每个Region中有且只有一个masterFrontend,该master Frontend与其它Frontend不同之处在于:master Frontend会不断从后台设备中拉取(Pull)数据并将其保存在对应的前端存储(Local Storage)中,保证本Region中的数据与最新数据同步。
后台设备120用于接收Frontend提交的写请求,并完成相应的数据的保存,在接收到master Frontend的拉取数据的请求时,并将最新数据返回给master Frontend。此外,后台设备还会执行清理流程(Trim Log),就将已经被每个Region的master Frontend拉取的数据删除。
全局锁服务130用于提供锁服务,在各个Region的Frontend中选举出masterFrontend。
该数据系统与传统的关系型数据库系统和基于Paxos算法的数据系统中服务器端保存了全量数据的情况不同,其后台设备的作用只是暂时存储数据,当最新的数据被每个Region的master Frontend拉取之后,就会删除这些数据,无法保存全量数据。此种设计构架,使得这样可以减轻后台设备的负荷,使其功能专注在跨region级别的数据同步上,显著提高性能。但是,这也造成了该系统无法使用现有的实现条件更新的方式,条件更新功能难以实现。
申请内容
本申请的一个目的是提供一种新的实现条件更新的方案,用以解决条件更新功能难以实现的问题。
为实现上述目的,本申请提供了一种在后台设备端实现条件更新的方法,该方法包括:
获取来自前端设备的尝试更新请求,并在后台设备中查询更新键,其中,所述尝试更新请求包括更新键和更新条件;
在所述后台设备中包含所述更新键、且所述更新键的值满足更新条件时,对所述更新键进行更新;
在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,对所述更新键进行更新,其中,所述正式更新请求用于表示所述前端设备对应的前端存储中包含所述更新键、且所述更新键的值满足更新条件。
本申请提供的一种在前端设备端实现条件更新的方法,该方法包括:
向后台设备发送尝试更新请求,其中,所述尝试更新请求包括更新键和更新条件;
在所述后台设备中不包含所述更新键时,在所述前端设备对应的前端存储中查询所述更新键;
在所述前端存储中包含所述更新键、且所述更新键的值满足更新条件时,向所述后台设备发送正式更新请求。
基于本申请的另一方面,还提供了一种用于实现条件更新的后台设备,该后台设备包括:
收发装置,用于获取来自前端设备的尝试更新请求,并在后台设备中查询更新键,其中,所述尝试更新请求包括更新键和更新条件;
处理装置,用于在所述后台设备中包含所述更新键、且所述更新键的值满足更新条件时,对所述更新键进行更新;以及在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,对所述更新键进行更新,其中,所述正式更新请求用于表示所述前端设备对应的前端存储中包含所述更新键、且所述更新键的值满足更新条件。
本申请提供的一种用于实现条件更新的前端设备,该前端设备包括:
收发装置,用于向后台设备发送尝试更新请求,其中,所述尝试更新请求包括更新键和更新条件;以及在所述前端存储中包含所述更新键、且所述更新键的值满足更新条件时,向所述后台设备发送正式更新请求;
处理装置,用于在所述后台设备中不包含所述更新键时,在所述前端设备对应的前端存储中查询所述更新键。
本申请提供的另一种用于实现条件更新的后台设备,该后台设备包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:获取来自前端设备的尝试更新请求,并在后台设备中查询更新键,其中,所述尝试更新请求包括更新键和更新条件;在所述后台设备中包含所述更新键、且所述更新键的值满足更新条件时,对所述更新键进行更新;在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,对所述更新键进行更新,其中,所述正式更新请求用于表示所述前端设备对应的前端存储中包含所述更新键、且所述更新键的值满足更新条件。
本申请提供的另一种用于实现条件更新的前端设备,其中,该前端设备包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:向后台设备发送尝试更新请求,其中,所述尝试更新请求包括更新键和更新条件;在所述后台设备中不包含所述更新键时,在所述前端设备对应的前端存储中查询所述更新键;以及在所述前端存储中包含所述更新键、且所述更新键的值满足更新条件时,向所述后台设备发送正式更新请求。
此外,本申请还提供了一种用于实现条件更新的系统,该系统包括:
前端设备,用于向后台设备发送尝试更新请求,其中,所述尝试更新请求包括更新键和更新条件;在所述后台设备中不包含所述更新键时,在所述前端设备对应的前端存储中查询所述更新键;以及在所述前端存储中包含所述更新键、且所述更新键的值满足更新条件时,向所述后台设备发送正式更新请求;
后台设备,用于获取来自前端设备的尝试更新请求,并在后台设备中查询更新键,其中,所述尝试更新请求包括更新键和更新条件;在所述后台设备中包含所述更新键、且所述更新键的值满足更新条件时,对所述更新键进行更新;在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,对所述更新键进行更新,其中,所述正式更新请求用于表示所述前端设备对应的前端存储中包含所述更新键、且所述更新键的值满足更新条件。
与现有技术相比,本申请提供的方案中,前端设备在收到客户端的条件更新请求之后,首先向后台设备发送尝试更新请求,该尝试更新请求携带有更新键和更新条件,使得后台设备能够根据该尝试更新请求在其后台设备中查询相应的更新键,若后台设备中存在更新键,则直接对其值进行更新条件的判断,实现条件更新;若后台设备中不存在更新键,则通知前端设备,使得前端设备在其对应的前端存储中查询该更新键,由此对完成了对全量数据的查询,此时若前端存储中仍不存在更新键,则表示全量数据中没有该更新键,若前端存储中存在更新键,对其进行更新条件的判断并通过后,向后台设备中正式更新请求,由后台设备完成条件更新请求对应的更新操作。由于系统的全量数据由后台设备和前端存储中的数据组成,通过两次请求的方式,对全量数据进行了查询,由此实现条件更新的功能。
进一步地,通过加锁、暂停清理流程或者设置数据集合进行判断等方式,减少在后台设备在尝试更新请求和正式更新请求之间写入的新数据对于条件更新过程的影响,减少数据错误的可能性。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1为一种数据系统的结构示意图;
图2为本申请实施例提供的一种实现条件更新的方法的交互流程图;
图3为本申请的一个实施例中,在实现条件更新时后台设备与前端设备质之间的交互示意图;
图4为本申请的另一个实施例中,在实现条件更新时后台设备与前端设备质之间的交互示意图;
图5为本申请的另一个实施例中,在实现条件更新时后台设备与前端设备质之间的交互示意图;
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
图2示出了在实现条件更新方法时,后台设备与前端设备质之间的交互示意图,其交互流程具体如下:
步骤S201,前端设备向后台设备发送尝试更新请求。对于一次条件更新,会由客户端发起条件更新请求(conditional update request),由于在图1所示的数据系统中由前端设备直接向客户端提供服务,因此前端设备会接收到来自客户端的条件更新请求。
条件更新请求至少会携带更新键、更新条件和更新操作信息,所述更新键是指作为本次条件更新目标的键,更新条件可以是更新键当前的值是否为条件值,更新操作信息是指对更新键进行何种处理,例如删除、修改等。例如,本实施例中,条件更新请求中的更新键为key1,更新条件为key1的条件值(conditional value)为10,更新操作为:删除将key1的值修改为20,其含义为:如果key1的当前值为10,则将key1的值修改20。
在前端设备接收到条件更新请求时,即会向后台设备发送尝试更新请求(tryconditional update request),该尝试更新请求同样会包含条件更新请求中所携带的更新键、更新条件以及更新操作信息。
步骤S202,后台设备获取来自前端设备的尝试更新请求,并在后台设备中查询更新键。由于尝试更新请求中包含了更新键,则后台设备可以在其存储中查询是否有关于该更新键的数据。在所述后台设备中包含所述更新键、且所述更新键的值满足更新条件时,后台设备对所述更新键进行更新。此时,若需要完成对更新键的条件更新,需要满足两项条件:1、后台设备中存在关于该更新键的数据,2、该更新键当前的值满足更新条件。
仍以前述的更新键和更新条件为例,只有当后台设备中存在关于key1的数据,且key1的value为10时,可以对该更新键进行更新。当所述后台设备中包含所述更新键,但是所述更新键的值不满足更新条件时,条件更新失败。例如,此时后台设备中存在关于key1的数据,但是key1的value为15,此时后台设备判定条件更新失败,会将失败结果返回给前端设备,再由前端设备返回给客户端。
步骤S203,在所述后台设备中不包含所述更新键时,前端设备会在所述其对应的前端存储中查询所述更新键。由于系统的全量数据由后台设备和前端存储中的数据组成,当后台设备中不存在所述更新键的数据时,表示该数据有可能已经被各个Region的masterFrontend拉取,并存储在对应的前端存储中,而后台设备中关于更新键的数据已经通过清理流程被删除。因此,需要进一步在前端存储中进行查询,以确认全量数据中是否有该该更新键的数据。
在实际场景中,可以由后台设备向前端设备发送消息,以告知后台设备中是否包含更新键。例如,当后台设备查询后确认其没有关于更新键的数据,则可以发送前端设备发送一个应答,告知前端设备后台设备中不包含所述更新键。
步骤S204,在所述前端存储中包含所述更新键、且所述更新键的值满足更新条件时,前端设备向所述后台设备发送正式更新请求(fromal conditional update request)。与步骤S203中类似,此时,前端设备若要向所述后台设备发送正式更新请求,需要满足两项条件:1、前端存储中存在关于该更新键的数据,2、该更新键当前的值满足更新条件。由此,所述正式更新请求的作用在于通知后台设备,关于更新键的数据已经保存在前端存储中,并且其值满足更新条件。
仍以前述的更新键和更新条件为例,只有当前端存储中存在关于key1的数据,且key1的value为10时,会向后台设备发送正式更新请求。当前端存储中包含所述更新键,但是所述更新键的值不满足更新条件时,条件更新失败。例如,此时前端存储中存在关于key1的数据,但是key1的value为15,此时前端设备判定条件更新失败,会将失败结果返回给客户端。
步骤S205,在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,后台设备对所述更新键进行更新,其中,所述正式更新请求用于表示所述前端设备对应的前端存储中包含所述更新键、且所述更新键的值满足更新条件。
若后台设备获取到前端设备发送的正式更新请求,则表示前端设备已经确认,在其对应的前端存储中包含所述更新键、且所述更新键的值满足更新条件。由此,后台设备可以获知在整个数据系统的全量数据中,存在该更新键的数据,且其值满足更新条件,由此后台设备可以根据更新操作信息对更新键进行删除、修改等更新操作。在成功完成条件更新之后,将成功结果返回给前端设备,再由前端设备返回给客户端。
该方案中后台设备在完成查询,且未查询到更新键时,由前端设备再次查询其对应的前端存储,同时通过两次请求(尝试更新请求和正式更新请求)的方式,实现全量数据进行查询,由此实现条件更新的功能。
在实际场景中,在尝试更新请求和正式更新请求的之间,其它的前端设备有可能向后台设备中写入关于该更新键的数据,使得在更新键的值两个请求的时间间隔内发生变化,由此造成数据错误。为避免上述问题,在所述后台设备中不包含所述更新键时,所述后台设备创建关于所述更新键的悲观锁,并且后台设备在接收到来自所述前端设备的正式更新请求时,解除关于所述更新键的悲观锁,并对所述更新键进行更新。
其中,所述悲观锁用于锁定所述更新键的更新,即当悲观锁被创建时,所有对更新键的写入操作均会被拒绝。后台设备尝试更新请求和正式更新请求的时间间隔内通过悲观锁来保证更新键无法被其它前端设备发送的条件更新请求或者普通更新请求修改,从而避免发生数据错误的问题。
由于在实际场景下,后台设备可能无法接收到正式更新请求,例如前端存储中也不存在更新键,或者前端存储中的更新键的值不满足更新条件。在此种情况下,悲观锁也同样需要被解锁,由此,本申请实施例中,还提供了其它解锁悲观锁的方式。其中一种方式为:
前端设备在对应的前端存储中查询所述更新键之后,若所述前端存储中不包含所述更新键、或所述更新键的值不满足更新条件,会向所述后台设备发送解锁请求。
后台设备在收到来自前端设备的解锁请求时,解除关于所述更新键的悲观锁。对于后台设备来说,所述解锁请求表示所述前端设备对应的前端存储中不包含所述更新键或者所述更新键的值不满足更新条件。此时,即表示全量数据中不存在更新键的数据或者更新键的值不满足更新条件,本次条件更新已经失败,因此可以解锁悲观锁。
在实际场景中,可能由于各种原因,造成后台设备在较长的时间内都没有收到解锁请求或者是正式更新请求,因此可以设置另一种解除悲观锁的方式,即后台设备在创建关于所述更新键的悲观锁时,设置一超时时间,并在超过所述超时时间时,解除关于所述更新键的悲观锁。例如,将超时时间设定为2分钟,若两分钟内都没有接收到解锁请求或者是正式更新请求,在悲观锁创建之后达到2分钟时,会自动解锁该悲观锁,使得前端设备可以对更新键进行修改。
图3示出了本申请另一实施例在实现条件更新时,后台设备与前端设备质之间的交互示意图,其交互流程如下:
步骤S301,前端设备接收来自客户端的条件更新请求,条件更新请求中包含更新键、更新条件和更新操作信息。
步骤S302,前段设备向后台设备发送尝试更新请求,该尝试更新请求中包含与条件更新请求相同的更新键、更新条件和更新操作信息。
步骤S303,后台设备判断其存储中是否包含更新键。
步骤S304,若包含更新键,后台设备直接判断该更新键的值是否满足更新条件中的条件值,确定条件更新的结果。满足更新条件时成功进行条件更新,而不满足时则条件更新失败。
步骤S305,后台设备将条件更新的结果返回给前端设备。
步骤S306,前端设备将条件更新的结果返回给客户端。
步骤S307,若后台设备中不包含更新键,则后台设备创建关于该更新键的悲观锁,同时设置一超时时间,以便于在超时时进行解锁。此外,生成与所述悲观锁匹配的会话标识(Session ID),后续与前端设备之间的交互消息都可以携带该会话标识,使得悲观锁仅会被对应的正式更新请求或者对应的解锁请求解锁。
步骤S308,后台设备向所述前端设备发送包含所述会话标识的尝试更新应答(freeze response);
步骤S309,前端设备在收到尝试更新应答之后,可以获知后台设备中不存在更新键,则该更新键应当已经存在于前端存储中。此时,查询前端存储可以查询到更新键,读取该更新键的值,判断其是否满足更新条件。
步骤S310,前端设备通过比更新键的值和更新条件中的条件值,发现不满足更新条件,此时可以确定本次条件更新的结果为失败。
步骤S311,前端设备向后台设备发送解锁请求,让后台设备解除悲观锁。该解锁请求中同样可以包含所述会话标识,以便于对特定的悲观锁进行解锁。后台设备在接收到来自所述前端设备的包含所述会话标识的解锁请求时,会话标识的合法性进行判定,合法性判定可以包含两方面内容,是否存在与该会话标识匹配的悲观锁,以及判断接收时间是否超过该悲观锁的超时时间,只有存在相应的悲观锁且未超时时,才可以确定该会话标识合法,从而解除关于所述更新键的悲观锁。
步骤S312,前端设备将条件更新失败的结果发送给客户端。
步骤S313,在另一种情况下,前端设备通过比更新键的值和更新条件中的条件值,发现满足更新条件。
步骤S314,在满足更新条件的情况下,前端设备向所述后台设备发送包含所述会话标识的正式更新请求,以通知后台设备,前端存储中的更新键的值满足更新条件。
步骤S315,在接收到来自所述前端设备的包含所述会话标识的正式更新请求时,对该会话标识的合法性进行判断。其判断过程与解锁请求中的会话标识合法性判断类似,此处不再赘述。
步骤S316,在确定会话标识合法时,后台设备解除与该会话标识对应的悲观锁。
步骤S317,由于在悲观锁解除之前,后台设备中对更新键的更新仍被悲观锁锁定,不会有对更新键的写入操作,因此在悲观锁解除时,全量数据中更新键的值不会存在变化的可能性,可以直接根据更新操作信息对更新键进行更新。
步骤S318,后台设备将条件更新的结果返回给前端设备。
步骤S319,前端设备将条件更新的结果返回给客户端。
该实施例方案的优点在于:在工程实现上成本较低,并且能确切保证数据的一致性和正确性。而确定在于:对更新键进行悲观锁锁定,该其它前端设备对于该更新键的写入操作的QPS(Query Per Second,每秒查询率)会受到极大影响。在某些情况下,如悲观锁创建后,发起条件更新的前端设备宕机掉,此时后台设备必须要等待等超之后,才可以解除悲观锁,此时,会极大影响对于更新键的其它更新请求。因此,该方案仅适用于对对于写入的QPS要求不高但对正确性要求极高的场景。
在不适用于使用悲观锁的场景下,后台设备在在接收到来自所述前端设备的正式更新请求时,可以根据所述更新键在所述后台设备中进行再次查询;若再次查询的结果为不包含所述更新键,则对所述更新键进行更新。若再次查询的结果为包含所述更新键,且所述更新键的值满足所述更新条件,则对所述更新键进行更新。但是在实际场景下,该方案可能存在的问题在于:在尝试更新请求和正式更新请求的之间,其它的前端设备在向后台设备中写入关于该更新键的数据之后,该更新键的数据可能已经被所有Region获取,并被后台设备通过清理流程删除,此时也有可能造成数据错误。
由此,本申请实施例还提供了还另一种实现条件更新的方法,该方法中,后台设备在所述后台设备中不包含所述更新键时,暂停关于所述更新键的清理流程,并且在完成条件更新之后再恢复关于所述更新键的请求流程。
具体地,在接收到来自所述前端设备的正式更新请求时,根据所述更新键在所述后台设备中进行再次查询;若再次查询的结果为不包含所述更新键,则对所述更新键进行更新,恢复关于所述更新键的清理流程。若再次查询的结果为不包含所述更新键;若再次查询的结果为包含所述更新键,且所述更新键的值满足所述更新条件,则对所述更新键进行更新,恢复关于所述更新键的清理流程。在此过程中,前端设备的相应处理流程可以参考前述实施例,此处不再赘述。
由于在尝试更新请求和正式更新请求的时间间隔内暂停清理流程,即使写入的更新键的数据已经被所有Region获取,后台设备也无法执行清理流程将其删除,由此避免了因此种情况所造成的数据错误的问题。
由于暂停清理流程同样会影响后台设备的正常运行,因此,在有可能出现无法接收到正式更新请求的情况下,同样需要其它方式来回恢复暂停的清理流程。由此,本申请实施例中,还提供了另一种方式:
前端设备在对应的前端存储中查询所述更新键之后,若所述前端存储中不包含所述更新键、或所述更新键的值不满足更新条件,会向所述后台设备发送解锁请求。
后台设备在收到来自前端设备的解锁请求时,恢复关于所述更新键的清理流程。对于后台设备来说,所述解锁请求表示所述前端设备对应的前端存储中不包含所述更新键或者所述更新键的值不满足更新条件,即全量数据中不存在更新键的数据或者更新键的值不满足更新条件,本次条件更新已经失败,因此可以恢复清理流程。
在实际场景中,可能由于各种原因,造成后台设备在较长的时间内都没有收到解锁请求或者是正式更新请求。因此同样可以通过设定超时时间的方式,来恢复清理流程,即后台设备在暂停关于所述更新键的清理流程时,设置一超时时间,并在超过所述超时时间时,恢复关于所述更新键的清理流程。例如,将超时时间设定为2分钟,若两分钟内都没有接收到解锁请求或者是正式更新请求,在暂停清理流程之后达到2分钟时,会自动恢复清理流程,使得后台设备的清理流程可以重新执行。
图4示出了本申请本实施例在实现条件更新时,后台设备与前端设备质之间的交互示意图,其交互流程如下:
步骤S401,前端设备接收来自客户端的条件更新请求,条件更新请求中包含更新键、更新条件和更新操作信息。
步骤S402,前段设备向后台设备发送尝试更新请求,该尝试更新请求中包含与条件更新请求相同的更新键、更新条件和更新操作信息。
步骤S403,后台设备判断其存储中是否包含更新键。
步骤S404,若包含更新键,后台设备直接判断该更新键的值是否满足更新条件中的条件值,确定条件更新的结果。满足更新条件时成功进行条件更新,而不满足时则条件更新失败。
步骤S405,后台设备将条件更新的结果返回给前端设备。
步骤S406,前端设备将条件更新的结果返回给客户端。
步骤S407,若后台设备中不包含更新键,则后台设备暂停关于该更新键的清理流程,同时设置一超时时间,以便于在超时时进行解锁。此外,生成与所述更新键的清理流程匹配的会话标识(Session ID),后续与前端设备之间的交互消息都可以携带该会话标识,使得清理流程仅会被对应的正式更新请求或者对应的解锁请求恢复。
步骤S408,后台设备向所述前端设备发送包含所述会话标识的尝试更新应答;
步骤S409,前端设备在收到尝试更新应答之后,可以获知后台设备中不存在更新键,则该更新键应当已经存在于前端存储中。此时,查询前端存储可以查询到更新键,读取该更新键的值,判断其是否满足更新条件。
步骤S410,前端设备通过比更新键的值和更新条件中的条件值,发现不满足更新条件,此时可以确定本次条件更新的结果为失败。
步骤S411,前端设备向后台设备发送解锁请求,让后台设备恢复清理流程。该解锁请求中同样可以包含所述会话标识,以便于恢复特定的更新键的清理流程。后台设备在接收到来自所述前端设备的包含所述会话标识的解锁请求时,会话标识的合法性进行判定,合法性判定可以包含两方面内容,是否存在与该会话标识匹配的更新键的清理流程被暂停,以及判断接收时间是否超过其超时时间,只有存在相应的更新键的清理流程被暂停且未超时时,才可以确定该会话标识合法,从而恢复关于该更新键的清理流程。
步骤S412,前端设备将条件更新失败的结果发送给客户端。
步骤S413,在另一种情况下,前端设备通过比更新键的值和更新条件中的条件值,发现满足更新条件。
步骤S414,在满足更新条件的情况下,前端设备向所述后台设备发送包含所述会话标识的正式更新请求,以通知后台设备,前端存储中的更新键的值满足更新条件。
步骤S415,在接收到来自所述前端设备的包含所述会话标识的正式更新请求时,对该会话标识的合法性进行判断。其判断过程与解锁请求中的会话标识合法性判断类似,此处不再赘述。
步骤S416,由于后台设备中对更新键的更新未被锁定,有可能会有对更新键的写入操作。因此在确定会话标识合法时,后台设备可以根据所述更新键在所述后台设备中进行再次查询;若再次查询的结果为不包含所述更新键,则对所述更新键进行更新。若再次查询的结果为包含所述更新键,且所述更新键的值满足所述更新条件,则对所述更新键进行更新。上述两种为条件更新成功的情况。此外,若再次查询的结果为包含所述更新键,但所述更新键的值不满足所述更新条件,则表示条件更新失败。
步骤S417,后台设备恢复与该会话标识对应的更新键的清理流程。
步骤S418,后台设备将条件更新的结果返回给前端设备。
步骤S419,前端设备将条件更新的结果返回给客户端。
该实施例方案的优点在于可以保证条件更新功能的正确性,其缺陷在于会影响master Frontend的拉取功能,因此适用于对读取性能要求不高且写入请求量少的场景。
此外,本申请实施例还提供了一种实现条件更新的方法,该方法不需要创建悲观锁或者暂停清理流程,而是将清理流程所涉及的更新键的数据进行暂存,从而避免对master Frontend的拉取功能的影响。具体地,该方法中,在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,根据所述更新键在所述后台设备中进行再次查询。
根再次查询的结果,可能进行如下的几种处理:
1、若再次查询的结果为不包含所述更新键,则在后台设备的清理数据集(conditional update key trim数据集)中查询所述更新键。所述清理数据集用于暂存尝试更新请求和正式更新请求的时间间隔内,进行清理流程的更新键的数据,即清理数据集包含了尝试更新请求和正式更新请求的时间间隔内完成清理流程的更新键和所述更新键的值,每条数据的数据结构可以为Map<key,value>。若对于同一个键,存在多次数据更新和清理流程,则清理数据集中仅保存最后一次的数据。
在清理数据集中的查询结果,包含3种情况:
所述清理数据集中不存在所述更新键,说明在两次请求过程中没有关于该更新键的数据更新,因此,可以根据前端设备中的更新条件判断结果确定满足更新条件,从而根据更新操作信息对该更新键进行更新。
所述清理数据集中存在所述更新键,且所述更新键的值满足更新条件,说明在两次请求过程中,该更新键进行过数据更新,并且已经被所有Region拉取,完成了清理流程。由于清理数据集中更新键的值满足更新条件,则表示全量数据中关于更新键的最新数据也满足更新条件。因此,可以根据更新操作信息对该更新键进行更新,从而成功完成条件更新。
所述清理数据集中存在所述更新键,但是所述更新键的值不满足更新条件,说明在两次请求过程中,该更新键进行过数据更新,并且已经被所有Region拉取,完成了清理流程。此时,清理数据集中更新键的值不满足更新条件,则表示全量数据中关于更新键的最新数据不满足更新条件,因此无法进行条件更新,条件更新失败。
2、再次查询的结果为包含所述更新键,且所述更新键的值满足所述更新条件,说明在两次请求过程中,该更新键进行过数据更新,但是还未被所有Region拉取,并未完成清理流程。此时,再次查询的结果中的值满足更新条件,则表示全量数据中关于更新键的最新数据也满足更新条件。因此,可以根据更新操作信息对该更新键进行更新,从而成功完成条件更新。
3、再次查询的结果为包含所述更新键,但是所述更新键的值不满足所述更新条件,说明在两次请求过程中,该更新键进行过数据更新,但是还未被所有Region拉取,并未完成清理流程。此时,再次查询的结果中的值不满足更新条件,则表示全量数据中关于更新键的最新数据不满足更新条件,因此无法进行条件更新,条件更新失败。
在此过程中,前端设备的相应处理流程可以参考前述实施例,此处不再赘述。
在实际场景中,随着运行时间的增长,清理数据集中的数据量将会越来越大,因此本申请的一个实施例中,后台设备可以在满足预设条件的情况下,对清理数据集中的数据进行清理。例如,在所述后台设备中不包含所述更新键时,生成与所述更新键匹配的会话标识,并设定超时时间,在超过所述超时时间时,删除所述清理数据集中与所述会话标识匹配的更新键,由此,避免清理数据集中的数据量过大。
具体地,后台设备中可以再增加一乐观锁数据集,用于在生成与所述更新键匹配的会话标识时,并将所述更新键和对应的会话标识添加至乐观锁数据集中,其中每一条数据可以视为该更新键的乐观锁,其数据结构可以是Map<key,Session ID,conditionalvalue,timestamp>,其中timestamp为时间戳。每一条数据在写入乐观锁数据集之后,后台设备开始计时。在根据时间戳确定超时后,后台设备会删除所述乐观锁数据集中所述更新键对应的会话标识,即解除乐观锁。
在此期间,后台设备可以定时对乐观锁数据集中的更新键对应的会话标识进行查询,若发现会话标识为空,根据该会话标识对应的键,删除清理数据集中相应的数据。
在上述方案中,再次查询是需要基于后台设备中的全部数据,即包含了尝试更新请求和正式更新请求时间间隔内的写入数据和在尝试更新请求之前的写入数据。而有可能造成数据错误的仅为尝试更新请求和正式更新请求时间间隔内的写入数据,因此后台设备可以进一步设置一最近更新数据集(conditional update key current数据集),将尝试更新请求和正式更新请求时间间隔内的写入数据存放在最近更新数据集中,在进行再次查询时,可以在最近更新数据集进行,而非基于后台设备中的全部数据进行。由此,可以减少查询的计算开销,提高处理性能。
图5示出了本申请本实施例在实现条件更新时,后台设备与前端设备质之间的交互示意图,其交互流程如下:
步骤S501,前端设备接收来自客户端的条件更新请求,条件更新请求中包含更新键、更新条件和更新操作信息。
步骤S502,前段设备向后台设备发送尝试更新请求,该尝试更新请求中包含与条件更新请求相同的更新键、更新条件和更新操作信息。
步骤S503,后台设备判断其存储中是否包含更新键。
步骤S504,若包含更新键,后台设备直接判断该更新键的值是否满足更新条件中的条件值,确定条件更新的结果。满足更新条件时成功进行条件更新,而不满足时则条件更新失败。
步骤S505,后台设备将条件更新的结果返回给前端设备。
步骤S506,前端设备将条件更新的结果返回给客户端。
步骤S507,若后台设备中不包含更新键,后台设备会生成与所述更新键匹配的会话标识,在乐观锁数据集中增加该更新键对应的会话标识以及当前的时间戳,以便于进行超时判断,在超时的情况下删除该会话标识。后续与前端设备之间的交互消息都可以携带该会话标识。
步骤S508,后台设备向所述前端设备发送包含所述会话标识的尝试更新应答;
步骤S509,前端设备在收到尝试更新应答之后,可以获知后台设备中不存在更新键,则该更新键应当已经存在于前端存储中。此时,查询前端存储可以查询到更新键,读取该更新键的值,判断其是否满足更新条件。
步骤S510,前端设备通过比更新键的值和更新条件中的条件值,发现不满足更新条件,此时可以确定本次条件更新的结果为失败。
步骤S511,前端设备将条件更新失败的结果发送给客户端。
步骤S512,在另一种情况下,前端设备通过比更新键的值和更新条件中的条件值,发现满足更新条件。
步骤S513,在满足更新条件的情况下,前端设备向所述后台设备发送包含所述会话标识的正式更新请求,以通知后台设备,前端存储中的更新键的值满足更新条件。而在步骤S507至S513的过程中,后台设备会该段期间内清理流程所涉及的更新键的数据进行暂存,保存于清理数据集中,同时在该期间也可以将其它前端设备关于更新键的写入数据保存在最新更新数据集中,在再次查询时替换后台设备中的全部数据,已提高处理性能。
步骤S514,后台设备在接收到来自所述前端设备的包含所述会话标识的正式更新请求时,对该会话标识的合法性进行判断。此处会话标识的合法性判断为:在乐观锁数据库中查询是否存在该会话标识。由于在超时时,该会话标识会被移除,因此若在未超时的情况下,可以查找到相同的会话标识,从而判定合法。
步骤S515,后台设备在确定会话标识合法时,可以在后台设备的全部数据或者最新更新数据集中进行再次查询。再次查询的结果包含3种情形,可参考前述方案,此处不再赘述。根据再次查询的不同结果,获取条件更新的最终结果,成功或失败。
步骤S516,后台设备将条件更新的结果返回给前端设备。
步骤S517,前端设备将条件更新的结果返回给客户端。
本方案的优点在于不会影响前端设备正常的写入和拉取流程,但是其缺点在于内存资源消耗较大,尤其是在后台设备的全部数据中进行再次查询时可能会占用较多的计算资源。而通过设置最新更新数据集,以及在再次查询是替代后台设备的全部数据,能够减少再次查询到计算开销,提高性能。因此,该方案适用于计算资源较为充足,且要求条件更新功能对其它正常流程影响较小的场景。
基于同一发明构思,本申请实施例中还提供了用于实现条件更新的前端设备、后台设备以及系统。所述前端设备、后台设备以及系统对应的方法是前述实施例中在前端设备、后台设备或者其结合的系统中所实现的方法,并且与所述方法解决问题的原理相似,因此所述前端设备、后台设备以及系统的具体实施可以参见对应方法的实施,重复之处不再赘述。
本申请实例提供的一种用于实现条件更新的后台设备,包括:
收发装置,用于获取来自前端设备的尝试更新请求,并在后台设备中查询更新键,其中,所述尝试更新请求包括更新键和更新条件;
处理装置,用于在所述后台设备中包含所述更新键、且所述更新键的值满足更新条件时,对所述更新键进行更新;以及在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,对所述更新键进行更新,其中,所述正式更新请求用于表示所述前端设备对应的前端存储中包含所述更新键、且所述更新键的值满足更新条件。
进一步地,所述处理装置,用于在所述后台设备中不包含所述更新键时,创建关于所述更新键的悲观锁,以及在接收到来自所述前端设备的正式更新请求时,解除关于所述更新键的悲观锁,对所述更新键进行更新,其中,所述悲观锁用于锁定所述更新键的更新。
进一步地,所述处理装置,还用于生成与所述悲观锁匹配的会话标识,以及在接收到来自所述前端设备的包含所述会话标识的正式更新请求、且判断所述会话标识合法时,解除关于所述更新键的悲观锁,对所述更新键进行更新;
所述收发装置,还用于向所述前端设备发送包含所述会话标识的尝试更新应答,接收到来自所述前端设备的包含所述会话标识的正式更新请求。
进一步地,所述处理装置,还用于在收到来自前端设备的解锁请求时,解除关于所述更新键的悲观锁,其中,所述解锁请求用于表示所述前端设备对应的前端存储中不包含所述更新键或者所述更新键的值不满足更新条件。
进一步地,所述处理装置,还用于生成与所述悲观锁匹配的会话标识,以及在接收到来自所述前端设备的包含所述会话标识的解锁请求、且判断所述会话标识合法时,解除关于所述更新键的悲观锁;
所述收发装置,还用于向所述前端设备发送包含所述会话标识的尝试更新应答,以及接收到来自所述前端设备的包含所述会话标识的解锁请求;
进一步地,所述处理装置,还用于在创建关于所述更新键的悲观锁时,设置一超时时间,并在超过所述超时时间时,解除关于所述更新键的悲观锁。
在另一实现方式中,所述处理装置,用于在所述后台设备中不包含所述更新键时,暂停关于所述更新键的清理流程;以及在接收到来自所述前端设备的正式更新请求时,根据所述更新键在所述后台设备中进行再次查询;若再次查询的结果为不包含所述更新键,则对所述更新键进行更新,恢复关于所述更新键的清理流程。
进一步地,所述处理装置,还用于若再次查询的结果为包含所述更新键,且所述更新键的值满足所述更新条件,则对所述更新键进行更新,恢复关于所述更新键的清理流程。
进一步地,所述处理装置,还用于在暂停关于所述更新键的清理流程时,生成与其匹配的会话标识,以及在接收到来自所述前端设备的包含所述会话标识的正式更新请求、且判断所述会话标识合法时,根据所述更新键在所述后台设备中进行再次查询;
所述收发装置,还用于向所述前端设备发送包含所述会话标识的尝试更新应答,以及接收到来自所述前端设备的包含所述会话标识的正式更新请求。
进一步地,所述处理装置,还用于在收到来自前端设备的解锁请求时,恢复关于所述更新键的清理流程,其中,所述解锁请求用于表示所述前端设备对应的前端存储中不包含所述更新键或者所述更新键的值不满足更新条件。
进一步地,所述处理装置,还用于在暂停关于所述更新键的清理流程时,生成与其匹配的会话标识,以及在接收到来自所述前端设备的包含所述会话标识的解锁请求、且判断所述会话标识合法时,恢复关于所述更新键的清理流程;
所述收发装置,还用于向所述前端设备发送包含所述会话标识的尝试更新应答,以及接收到来自所述前端设备的包含所述会话标识的解锁请求。
进一步地,所述处理装置,还用于在暂停关于所述更新键的清理流程时,设置一超时时间,并在超过所述超时时间时,恢复关于所述更新键的清理流程。
在另一实现方式中,所述处理装置,用于在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,根据所述更新键在所述后台设备中进行再次查询;若再次查询的结果为不包含所述更新键,则在后台设备的清理数据集中查询所述更新键,其中,所述清理数据集包含接收到尝试更新请求和正式更新请求之间完成清理流程的更新键和所述更新键的值;若所述清理数据集中不存在所述更新键,则对所述更新键进行更新。
进一步地,所述处理装置,还用于若所述清理数据集中存在所述更新键,且所述更新键的值满足更新条件,则对所述更新键进行更新。
进一步地,所述处理装置,还用于若再次查询的结果为包含所述更新键,且所述更新键的值满足所述更新条件,则对所述更新键进行更新。
进一步地,所述处理装置,用于根据所述更新键在所述后台设备的最近更新数据集中进行再次查询,其中,所述最近更新数据集包含接收到尝试更新请求和正式更新请求之间完成更新的更新键和所述更新键的值。
进一步地,所述处理装置,还用于在所述后台设备中不包含所述更新键时,生成与所述更新键匹配的会话标识,以及在接收到来自所述前端设备的包含所述会话标识的正式更新请求、且判断所述会话标识合法时,根据所述更新键在所述后台设备中进行再次查询;
所述收发装置,用于向所述前端设备发送包含所述会话标识的尝试更新应答,以及接收到来自所述前端设备的包含所述会话标识的正式更新请求。
进一步地,所述处理装置,还用于在所述后台设备中不包含所述更新键时,生成与所述更新键匹配的会话标识,并设定超时时间;以及在超过所述超时时间时,删除所述清理数据集中与所述会话标识匹配的更新键。
进一步地,所述处理装置,用于生成与所述更新键匹配的会话标识,并将所述更新键和对应的会话标识添加至乐观锁数据集;以及在超过所述超时时间时,删除所述乐观锁数据集中所述更新键对应的会话标识,并在更新键对应的会话标识删除时,删除所述清理数据集中所述更新键的值。
本申请实施例提供的一种用于实现条件更新的前端设备,包括:
收发装置,用于向后台设备发送尝试更新请求,其中,所述尝试更新请求包括更新键和更新条件;以及在所述前端存储中包含所述更新键、且所述更新键的值满足更新条件时,向所述后台设备发送正式更新请求;
处理装置,用于在所述后台设备中不包含所述更新键时,在所述前端设备对应的前端存储中查询所述更新键。
进一步地,所述收发装置,还用于接收来自所述后台设备发送的包含会话标识的尝试更新应答,以及向所述后台设备发送包含所述会话标识的正式更新请求;
所述处理装置,用于根据所述尝试更新应答确定所述后台设备中不包含所述更新键,以及在所述前端设备对应的前端存储中查询所述更新键。
进一步地,所述收发装置,还用于在所述前端存储中不包含所述更新键、或所述更新键的值不满足更新条件时,向所述后台设备发送解锁请求。
进一步地,所述收发装置,还用于接收来自所述后台设备发送的包含会话标识的尝试更新应答,以及向所述后台设备发送包含所述会话标识的解锁请求;
所述处理装置,用于根据所述尝试更新应答确定所述后台设备中不包含所述更新键,以及在所述前端设备对应的前端存储中查询所述更新键。
本申请实施例还提供了另一种用于实现条件更新的后台设备,该后台设备包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:获取来自前端设备的尝试更新请求,并在后台设备中查询更新键,其中,所述尝试更新请求包括更新键和更新条件;在所述后台设备中包含所述更新键、且所述更新键的值满足更新条件时,对所述更新键进行更新;在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,对所述更新键进行更新,其中,所述正式更新请求用于表示所述前端设备对应的前端存储中包含所述更新键、且所述更新键的值满足更新条件。
相应地,本申请实施例还提供了一种用于实现条件更新的前端设备,该前端设备包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:向后台设备发送尝试更新请求,其中,所述尝试更新请求包括更新键和更新条件;在所述后台设备中不包含所述更新键时,在所述前端设备对应的前端存储中查询所述更新键;以及在所述前端存储中包含所述更新键、且所述更新键的值满足更新条件时,向所述后台设备发送正式更新请求。
此外,本申请实施例还提供了一种用于实现条件更新的系统,该系统包括:
前端设备,用于向后台设备发送尝试更新请求,其中,所述尝试更新请求包括更新键和更新条件;在所述后台设备中不包含所述更新键时,在所述前端设备对应的前端存储中查询所述更新键;以及在所述前端存储中包含所述更新键、且所述更新键的值满足更新条件时,向所述后台设备发送正式更新请求;
后台设备,用于获取来自前端设备的尝试更新请求,并在后台设备中查询更新键,其中,所述尝试更新请求包括更新键和更新条件;在所述后台设备中包含所述更新键、且所述更新键的值满足更新条件时,对所述更新键进行更新;在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,对所述更新键进行更新,其中,所述正式更新请求用于表示所述前端设备对应的前端存储中包含所述更新键、且所述更新键的值满足更新条件。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。

Claims (49)

1.一种在后台设备端实现条件更新的方法,其中,该方法包括:
获取来自前端设备的尝试更新请求,并在后台设备中查询更新键,其中,所述尝试更新请求包括更新键和更新条件;
在所述后台设备中包含所述更新键、且所述更新键的值满足更新条件时,对所述更新键进行更新;
在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,对所述更新键进行更新,其中,所述正式更新请求用于表示所述前端设备对应的前端存储中包含所述更新键、且所述更新键的值满足更新条件。
2.根据权利要求1所述的方法,其中,在所述后台设备中不包含所述更新键的数据记录、且接收到来自所述前端设备的正式更新请求时,对所述更新键进行更新,包括:
在所述后台设备中不包含所述更新键时,创建关于所述更新键的悲观锁,其中,所述悲观锁用于锁定所述更新键的更新;
在接收到来自所述前端设备的正式更新请求时,解除关于所述更新键的悲观锁,对所述更新键进行更新。
3.根据权利要求2所述的方法,其中,该方法还包括:
生成与所述悲观锁匹配的会话标识,并向所述前端设备发送包含所述会话标识的尝试更新应答;
接收到来自所述前端设备的包含所述会话标识的正式更新请求;
在接收到来自所述前端设备的正式更新请求时,解除关于所述更新键的悲观锁,对所述更新键进行更新,包括:
在接收到来自所述前端设备的包含所述会话标识的正式更新请求、且判断所述会话标识合法时,解除关于所述更新键的悲观锁,对所述更新键进行更新。
4.根据权利要求2所述的方法,其中,在创建关于所述更新键的悲观锁之后,还包括:
在收到来自前端设备的解锁请求时,解除关于所述更新键的悲观锁,其中,所述解锁请求用于表示所述前端设备对应的前端存储中不包含所述更新键或者所述更新键的值不满足更新条件。
5.根据权利要求4所述的方法,其中,该方法还包括:
生成与所述悲观锁匹配的会话标识,并向所述前端设备发送包含所述会话标识的尝试更新应答;
接收到来自所述前端设备的包含所述会话标识的解锁请求;
在收到来自前端设备的解锁请求时,解除关于所述更新键的悲观锁,包括:
在接收到来自所述前端设备的包含所述会话标识的解锁请求、且判断所述会话标识合法时,解除关于所述更新键的悲观锁。
6.根据权利要求2所述的方法,其中,该方法还包括:
在创建关于所述更新键的悲观锁时,设置一超时时间,并在超过所述超时时间时,解除关于所述更新键的悲观锁。
7.根据权利要求1所述的方法,其中,在所述后台设备中不包含所述更新键的数据记录、且接收到来自所述前端设备的正式更新请求时,对所述更新键进行更新,包括:
在所述后台设备中不包含所述更新键时,暂停关于所述更新键的清理流程;
在接收到来自所述前端设备的正式更新请求时,根据所述更新键在所述后台设备中进行再次查询;
若再次查询的结果为不包含所述更新键,则对所述更新键进行更新,恢复关于所述更新键的清理流程。
8.根据权利要求7所述的方法,其中,该方法还包括:
若再次查询的结果为包含所述更新键,且所述更新键的值满足所述更新条件,则对所述更新键进行更新,恢复关于所述更新键的清理流程。
9.根据权利要求7或8所述的方法,其中,该方法还包括:
在暂停关于所述更新键的清理流程时,生成与其匹配的会话标识,并向所述前端设备发送包含所述会话标识的尝试更新应答;
接收到来自所述前端设备的包含所述会话标识的正式更新请求;
在接收到来自所述前端设备的正式更新请求时,根据所述更新键在所述后台设备中进行再次查询,包括:
在接收到来自所述前端设备的包含所述会话标识的正式更新请求、且判断所述会话标识合法时,根据所述更新键在所述后台设备中进行再次查询。
10.根据权利要求7或8所述的方法,其中,在暂停关于所述更新键的清理流程之后,还包括:
在收到来自前端设备的解锁请求时,恢复关于所述更新键的清理流程,其中,所述解锁请求用于表示所述前端设备对应的前端存储中不包含所述更新键或者所述更新键的值不满足更新条件。
11.根据权利要求10所述的方法,其中,该方法还包括:
在暂停关于所述更新键的清理流程时,生成与其匹配的会话标识,并向所述前端设备发送包含所述会话标识的尝试更新应答;
接收到来自所述前端设备的包含所述会话标识的解锁请求;
在收到来自前端设备的解锁请求时,恢复关于所述更新键的清理流程,包括:
在接收到来自所述前端设备的包含所述会话标识的解锁请求、且判断所述会话标识合法时,恢复关于所述更新键的清理流程。
12.根据权利要求7或8所述的方法,其中,该方法还包括:
在暂停关于所述更新键的清理流程时,设置一超时时间,并在超过所述超时时间时,恢复关于所述更新键的清理流程。
13.根据权利要求1所述的方法,其中,在所述后台设备中不包含所述更新键的数据记录、且接收到来自所述前端设备的正式更新请求时,对所述更新键进行更新,包括:
在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,根据所述更新键在所述后台设备中进行再次查询;
若再次查询的结果为不包含所述更新键,则在后台设备的清理数据集中查询所述更新键,其中,所述清理数据集包含接收到尝试更新请求和正式更新请求之间完成清理流程的更新键和所述更新键的值;
若所述清理数据集中不存在所述更新键,则对所述更新键进行更新。
14.根据权利要求13所述的方法,其中,该方法还包括:
若所述清理数据集中存在所述更新键,且所述更新键的值满足更新条件,则对所述更新键进行更新。
15.根据权利要求13所述的方法,其中,该方法还包括:
若再次查询的结果为包含所述更新键,且所述更新键的值满足所述更新条件,则对所述更新键进行更新。
16.根据权利要求13所述的方法,其中,根据所述更新键在所述后台设备中进行再次查询,包括:
根据所述更新键在所述后台设备的最近更新数据集中进行再次查询,其中,所述最近更新数据集包含接收到尝试更新请求和正式更新请求之间完成更新的更新键和所述更新键的值。
17.根据权利要求13至16中任一项所述的方法,其中,在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,根据所述更新键在所述后台设备中进行再次查询,包括:
在所述后台设备中不包含所述更新键时,生成与所述更新键匹配的会话标识,并向所述前端设备发送包含所述会话标识的尝试更新应答;
接收到来自所述前端设备的包含所述会话标识的正式更新请求;
在接收到来自所述前端设备的包含所述会话标识的正式更新请求、且判断所述会话标识合法时,根据所述更新键在所述后台设备中进行再次查询。
18.根据权利要求13至16中任一项所述的方法,其中,该方法还包括:
在所述后台设备中不包含所述更新键时,生成与所述更新键匹配的会话标识,并设定超时时间;
在超过所述超时时间时,删除所述清理数据集中与所述会话标识匹配的更新键。
19.根据权利要求18所述的方法,其中,生成与所述更新键匹配的会话标识,包括:
生成与所述更新键匹配的会话标识,并将所述更新键和对应的会话标识添加至乐观锁数据集;
在超过所述超时时间时,删除所述清理数据集中与所述会话标识匹配的更新键,包括:
在超过所述超时时间时,删除所述乐观锁数据集中所述更新键对应的会话标识;
在更新键对应的会话标识删除时,删除所述清理数据集中所述更新键的值。
20.一种在前端设备端实现条件更新的方法,其中,该方法包括:
向后台设备发送尝试更新请求,其中,所述尝试更新请求包括更新键和更新条件;
在所述后台设备中不包含所述更新键时,在所述前端设备对应的前端存储中查询所述更新键;
在所述前端存储中包含所述更新键、且所述更新键的值满足更新条件时,向所述后台设备发送正式更新请求。
21.根据权利要求20所述的方法,其中,在所述后台设备中不包含所述更新键时,在所述前端设备对应的前端存储中查询所述更新键,包括:
接收来自所述后台设备发送的包含会话标识的尝试更新应答,根据所述尝试更新应答确定所述后台设备中不包含所述更新键;
在所述前端设备对应的前端存储中查询所述更新键;
向所述后台设备发送正式更新请求,包括:
向所述后台设备发送包含所述会话标识的正式更新请求。
22.根据权利要求20所述的方法,其中,在所述前端设备对应的前端存储中查询所述更新键之后,还包括:
在所述前端存储中不包含所述更新键、或所述更新键的值不满足更新条件时,向所述后台设备发送解锁请求。
23.根据权利要求22所述的方法,其中,在所述后台设备中不包含所述更新键时,在所述前端设备对应的前端存储中查询所述更新键,包括:
接收来自所述后台设备发送的包含会话标识的尝试更新应答,根据所述尝试更新应答确定所述后台设备中不包含所述更新键;
在所述前端设备对应的前端存储中查询所述更新键;
向所述后台设备发送解锁请求,包括:
向所述后台设备发送包含所述会话标识的解锁请求。
24.一种用于实现条件更新的后台设备,其中,该后台设备包括:
收发装置,用于获取来自前端设备的尝试更新请求,并在后台设备中查询更新键,其中,所述尝试更新请求包括更新键和更新条件;
处理装置,用于在所述后台设备中包含所述更新键、且所述更新键的值满足更新条件时,对所述更新键进行更新;以及在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,对所述更新键进行更新,其中,所述正式更新请求用于表示所述前端设备对应的前端存储中包含所述更新键、且所述更新键的值满足更新条件。
25.根据权利要求24所述的后台设备,其中,所述处理装置,用于在所述后台设备中不包含所述更新键时,创建关于所述更新键的悲观锁,以及在接收到来自所述前端设备的正式更新请求时,解除关于所述更新键的悲观锁,对所述更新键进行更新,其中,所述悲观锁用于锁定所述更新键的更新。
26.根据权利要求25所述的后台设备,其中,所述处理装置,还用于生成与所述悲观锁匹配的会话标识,以及在接收到来自所述前端设备的包含所述会话标识的正式更新请求、且判断所述会话标识合法时,解除关于所述更新键的悲观锁,对所述更新键进行更新;
所述收发装置,还用于向所述前端设备发送包含所述会话标识的尝试更新应答,接收到来自所述前端设备的包含所述会话标识的正式更新请求。
27.根据权利要求25所述的后台设备,其中,所述处理装置,还用于在收到来自前端设备的解锁请求时,解除关于所述更新键的悲观锁,其中,所述解锁请求用于表示所述前端设备对应的前端存储中不包含所述更新键或者所述更新键的值不满足更新条件。
28.根据权利要求27所述的后台设备,其中,所述处理装置,还用于生成与所述悲观锁匹配的会话标识,以及在接收到来自所述前端设备的包含所述会话标识的解锁请求、且判断所述会话标识合法时,解除关于所述更新键的悲观锁;
所述收发装置,还用于向所述前端设备发送包含所述会话标识的尝试更新应答,以及接收到来自所述前端设备的包含所述会话标识的解锁请求。
29.根据权利要求25所述的后台设备,其中,所述处理装置,还用于在创建关于所述更新键的悲观锁时,设置一超时时间,并在超过所述超时时间时,解除关于所述更新键的悲观锁。
30.根据权利要求24所述的后台设备,其中,所述处理装置,用于在所述后台设备中不包含所述更新键时,暂停关于所述更新键的清理流程;以及在接收到来自所述前端设备的正式更新请求时,根据所述更新键在所述后台设备中进行再次查询;若再次查询的结果为不包含所述更新键,则对所述更新键进行更新,恢复关于所述更新键的清理流程。
31.根据权利要求30所述的后台设备,其中,所述处理装置,还用于若再次查询的结果为包含所述更新键,且所述更新键的值满足所述更新条件,则对所述更新键进行更新,恢复关于所述更新键的清理流程。
32.根据权利要求30或31所述的后台设备,其中,所述处理装置,还用于在暂停关于所述更新键的清理流程时,生成与其匹配的会话标识,以及在接收到来自所述前端设备的包含所述会话标识的正式更新请求、且判断所述会话标识合法时,根据所述更新键在所述后台设备中进行再次查询;
所述收发装置,还用于向所述前端设备发送包含所述会话标识的尝试更新应答,以及接收到来自所述前端设备的包含所述会话标识的正式更新请求。
33.根据权利要求30或31所述的后台设备,其中,所述处理装置,还用于在收到来自前端设备的解锁请求时,恢复关于所述更新键的清理流程,其中,所述解锁请求用于表示所述前端设备对应的前端存储中不包含所述更新键或者所述更新键的值不满足更新条件。
34.根据权利要求33所述的后台设备,其中,所述处理装置,还用于在暂停关于所述更新键的清理流程时,生成与其匹配的会话标识,以及在接收到来自所述前端设备的包含所述会话标识的解锁请求、且判断所述会话标识合法时,恢复关于所述更新键的清理流程;
所述收发装置,还用于向所述前端设备发送包含所述会话标识的尝试更新应答,以及接收到来自所述前端设备的包含所述会话标识的解锁请求。
35.根据权利要求30或31所述的后台设备,其中,所述处理装置,还用于在暂停关于所述更新键的清理流程时,设置一超时时间,并在超过所述超时时间时,恢复关于所述更新键的清理流程。
36.根据权利要求24所述的后台设备,其中,所述处理装置,用于在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,根据所述更新键在所述后台设备中进行再次查询;若再次查询的结果为不包含所述更新键,则在后台设备的清理数据集中查询所述更新键,其中,所述清理数据集包含接收到尝试更新请求和正式更新请求之间完成清理流程的更新键和所述更新键的值;若所述清理数据集中不存在所述更新键,则对所述更新键进行更新。
37.根据权利要求36所述的后台设备,其中,所述处理装置,还用于若所述清理数据集中存在所述更新键,且所述更新键的值满足更新条件,则对所述更新键进行更新。
38.根据权利要求36所述的后台设备,其中,所述处理装置,还用于若再次查询的结果为包含所述更新键,且所述更新键的值满足所述更新条件,则对所述更新键进行更新。
39.根据权利要求36所述的后台设备,其中,所述处理装置,用于根据所述更新键在所述后台设备的最近更新数据集中进行再次查询,其中,所述最近更新数据集包含接收到尝试更新请求和正式更新请求之间完成更新的更新键和所述更新键的值。
40.根据权利要求36至39中任一项所述的后台设备,其中,所述处理装置,还用于在所述后台设备中不包含所述更新键时,生成与所述更新键匹配的会话标识,以及在接收到来自所述前端设备的包含所述会话标识的正式更新请求、且判断所述会话标识合法时,根据所述更新键在所述后台设备中进行再次查询;
所述收发装置,用于向所述前端设备发送包含所述会话标识的尝试更新应答,以及接收到来自所述前端设备的包含所述会话标识的正式更新请求。
41.根据权利要求36至39中任一项所述的后台设备,其中,所述处理装置,还用于在所述后台设备中不包含所述更新键时,生成与所述更新键匹配的会话标识,并设定超时时间;以及在超过所述超时时间时,删除所述清理数据集中与所述会话标识匹配的更新键。
42.根据权利要求41所述的后台设备,其中,所述处理装置,用于生成与所述更新键匹配的会话标识,并将所述更新键和对应的会话标识添加至乐观锁数据集;以及在超过所述超时时间时,删除所述乐观锁数据集中所述更新键对应的会话标识,并在更新键对应的会话标识删除时,删除所述清理数据集中所述更新键的值。
43.一种用于实现条件更新的前端设备,其中,该前端设备包括:
收发装置,用于向后台设备发送尝试更新请求,其中,所述尝试更新请求包括更新键和更新条件;以及在前端存储中包含所述更新键、且所述更新键的值满足更新条件时,向所述后台设备发送正式更新请求;
处理装置,用于在所述后台设备中不包含所述更新键时,在所述前端设备对应的前端存储中查询所述更新键。
44.根据权利要求43所述的前端设备,其中,所述收发装置,还用于接收来自所述后台设备发送的包含会话标识的尝试更新应答,以及向所述后台设备发送包含所述会话标识的正式更新请求;
所述处理装置,用于根据所述尝试更新应答确定所述后台设备中不包含所述更新键,以及在所述前端设备对应的前端存储中查询所述更新键。
45.根据权利要求43所述的前端设备,其中,所述收发装置,还用于在所述前端存储中不包含所述更新键、或所述更新键的值不满足更新条件时,向所述后台设备发送解锁请求。
46.根据权利要求45所述的前端设备,其中,所述收发装置,还用于接收来自所述后台设备发送的包含会话标识的尝试更新应答,以及向所述后台设备发送包含所述会话标识的解锁请求;
所述处理装置,用于根据所述尝试更新应答确定所述后台设备中不包含所述更新键,以及在所述前端设备对应的前端存储中查询所述更新键。
47.一种用于实现条件更新的后台设备,其中,该后台设备包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:获取来自前端设备的尝试更新请求,并在后台设备中查询更新键,其中,所述尝试更新请求包括更新键和更新条件;在所述后台设备中包含所述更新键、且所述更新键的值满足更新条件时,对所述更新键进行更新;在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,对所述更新键进行更新,其中,所述正式更新请求用于表示所述前端设备对应的前端存储中包含所述更新键、且所述更新键的值满足更新条件。
48.一种用于实现条件更新的前端设备,其中,该前端设备包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:向后台设备发送尝试更新请求,其中,所述尝试更新请求包括更新键和更新条件;在所述后台设备中不包含所述更新键时,在所述前端设备对应的前端存储中查询所述更新键;以及在所述前端存储中包含所述更新键、且所述更新键的值满足更新条件时,向所述后台设备发送正式更新请求。
49.一种用于实现条件更新的系统,其中,该系统包括:
前端设备,用于向后台设备发送尝试更新请求,其中,所述尝试更新请求包括更新键和更新条件;在所述后台设备中不包含所述更新键时,在所述前端设备对应的前端存储中查询所述更新键;以及在所述前端存储中包含所述更新键、且所述更新键的值满足更新条件时,向所述后台设备发送正式更新请求;
后台设备,用于获取来自前端设备的尝试更新请求,并在后台设备中查询更新键,其中,所述尝试更新请求包括更新键和更新条件;在所述后台设备中包含所述更新键、且所述更新键的值满足更新条件时,对所述更新键进行更新;在所述后台设备中不包含所述更新键、且接收到来自所述前端设备的正式更新请求时,对所述更新键进行更新,其中,所述正式更新请求用于表示所述前端设备对应的前端存储中包含所述更新键、且所述更新键的值满足更新条件。
CN201611242860.1A 2016-12-29 2016-12-29 实现条件更新的方法、设备及系统 Active CN108255848B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611242860.1A CN108255848B (zh) 2016-12-29 2016-12-29 实现条件更新的方法、设备及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611242860.1A CN108255848B (zh) 2016-12-29 2016-12-29 实现条件更新的方法、设备及系统

Publications (2)

Publication Number Publication Date
CN108255848A CN108255848A (zh) 2018-07-06
CN108255848B true CN108255848B (zh) 2022-06-24

Family

ID=62719824

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611242860.1A Active CN108255848B (zh) 2016-12-29 2016-12-29 实现条件更新的方法、设备及系统

Country Status (1)

Country Link
CN (1) CN108255848B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111143383B (zh) * 2019-12-20 2023-07-14 五八有限公司 一种数据更新方法、装置、电子设备及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1673972A (zh) * 2004-08-04 2005-09-28 上海宝信软件股份有限公司 数据库表更新的动态监控系统及方法
CN1964343A (zh) * 2006-08-30 2007-05-16 王伟 一种网络数据记录的自动匹配方法
CN101021856A (zh) * 2006-10-11 2007-08-22 鲍东山 分布式语音检索系统
CN101316256A (zh) * 2007-05-28 2008-12-03 微码(北京)移动技术有限公司 一种数据更新的方法
CN103338243A (zh) * 2013-06-20 2013-10-02 新浪网技术(中国)有限公司 Web节点的缓存数据更新方法和系统
CN104598508A (zh) * 2013-09-18 2015-05-06 Ims保健公司 用于快速查询响应的系统和方法
CN105814931A (zh) * 2013-07-02 2016-07-27 七网络有限责任公司 基于移动网络信号的网络建模

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9047089B2 (en) * 2013-05-20 2015-06-02 Rovi Guides, Inc. Energy-saving systems and methods for updating media information
US9774410B2 (en) * 2014-06-10 2017-09-26 PB, Inc. Radiobeacon data sharing by forwarding low energy transmissions to a cloud host
CN106209926B (zh) * 2015-04-30 2019-06-21 阿里巴巴集团控股有限公司 一种数据更新方法和设备

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1673972A (zh) * 2004-08-04 2005-09-28 上海宝信软件股份有限公司 数据库表更新的动态监控系统及方法
CN1964343A (zh) * 2006-08-30 2007-05-16 王伟 一种网络数据记录的自动匹配方法
CN101021856A (zh) * 2006-10-11 2007-08-22 鲍东山 分布式语音检索系统
CN101316256A (zh) * 2007-05-28 2008-12-03 微码(北京)移动技术有限公司 一种数据更新的方法
CN103338243A (zh) * 2013-06-20 2013-10-02 新浪网技术(中国)有限公司 Web节点的缓存数据更新方法和系统
CN105814931A (zh) * 2013-07-02 2016-07-27 七网络有限责任公司 基于移动网络信号的网络建模
CN104598508A (zh) * 2013-09-18 2015-05-06 Ims保健公司 用于快速查询响应的系统和方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
A traffic parameter detection based on computer vision;Jianxin Che等;《2011 3rd International Conference on Advanced Computer Control》;20110912;591-594 *
基于QPSO-SFLA改进算法的云环境资源调度研究;张扬;《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》;20160215(第2期);I139-57 *
基于轮转机制的云服务在线更新技术研究;欧阳雪;《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》;20160315(第3期);I139-521 *

Also Published As

Publication number Publication date
CN108255848A (zh) 2018-07-06

Similar Documents

Publication Publication Date Title
CN107577678B (zh) 处理数据库事务的方法、客户端和服务器
US7870226B2 (en) Method and system for an update synchronization of a domain information file
CN107515874B (zh) 一种分布式非关系型数据库中同步增量数据的方法与设备
KR102072726B1 (ko) 데이터베이스로의 미들-티어 트랜잭션 로그들의 인라인 위임을 지원하는 시스템들 및 방법들
US10585874B2 (en) Locking concurrent commands in a database management system
US9952783B2 (en) Data processing method and apparatus, and shared storage device
EP3674909A1 (en) Data transaction processing method, device, and electronic device
US9922070B2 (en) Maintaining consistency between a transactional database system and a non-transactional content repository for document objects
CN108572876B (zh) 一种读写锁的实现方法及装置
CN110188110B (zh) 一种构建分布式锁的方法及装置
US20150142749A1 (en) Method and system for a safe archiving of data
US8666958B2 (en) Approaches to reducing lock communications in a shared disk database
CN112052264B (zh) 业务数据查询方法、装置、电子设备及可读存储介质
CN113342507B (zh) 一种分布式锁服务实现方法、装置及计算机设备
US20200034472A1 (en) Asynchronous cache coherency for mvcc based database systems
US8132174B2 (en) Concurrency management in cluster computing of business applications
US8893137B2 (en) Transaction-based shared memory protection for high availability environments
CN103064898A (zh) 事务加锁、解锁方法及装置
CN108255848B (zh) 实现条件更新的方法、设备及系统
CN111399753A (zh) 写入图片的方法和装置
CN106407385B (zh) 数据管理方法、设备和系统
CN116360696B (zh) 分布式块存储系统、介质及其电子设备
US20170249082A1 (en) Determining status of a host operation without accessing the host in a shared storage environment
US12038901B2 (en) Method and system for non-blocking database logging batching
CN106354830B (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