CN113779052A - 数据更新方法、装置、设备及存储介质 - Google Patents
数据更新方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN113779052A CN113779052A CN202011245395.3A CN202011245395A CN113779052A CN 113779052 A CN113779052 A CN 113779052A CN 202011245395 A CN202011245395 A CN 202011245395A CN 113779052 A CN113779052 A CN 113779052A
- Authority
- CN
- China
- Prior art keywords
- data
- version
- version identification
- database
- target data
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2474—Sequence data queries, e.g. querying versioned data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明实施例提供一种数据更新方法、装置、设备及存储介质,通过在接收对目标数据的更新请求后,根据更新请求查询目标数据在数据库中的第一版本标识、以及在缓存的第一数据中的第二版本标识;根据第一版本标识和第二版本标识将第二版本标识更新为目标版本标识;根据目标版本标识更新数据库中的目标数据以及第一版本标识;在数据库更新完毕后根据数据库中更新后的目标数据以及更新后的第一版本标识更新缓存的第二数据中的目标数据以及第三版本标识。本发明实施例中可以使得更新后缓存和数据库中的目标数据逻辑上保证强一致性,从而在访问数据时可以读取到最新正确的数据。
Description
技术领域
本发明实施例涉及互联网技术领域,尤其涉及一种数据更新方法、装置、设备及存储介质。
背景技术
在高并发、大流量的互联网系统中,如果系统依赖的存储用的是数据库,那么通常需要部署一个庞大的数据库集群才能支持大流量访问,这样需要大量的数据库资源且不一定能扛住峰值流量,所以用读取速度比数据库更快的缓存来应对大流量访问的方案应运而生,也即在缓存中存储与数据库中相同的数据以供用户访问。
现有技术中为了保持缓存与数据库中数据一致,通常采用以下三种数据更新策略:方式一,先更新数据库,再更新缓存;方式二,先更新缓存,再更新数据库;方式三,采用被动更新的方式,先更新数据库,不更新缓存,而是在读数据时被动的把数据库中的数据填回缓存。
现有技术的数据更新策略在互联网应用场景中读写过程都是高并发的情况中,通常无法使缓存和数据库中的数据保证强一致性,容易导致从缓存中读取的数据不是最新正确的数据。
发明内容
本发明实施例提供一种数据更新方法、装置、设备及存储介质,用以在数据更新时使缓存和数据库中的数据保证强一致性。
第一方面,本发明实施例提供一种数据更新方法,数据库中存储有目标数据及对应的第一版本标识,缓存中存储有第一数据和第二数据,所述第一数据包括所述目标数据在所述缓存中的第二版本标识,所述第二数据包括所述目标数据及所述目标数据在所述缓存中的第三版本标识;所述方法包括:
接收对目标数据的更新请求,并根据所述更新请求查询所述目标数据在所述数据库中的第一版本标识、以及在所述第一数据中的第二版本标识;
根据所述第一版本标识和所述第二版本标识,将所述第二版本标识更新为目标版本标识;
根据所述目标版本标识,更新所述数据库中的目标数据以及所述第一版本标识;
在所述数据库更新完毕后,根据所述数据库中更新后的目标数据以及更新后的第一版本标识,更新所述第二数据中的目标数据以及所述第三版本标识。
第二方面,本发明实施例提供一种数据更新装置,数据库中存储有目标数据及对应的第一版本标识,缓存中存储有第一数据和第二数据,所述第一数据包括所述目标数据在所述缓存中的第二版本标识,所述第二数据包括所述目标数据及所述目标数据在所述缓存中的第三版本标识;所述装置包括:
接收模块,用于接收对目标数据的更新请求;
查询模块,用于根据所述更新请求查询所述目标数据在所述数据库中的第一版本标识、以及在所述第一数据中的第二版本标识;
缓存更新模块,用于根据所述第一版本标识和所述第二版本标识,将所述第二版本标识更新为目标版本标识;
数据库更新模块,用于根据所述目标版本标识,更新所述数据库中的目标数据以及所述第一版本标识;
所述缓存更新模块还用于,在所述数据库更新完毕后,根据所述数据库中更新后的目标数据以及更新后的第一版本标识,更新所述第二数据中的目标数据以及所述第三版本标识。
第三方面,本发明实施例提供一种电子设备,包括:数据库;缓存;至少一个处理器;以及用于存储指令的存储器;
所述数据库用于存储目标数据及对应的第一版本标识;
所述缓存用于存储第一数据和第二数据,所述第一数据包括所述目标数据在所述缓存中的第二版本标识,所述第二数据包括所述目标数据及所述目标数据在所述缓存中的第三版本标识;
所述存储器用于存储计算机执行指令;
所述至少一个处理器用于执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如第一方面所述的方法。
第四方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如第一方面所述的方法。
本发明实施例提供的数据更新方法、装置、设备及存储介质,通过在接收对目标数据的更新请求后,根据更新请求查询目标数据在数据库中的第一版本标识、以及在缓存的第一数据中的第二版本标识;根据第一版本标识和第二版本标识将第二版本标识更新为目标版本标识;根据目标版本标识更新数据库中的目标数据以及第一版本标识;在数据库更新完毕后根据数据库中更新后的目标数据以及更新后的第一版本标识更新缓存的第二数据中的目标数据以及第三版本标识。本发明实施例中采用缓存的第一数据中更新后的版本标识来对数据库中目标数据和第一版本标识进行更新,数据库中目标数据和第一版本标识更新后又推动缓存的第二数据中目标数据与第三版本标识的更新,从而使得更新后缓存和数据库中的目标数据逻辑上保证强一致性,从而在访问数据时可以读取到最新正确的数据。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1为本发明实施例提供的数据更新方法的应用场景示意图;
图2为本发明一实施例提供的数据更新方法的流程图;
图3为本发明一实施例提供的数据更新方法的流程图;
图4为本发明一实施例提供的数据更新方法的流程图;
图5为本发明一实施例提供的数据更新方法的流程图;
图6为本发明一实施例提供的数据更新装置的框图;
图7为本发明一实施例提供的执行数据更新方法的电子设备的框图。
通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在高并发、大流量的互联网系统中,为了支持大流量访问通常在数据库的基础上部署读取速度比数据库更快的缓存,在缓存中存储与数据库中相同的数据以供用户访问。现有技术中为了保持缓存与数据库中数据一致,通常采用以下三种数据更新策略:
方式一,先更新数据库中的目标数据,再更新缓存中的目标数据;方式二,先更新缓存中的目标数据,再更新数据库中的目标数据;方式三,采用被动更新的方式,先更新数据库中的目标数据,不更新缓存中的目标数据,而是在读数据时再被动的把数据库中的目标数据填回缓存。
由于在互联网应用场景中读写过程都是高并发的,且要求返回的数据是最新正确的数据,因此通常需要缓存和数据库中的数据保证强一致性。而上述的现有数据更新策略均存在一些不足:
方式一,如果先更新数据库成功,再更新缓存失败,则会导致缓存比数据库数据旧,此时接收到访问请求,则会从缓存返回一个脏数据(比数据库数据旧);
方式二,如果先更新缓存成功,再更新数据库失败,导致缓存比数据库数据新,并且删除缓存也失败,此时接收到访问请求,也会从缓存返回一个脏数据(比数据库数据新);
方式三,数据库被更新了,假如缓存还未过期,这个时候请求读到缓存,也会返回一个脏数据(比数据库旧)。
综上,现有技术的数据更新策略在互联网应用场景的情况中,通常无法使缓存和数据库中的数据保证强一致性,容易导致从缓存中读取的数据不是最新正确的数据。
为了解决上述技术问题,本发明实施例中在数据库中存储有目标数据及对应的第一版本标识,缓存中存储有第一数据和第二数据,其中第一数据包括目标数据在缓存中的第二版本标识,第二数据包括目标数据及目标数据在缓存中的第三版本标识;在通常情况下,若缓存和数据库中的目标数据一致,则第一版本标识、第二版本标识以及第三版本标识应保持相同。当然,可选的,版本标识也可以作为目标数据的一部分,例如版本标识可以为目标数据中的一个字段。
而在需要进行数据更新时,也即在接收到对目标数据的更新请求时,可先查询目标数据在数据库中的第一版本标识、以及在第一数据中的第二版本标识,然后根据第一版本标识和第二版本标识判断是否满足更新条件,若满足更新条件,则将第二版本标识更新为目标版本标识;进而再根据目标版本标识更新数据库中的目标数据以及第一版本标识,也即将数据库中的目标数据更新为目标版本标识对应的数据,将第一版本标识更新为目标版本标识;在数据库更新完毕后,根据数据库中更新后的目标数据以及更新后的第一版本标识,更新第二数据中的目标数据以及第三版本标识。
本发明实施例中由于缓存中第一数据中的第二版本标识是在更新数据库中的目标数据前先更新为目标版本标识,在第二版本标识更新成功后再更新数据库中的目标数据和第一版本标识,在数据库更新完毕后,根据数据库中更新后的目标数据以及更新后的第一版本标识更新缓存中第二数据中的目标数据和第三版本标识。采用缓存的第一数据中更新后的版本标识来对数据库中目标数据和第一版本标识进行更新,数据库中目标数据和第一版本标识更新后又推动缓存的第二数据中目标数据与第三版本标识的更新。所以本发明使数据库和缓存中目标数据的更新是一个环环相扣的过程,通过这个过程,则可使更新后缓存和数据库中的目标数据逻辑上保证强一致性,尤其是,可在后续通过第一数据中的第二版本标识和第二数据中的第三版本标识来验证缓存和数据库中的目标数据是否一致,从而可以在从缓存中读取的目标数据时能够获取到最新正确的数据。
本发明实施例的数据更新方法可适用于如图1所示的应用场景,包括客户端101和服务器102,客户端101可不限于手机、电脑等任意电子设备,而服务器可包括数据库1022和缓存1023,在数据库1022中存储有目标数据及对应的第一版本标识,缓存1023中存储有第一数据和第二数据,其中第一数据包括目标数据在缓存1023中的第二版本标识,第二数据包括目标数据及目标数据在缓存1023中的第三版本标识;在通常情况下,若缓存1023和数据库1022中的目标数据一致,则第一版本标识、第二版本标识以及第三版本标识应保持相同。
客户端101可向服务器102发送对目标数据的更新请求,或者服务器102检测到目标数据需要更新时也会触发对目标数据的更新请求,进而服务器102可根据更新请求查询目标数据在数据库1022中的第一版本标识、以及在第一数据中的第二版本标识;根据第一版本标识和第二版本标识,将第二版本标识更新为目标版本标识;根据目标版本标识,更新数据库1022中的目标数据以及第一版本标识;在数据库1022更新完毕后,根据数据库1022中更新后的目标数据以及更新后的第一版本标识,更新第二数据中的目标数据以及第三版本标识。
需要说明的是,本发明实施例中服务器102可以为一个服务器,也即数据库和缓存配置于同一台服务器上,则本发明实施例的数据更新方法执行主体为该服务器102;当然本发明实施例中服务器102也可以为多个服务器构成的集群,例如数据库1022配置于一些服务器上,而缓存1023配置于另一些服务器上,则本发明实施例的数据更新方法执行主体可以为该服务器集群的中心服务器,由中心服务器控制目标数据的更新,当然执行主体也可以为任意一个服务器。
下面以具体地实施例对本发明的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明的实施例进行描述。
图2为本发明实施例提供的数据更新方法流程图。本实施例提供了一种数据更新方法,在该数据更新方法中,数据库中存储有目标数据及对应的第一版本标识,缓存中存储有第一数据和第二数据,所述第一数据包括所述目标数据在所述缓存中的第二版本标识,所述第二数据包括所述目标数据及所述目标数据在所述缓存中的第三版本标识。
作为示例,数据库中每一条数据都包含一个版本(version)标识字段,可以是从0开始自增,数据的具体格式可如下表所示:
id(主键) | 其他字段 | version(版本) |
12345 | …… | 0 |
而缓存中,对应于数据库中的该数据,以两条数据进行表示,其中每一条数据中都包括版本标识,具体格式可如下所示:
第一数据:key:12345_v value:version:0
第二数据:key:12345_i value:{“id”:12345,“其他字段”:“……”,“version”:0}
缓存基于key-value来存储第一数据和第二数据,其中第一数据和第二数据中的关键字key:12345对应数据库中的id(主键),能标识缓存与数据库中的对应数据,而通过value=get(key)即可查询到对应的第一数据和第二数据的值,第一数据中的value为在缓存中id对应数据的版本,而第二数据的value为缓存中id对应数据的全量数据,包括id、其他字段、版本标识字段等。可选的,第二数据的value用json格式表示,json内容是数据库中数据全量内容。当然本实施例中数据库中的数据、缓存中的第一数据和第二数据并不限于上述的格式。在通常情况下,对于某一目标数据,若缓存和数据库中的目标数据一致,则数据库中目标数据的版本标识、缓存中目标数据对应的第一数据中的版本标识、第二数据的版本标识应保持相同。
基于上述的数据库和缓存对数据的存储方式,如图2所示,本实施例中的数据更新方法具体步骤如下:
S201、接收对目标数据的更新请求,并根据所述更新请求查询所述目标数据在所述数据库中的第一版本标识、以及在所述第一数据中的第二版本标识。
在本实施例中,当需要对目标数据进行更新时,可以发送对目标数据的更新请求,或者检测到目标数据需要更新时也会触发对目标数据的更新请求,进而可基于更新请求查询查询目标数据在数据库中的第一版本标识,以及目标数据在缓存的第一数据中的第二版本标识。其中,可选的,对目标数据的更新请求中可包括目标数据的id,进而基于目标数据的id从数据库中查询目标数据的第一版本标识,从缓存中查询该id对应的第一数据中的第二版本标识。
需要说明的是,针对查询目标数据在数据库中的第一版本标识,以及查询目标数据在第一数据中的第二版本标识,本实施例中可并不限定这两个查询过程的先后顺序,当然两个查询过程也可同时执行。
S202、根据所述第一版本标识和所述第二版本标识,将所述第二版本标识更新为目标版本标识。
在本实施例中,在查询到目标数据在数据库中的第一版本标识,以及目标数据在缓存的第一数据中的第二版本标识后,可根据第一版本标识和第二版本标识,确定是否能够对第二版本标识进行更新,若能够对第二版本标识进行更新,则将第二版本标识更新为目标版本标识。
可选的,在更新请求中可包括目标数据的目标版本标识;或者可选的,若目标数据更新时版本标识是依次递增的,则更新请求中可不包括目标数据的目标版本标识,目标版本标识可以为当前版本标识+1;若目标数据更新时版本标识不是依次递增的,则需要指定目标版本标识。
进一步的,在根据所述第一版本标识和所述第二版本标识,将所述第二版本标识更新为目标版本标识时,具体可包括:
若所述第二版本标识与所述第一版本标识相等,则将所述第二版本标识更新为所述目标版本标识;或者,
若所述第二版本标识与所述第一版本标识不相等,且所述第二版本标识等于所述目标版本标识,则直接确定所述第二版本标识更新成功;或者,
若所述第二版本标识与所述第一版本标识不相等,且所述第二版本标识不等于所述目标版本标识,则确定所述第二版本标识更新失败,结束后续的数据更新过程。
本实施例中,将第一数据中的第二版本标识更新为目标版本标识作为数据更新行为的起点,若执行将第二版本标识更新为目标版本标识,则说明已经启动了对目标数据的更新,而若未执行将第二版本标识更新为目标版本标识,则说明未启动对目标数据的更新,此时第二版本标识与第一版本标识维持相等。因此在本实施例中,若第二版本标识与第一版本标识相等,且不等于目标版本标识,说明缓存和数据库中目标数据尚未被当前线程以及其他线程所更新,此时执行将第二版本标识更新为目标版本标识,也即启动了数据更新行为;而若第二版本标识与第一版本标识不相等,且第二版本标识等于目标版本标识,说明此时可能是其他线程已启动数据更新行为,由于此时并未涉及到缓存和数据库中目标数据的数据内容的更新,因此直接确定第二版本标识更新成功,可继续后续的缓存和数据库中目标数据的数据内容的更新;而若第二版本标识与第一版本标识不相等,且第二版本标识不等于目标版本标识,则确定第二版本标识更新失败,结束后续的数据更新过程,还可返回更新失败消息。
S203、根据所述目标版本标识,更新所述数据库中的目标数据以及所述第一版本标识。
本实施例中,在第二版本标识更新为目标版本标识后,则更新数据库中的目标数据以及数据库中目标数据的第一版本标识,也即将数据库中目标数据更新为目标版本标识对应的数据,将第一版本标识更新为目标版本标识。
可选的,在更新所述数据库中的目标数据以及所述第一版本标识时,可对数据库设置乐观锁机制,其中乐观锁(Optimistic Locking)机制是在更新数据场景中,假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户检测错误的信息,CAS(Compare and Swap,比较并替换)是一种乐观锁实现手段,SQL更新中where条件中的版本比较就是这样一种实现。具体的,在对数据库中的目标数据进行更新过程中,在提交新版本的目标数据时将当前版本标识与初始查到的数据库中目标数据的第一版本标识进行比对,若当前版本标识等于初始查到的数据库中目标数据的第一版本标识,则同意对数据库中的目标数据进行更新,否则认为是过期数据,确定对数据库中的目标数据更新失败,则结束后续的数据更新过程。
S204、在所述数据库更新完毕后,根据所述数据库中更新后的目标数据以及更新后的第一版本标识,更新所述第二数据中的目标数据以及所述第三版本标识。
在本实施例中,在数据库完成对目标数据以及第一版本标识的更新后,根据数据库中更新后的目标数据以及更新后的第一版本标识,更新所述第二数据中的目标数据以及第三版本标识,使第二数据中的目标数据以及第三版本标识与数据库中更新后的目标数据以及更新后的第一版本标识保证一致。通过上述过程可使得更新后缓存和数据库中的目标数据逻辑上保证强一致性,也即上述过程如果能够成功执行完毕,则缓存和数据库中的目标数据可以保证强一致性;当然也可能存在更新第二数据失败的情况发生,可通过下述实施例重新更新第二数据中的目标数据以及第三版本标识,以使重新更新后缓存和数据库中的目标数据可以保证强一致性。
本实施例提供的数据更新方法,通过在接收对目标数据的更新请求后,根据更新请求查询目标数据在数据库中的第一版本标识、以及在缓存的第一数据中的第二版本标识;根据第一版本标识和第二版本标识将第二版本标识更新为目标版本标识;根据目标版本标识更新数据库中的目标数据以及第一版本标识;在数据库更新完毕后根据数据库中更新后的目标数据以及更新后的第一版本标识更新缓存的第二数据中的目标数据以及第三版本标识。本实施例中采用缓存的第一数据中更新后的版本标识来对数据库中目标数据和第一版本标识进行更新,数据库中目标数据和第一版本标识更新后又推动缓存的第二数据中目标数据与第三版本标识的更新,从而使得更新后缓存和数据库中的目标数据逻辑上保证强一致性,从而在访问数据时可以读取到最新正确的数据。
在上述任一实施例的基础上,在S203更新所述数据库中的目标数据以及所述第一版本标识时,可生成所述数据库的更新日志文件,其中在更新日志文件中可记录数据库所更新的具体内容,可选的,可包括数据库所更新的目标数据以及第一版本标识。作为一种示例,本实施例中数据库可采用MySQL数据库,更新日志文件可以为MySQL binlog文件,MySQLbinlog文件是以二进制格式记录MySQL数据库修改记录的日志文件。
进一步的,本实施例中可以在采用发布/订阅模式,订阅所述更新日志文件,如图3所示,所述方法还包括:
S301、在所述更新日志文件发布消息时,根据所述更新日志文件比较当前的第三版本标识和第二版本标识;
S302、若当前的第三版本标识旧于第二版本标识,则根据所述更新日志文件,更新所述第二数据中的目标数据以及所述第三版本标识。
在本实施例中,在更新第二数据中的目标数据以及第三版本标识时,可能存在一些更新失败的情况,例如设备故障、网络故障等等,可能导致第二数据中的目标数据以及第三版本标识并未更新成功,缓存的第一数据中的第二版本标识以及数据库中目标数据的第一版本标识可能已更新至目标版本标识,而第二数据中的第三版本标识可能未更新至目标版本标识。因此,为了避免上述情况造成缓存和数据库中的目标数据不一致,本实施例增加了补偿机制,在更新日志文件发布消息时,可在对该消息进行消费时,比较当前第三版本标识和当前的第二版本标识,若当前的第三版本标识旧于当前的第二版本标识,则基于更新日志文件,更新第二数据中的目标数据以及第三版本标识。
需要说明的是,所述更新日志文件发布消息与S204存在并行,大部分情况时S204早于所述更新日志文件发布消息(也即大部分情况S204早于数据库更新所述更新日志文件),而在所述更新日志文件发布消息后,对该消息进行消费,若当前的第三版本标识旧于第二版本标识,则证明S204更新第二数据失败,此时根据更新日志文件,重新更新第二数据中的目标数据以及第三版本标识,保证目标数据逻辑上保证强一致性。此外,还需要说明的是,若S204更新第二数据失败时,并不是基于数据库中的目标数据以及第一版本标识更新第二数据中的目标数据以及第三版本标识,是考虑到该更新过程中数据库中的目标数据可能处于下一个更新周期中,也可能存在再次导致第二数据更新失败的情况发生。
但极端情况下,所述更新日志文件发布消息可能早于S204,则此时可能会先根据所述更新日志文件,更新所述第二数据中的目标数据以及所述第三版本标识,而S204在后执行,执行时确定更新失败,但是仍能保证目标数据逻辑上保证强一致性。
在另一种可选实施例中,若所述第二数据中的目标数据以及所述第三版本标识更新失败,或者在从所述缓存查询目标数据时确定所述第三版本标识旧于所述第二版本标识,则根据所述数据库的更新日志文件,重新更新所述第二数据中的目标数据以及所述第三版本标识。
在本实施例中,可以不采用发布/订阅模式订阅所述更新日志文件,也即不需要在更新日志文件发布消息后才判断第二数据是否更新失败,而是在任意情况下检测到S204更新第二数据失败,或者在从缓存查询目标数据时确定第三版本标识旧于第二版本标识,可根据述数据库的更新日志文件,重新更新所述第二数据中的目标数据以及所述第三版本标识。
在上述任一实施例的基础上,如图4所示,所述方法还包括:
S401、接收对所述目标数据的查询请求,并根据所述查询请求在所述缓存中查询所述目标数据在所述第一数据中的第二版本标识与所述第二数据中的第三版本标识是否相等;
若所述第二版本标识与所述第三版本标识相等,则执行S402,否则,执行S403。
S402、若所述第二版本标识与所述第三版本标识相等,则从所述第二数据中获取所述目标数据;或者
S403、若所述第二版本标识与所述第三版本标识不相等,则从所述数据库中获取所述目标数据。
在本实施例中,在接收到对目标数据的查询请求时,说明需要访问目标数据,此时可在缓存中查询目标数据在第一数据中的第二版本标识是否与第二数据中的第三版本标识相等,若相等,则说明缓存与数据库中的目标数据强一致,直接从缓存的第二数据中获取目标数据;若不相等,则说明缓存与数据库中的目标数据不一致,直接从数据库中获取目标数据,需要说明的是,本实施例中可不基于数据库对缓存的第二数据进行回填,而是通过上述实施例中基于数据库的更新日志文件,重新更新第二数据中的目标数据以及第三版本标识,或者,也可通过上述实施例中的S204实现更新第二数据中的目标数据以及第三版本标识,使得缓存与数据库保证强一致性。
在上述任一实施例的基础上,本实施例中的缓存可采用分布式缓存,解决大访问量场景下数据库性能瓶颈问题,引入的基于内存的应用程序服务,比如互联网公司中广泛应用的Redis、Memcached等,保证缓存的高吞吐量。此外,上述的方法流程可基于Lua脚本语言实现,保证操作事务完整性。
图5为本发明实施例提供的数据更新方法流程图。在上述实施例的基础上,本实施例提供了一种数据更新方法,本实施例中的数据更新方法具体步骤如下:
S501、接收对目标数据的更新请求;
S502、查询所述目标数据在数据库中的第一版本标识、以及在第一数据中的第二版本标识;
S503、根据所述第一版本标识和所述第二版本标识,判断第二版本标识与所述第一版本标识是否相等、以及所述第二版本标识是否等于所述目标版本标识;
S504、若第二版本标识与所述第一版本标识相等,则将所述第二版本标识更新为所述目标版本标识,或者若所述第二版本标识与所述第一版本标识不相等、且所述第二版本标识等于所述目标版本标识,确定所述第二版本标识更新成功;
S505、若所述第二版本标识与所述第一版本标识不相等,且所述第二版本标识不等于所述目标版本标识,则确定更新失败,返回更新失败消息;
在S504第二版本标识更新成功后,还包括:
S506、根据所述目标版本标识,更新所述数据库中的目标数据以及所述第一版本标识;
S507、数据库更新成功,根据所述数据库中更新后的目标数据以及更新后的第一版本标识,更新所述第二数据中的目标数据以及所述第三版本标识;
S508、数据库更新失败,返回更新失败消息。
本发明实施例提供的数据更新方法的具体实现方式和技术效果可参见上述实施例,此处不再赘述。
图6为本发明实施例的数据更新装置的结构图。本实施例提供的数据更新装置可以执行方法实施例提供的处理流程,数据库中存储有目标数据及对应的第一版本标识,缓存中存储有第一数据和第二数据,所述第一数据包括所述目标数据在所述缓存中的第二版本标识,所述第二数据包括所述目标数据及所述目标数据在所述缓存中的第三版本标识;如图6所示,所述数据更新装置600包括接收模块601、查询模块602、缓存更新模块603、数据库更新模块604。
接收模块601,用于接收对目标数据的更新请求;
查询模块602,用于根据所述更新请求查询所述目标数据在所述数据库中的第一版本标识、以及在所述第一数据中的第二版本标识;
缓存更新模块603,用于根据所述第一版本标识和所述第二版本标识,将所述第二版本标识更新为目标版本标识;
数据库更新模块604,用于根据所述目标版本标识,更新所述数据库中的目标数据以及所述第一版本标识;
所述缓存更新模块603还用于,在所述数据库更新完毕后,根据所述数据库中更新后的目标数据以及更新后的第一版本标识,更新所述第二数据中的目标数据以及所述第三版本标识。
在上述实施例的基础上,
所述缓存更新模块603在根据所述第一版本标识和所述第二版本标识,将所述第二版本标识更新为目标版本标识时,用于:
若所述第二版本标识与所述第一版本标识相等,则将所述第二版本标识更新为所述目标版本标识;或者
若所述第二版本标识与所述第一版本标识不相等,且所述第二版本标识等于所述目标版本标识,则直接确定所述第二版本标识更新成功;或者
若所述第二版本标识与所述第一版本标识不相等,且所述第二版本标识不等于所述目标版本标识,则确定所述第二版本标识更新失败,结束后续的数据更新过程。
在上述任一实施例的基础上,所述数据库更新模块604在根据所述目标版本标识,更新所述数据库中的目标数据以及所述第一版本标识时,用于:
采用数据库乐观锁机制,将所述数据库中的目标数据更新为所述目标版本标识对应的数据,将所述第一版本标识更新为所述目标版本标识。
在上述任一实施例的基础上,所述数据库更新模块604还用于:
若采用数据库乐观锁机制对所述数据库中的目标数据更新失败,则结束后续的数据更新过程。
在上述任一实施例的基础上,所述数据库更新模块604还用于,在更新所述数据库中的目标数据以及所述第一版本标识时,生成所述数据库的更新日志文件;
所述缓存更新模块603还用于,采用发布/订阅模式,订阅所述更新日志文件,并在所述更新日志文件发布消息时,根据所述更新日志文件比较当前的第三版本标识和第二版本标识;
若当前的第三版本标识旧于第二版本标识,则根据所述更新日志文件,更新所述第二数据中的目标数据以及所述第三版本标识。
在上述任一实施例的基础上,所述数据库更新模块604还用于,在更新所述数据库中的目标数据以及所述第一版本标识时,生成所述数据库的更新日志文件;
所述缓存更新模块603还用于,若所述第二数据中的目标数据以及所述第三版本标识更新失败,或者在从所述缓存查询目标数据时确定所述第三版本标识旧于所述第二版本标识,则根据所述数据库的更新日志文件,重新更新所述第二数据中的目标数据以及所述第三版本标识。
在上述任一实施例的基础上,所述装置还包括数据访问模块,用于:
接收对所述目标数据的查询请求,并根据所述查询请求在所述缓存中查询所述目标数据在所述第一数据中的第二版本标识与所述第二数据中的第三版本标识是否相等;
若所述第二版本标识与所述第三版本标识相等,则从所述第二数据中获取所述目标数据;或者
若所述第二版本标识与所述第三版本标识不相等,则从所述数据库中获取所述目标数据。
本发明实施例提供的数据更新装置可以具体用于执行上述图2-5所提供的方法实施例,具体功能此处不再赘述。
本发明实施例提供的数据更新装置,通过在接收对目标数据的更新请求后,根据更新请求查询目标数据在数据库中的第一版本标识、以及在缓存的第一数据中的第二版本标识;根据第一版本标识和第二版本标识将第二版本标识更新为目标版本标识;根据目标版本标识更新数据库中的目标数据以及第一版本标识;在数据库更新完毕后根据数据库中更新后的目标数据以及更新后的第一版本标识更新缓存的第二数据中的目标数据以及第三版本标识。本实施例中采用缓存的第一数据中更新后的版本标识来对数据库中目标数据和第一版本标识进行更新,数据库中目标数据和第一版本标识更新后又推动缓存的第二数据中目标数据与第三版本标识的更新,从而使得更新后缓存和数据库中的目标数据逻辑上保证强一致性,从而在访问数据时可以读取到最新正确的数据。
图7为本发明实施例提供的电子设备的结构示意图。本发明实施例提供的电子设备可以执行数据更新方法实施例提供的处理流程,如图7所示,电子设备70包括数据库71、缓存72、用于存储指令的存储器73、至少一个处理器74;其中,数据库71用于存储目标数据及对应的第一版本标识;缓存72用于存储第一数据和第二数据,所述第一数据包括所述目标数据在所述缓存72中的第二版本标识,所述第二数据包括所述目标数据及所述目标数据在所述缓存72中的第三版本标识;计算机程序(指令)存储在存储器73中,并被配置为由处理器74执行以上实施例所述的数据更新方法。此外,电子设备70还可具有通讯接口75,用于接收控制指令。需要说明的是,存储器73也可数据库71或者缓存72集成在一起。
图7所示实施例的电子设备可用于执行上述数据更新方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
另外,本实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行以实现上述实施例所述的区块链的区块处理方法。
在本发明实施例所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明实施例各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明实施例各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
最后应说明的是:以上各实施例仅用以说明本发明实施例的技术方案,而非对其限制;尽管参照前述各实施例对本发明实施例进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例各实施例技术方案的范围。
Claims (16)
1.一种数据更新方法,其特征在于,数据库中存储有目标数据及对应的第一版本标识,缓存中存储有第一数据和第二数据,所述第一数据包括所述目标数据在所述缓存中的第二版本标识,所述第二数据包括所述目标数据及所述目标数据在所述缓存中的第三版本标识;所述方法包括:
接收对目标数据的更新请求,并根据所述更新请求查询所述目标数据在所述数据库中的第一版本标识、以及在所述第一数据中的第二版本标识;
根据所述第一版本标识和所述第二版本标识,将所述第二版本标识更新为目标版本标识;
根据所述目标版本标识,更新所述数据库中的目标数据以及所述第一版本标识;
在所述数据库更新完毕后,根据所述数据库中更新后的目标数据以及更新后的第一版本标识,更新所述第二数据中的目标数据以及所述第三版本标识。
2.根据权利要求1所述的方法,其特征在于,所述根据所述第一版本标识和所述第二版本标识,将所述第二版本标识更新为目标版本标识,包括:
若所述第二版本标识与所述第一版本标识相等,则将所述第二版本标识更新为所述目标版本标识;或者
若所述第二版本标识与所述第一版本标识不相等,且所述第二版本标识等于所述目标版本标识,则直接确定所述第二版本标识更新成功;或者
若所述第二版本标识与所述第一版本标识不相等,且所述第二版本标识不等于所述目标版本标识,则确定所述第二版本标识更新失败,结束后续的数据更新过程。
3.根据权利要求1所述的方法,其特征在于,所述根据所述目标版本标识,更新所述数据库中的目标数据以及所述第一版本标识,包括:
采用数据库乐观锁机制,将所述数据库中的目标数据更新为所述目标版本标识对应的数据,将所述第一版本标识更新为所述目标版本标识。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
若采用数据库乐观锁机制对所述数据库中的目标数据更新失败,则结束后续的数据更新过程。
5.根据权利要求1-4任一项所述的方法,其特征在于,还包括:
在更新所述数据库中的目标数据以及所述第一版本标识时,生成所述数据库的更新日志文件;
采用发布/订阅模式,订阅所述更新日志文件,并在所述更新日志文件发布消息时,根据所述更新日志文件比较当前的第三版本标识和第二版本标识;
若当前的第三版本标识旧于第二版本标识,则根据所述更新日志文件,更新所述第二数据中的目标数据以及所述第三版本标识。
6.根据权利要求1-4任一项所述的方法,其特征在于,所述方法还包括:
在更新所述数据库中的目标数据以及所述第一版本标识时,生成所述数据库的更新日志文件;
若所述第二数据中的目标数据以及所述第三版本标识更新失败,或者在从所述缓存查询目标数据时确定所述第三版本标识旧于所述第二版本标识,则根据所述数据库的更新日志文件,重新更新所述第二数据中的目标数据以及所述第三版本标识。
7.根据权利要求1-4任一项所述的方法,其特征在于,所述方法还包括:
接收对所述目标数据的查询请求,并根据所述查询请求在所述缓存中查询所述目标数据在所述第一数据中的第二版本标识与所述第二数据中的第三版本标识是否相等;
若所述第二版本标识与所述第三版本标识相等,则从所述第二数据中获取所述目标数据;或者
若所述第二版本标识与所述第三版本标识不相等,则从所述数据库中获取所述目标数据。
8.一种数据更新装置,其特征在于,数据库中存储有目标数据及对应的第一版本标识,缓存中存储有第一数据和第二数据,所述第一数据包括所述目标数据在所述缓存中的第二版本标识,所述第二数据包括所述目标数据及所述目标数据在所述缓存中的第三版本标识;所述装置包括:
接收模块,用于接收对目标数据的更新请求;
查询模块,用于根据所述更新请求查询所述目标数据在所述数据库中的第一版本标识、以及在所述第一数据中的第二版本标识;
缓存更新模块,用于根据所述第一版本标识和所述第二版本标识,将所述第二版本标识更新为目标版本标识;
数据库更新模块,用于根据所述目标版本标识,更新所述数据库中的目标数据以及所述第一版本标识;
所述缓存更新模块还用于,在所述数据库更新完毕后,根据所述数据库中更新后的目标数据以及更新后的第一版本标识,更新所述第二数据中的目标数据以及所述第三版本标识。
9.根据权利要求8所述的装置,其特征在于,
所述缓存更新模块在根据所述第一版本标识和所述第二版本标识,将所述第二版本标识更新为目标版本标识时,用于:
若所述第二版本标识与所述第一版本标识相等,则将所述第二版本标识更新为所述目标版本标识;或者
若所述第二版本标识与所述第一版本标识不相等,且所述第二版本标识等于所述目标版本标识,则直接确定所述第二版本标识更新成功;或者
若所述第二版本标识与所述第一版本标识不相等,且所述第二版本标识不等于所述目标版本标识,则确定所述第二版本标识更新失败,结束后续的数据更新过程。
10.根据权利要求8所述的装置,其特征在于,所述数据库更新模块在根据所述目标版本标识,更新所述数据库中的目标数据以及所述第一版本标识时,用于:
采用数据库乐观锁机制,将所述数据库中的目标数据更新为所述目标版本标识对应的数据,将所述第一版本标识更新为所述目标版本标识。
11.根据权利要求10所述的装置,其特征在于,所述数据库更新模块还用于:
若采用数据库乐观锁机制对所述数据库中的目标数据更新失败,则结束后续的数据更新过程。
12.根据权利要求8-11任一项所述的装置,其特征在于,
所述数据库更新模块还用于,在更新所述数据库中的目标数据以及所述第一版本标识时,生成所述数据库的更新日志文件;
所述缓存更新模块还用于,采用发布/订阅模式,订阅所述更新日志文件,并在所述更新日志文件发布消息时,根据所述更新日志文件比较当前的第三版本标识和第二版本标识;
若当前的第三版本标识旧于第二版本标识,则根据所述更新日志文件,更新所述第二数据中的目标数据以及所述第三版本标识。
13.根据权利要求8-11任一项所述的装置,其特征在于,
所述数据库更新模块还用于,在更新所述数据库中的目标数据以及所述第一版本标识时,生成所述数据库的更新日志文件;
所述缓存更新模块还用于,若所述第二数据中的目标数据以及所述第三版本标识更新失败,或者在从所述缓存查询目标数据时确定所述第三版本标识旧于所述第二版本标识,则根据所述数据库的更新日志文件,重新更新所述第二数据中的目标数据以及所述第三版本标识。
14.根据权利要求8-11任一项所述的装置,其特征在于,所述装置还包括数据访问模块,用于:
接收对所述目标数据的查询请求,并根据所述查询请求在所述缓存中查询所述目标数据在所述第一数据中的第二版本标识与所述第二数据中的第三版本标识是否相等;
若所述第二版本标识与所述第三版本标识相等,则从所述第二数据中获取所述目标数据;或者
若所述第二版本标识与所述第三版本标识不相等,则从所述数据库中获取所述目标数据。
15.一种电子设备,其特征在于,包括:数据库;缓存;至少一个处理器;以及用于存储指令的存储器;
所述数据库用于存储目标数据及对应的第一版本标识;
所述缓存用于存储第一数据和第二数据,所述第一数据包括所述目标数据在所述缓存中的第二版本标识,所述第二数据包括所述目标数据及所述目标数据在所述缓存中的第三版本标识;
所述存储器用于存储计算机执行指令;
所述至少一个处理器用于执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如权利要求1-7任一项所述的方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如权利要求1-7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011245395.3A CN113779052A (zh) | 2020-11-10 | 2020-11-10 | 数据更新方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011245395.3A CN113779052A (zh) | 2020-11-10 | 2020-11-10 | 数据更新方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113779052A true CN113779052A (zh) | 2021-12-10 |
Family
ID=78835295
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011245395.3A Pending CN113779052A (zh) | 2020-11-10 | 2020-11-10 | 数据更新方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113779052A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114253988A (zh) * | 2022-03-01 | 2022-03-29 | 维塔科技(北京)有限公司 | 基于版本的数据更新方法、装置、电子设备及存储介质 |
-
2020
- 2020-11-10 CN CN202011245395.3A patent/CN113779052A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114253988A (zh) * | 2022-03-01 | 2022-03-29 | 维塔科技(北京)有限公司 | 基于版本的数据更新方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10936578B2 (en) | Client-driven commit of distributed write transactions in a database environment | |
CN111464615B (zh) | 请求处理方法、装置、服务器及存储介质 | |
US20170351667A1 (en) | Transaction processing method, processing node, central node, and cluster | |
US10275347B2 (en) | System, method and computer program product for managing caches | |
CN112084258A (zh) | 一种数据同步方法和装置 | |
CN105260136A (zh) | 数据读写方法及分布式存储系统 | |
CN111414389B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
US9864684B2 (en) | Performing efficient cache invalidation | |
US9928174B1 (en) | Consistent caching | |
CN111200634B (zh) | 缓存资源联动更新方法、系统及服务器 | |
CN112307119A (zh) | 数据同步方法、装置、设备及存储介质 | |
CN111125040A (zh) | 管理重做日志的方法、装置及存储介质 | |
CN113220669A (zh) | 业务数据的处理方法、装置及电子设备 | |
CN113010549A (zh) | 基于异地多活系统的数据处理方法、相关设备及存储介质 | |
US11741081B2 (en) | Method and system for data handling | |
CN113342507B (zh) | 一种分布式锁服务实现方法、装置及计算机设备 | |
CN113779052A (zh) | 数据更新方法、装置、设备及存储介质 | |
CN115470026A (zh) | 数据缓存及缓存容灾方法和系统、缓存系统 | |
CN107967265B (zh) | 文件的访问方法、数据服务器和文件访问系统 | |
US11138231B2 (en) | Method and system for data handling | |
CN111930528A (zh) | 消息中间件的消息写入方法、装置、设备及可读存储介质 | |
US10685014B1 (en) | Method of sharing read-only data pages among transactions in a database management system | |
CN115510161A (zh) | 数据同步方法、装置、设备及存储介质 | |
CN108475211B (zh) | 无状态系统和用于获得资源的系统 | |
CN113542326B (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 |