CN111984421B - 数据处理方法、装置及存储介质 - Google Patents
数据处理方法、装置及存储介质 Download PDFInfo
- Publication number
- CN111984421B CN111984421B CN202010913919.5A CN202010913919A CN111984421B CN 111984421 B CN111984421 B CN 111984421B CN 202010913919 A CN202010913919 A CN 202010913919A CN 111984421 B CN111984421 B CN 111984421B
- Authority
- CN
- China
- Prior art keywords
- block
- thread
- blocks
- write
- tasks
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及区块链技术领域,尤其涉及一种数据处理方法、装置及存储介质,应用于服务器,所述方法包括:将数据库的读写分离,分别分为读集数据库和写集数据库,并引入缓存的概念;进而,在上述每一线程运行时,可对应访问不同的区间,实现了多线程的数据库访问,有利于减少数据库的访问压力;同时,在进行MVCC验证时,可直接访问上述缓存,不用频繁访问数据库,有利于提高MVCC的验证效率;此外,上述操作仅涉及CPU操作,有利于提高区块链的性能。
Description
技术领域
本申请涉及区块链技术领域,具体涉及一种数据处理方法、装置及存储介质。
背景技术
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。在区块链应用中,当通过多版本并发控制(Multi-Version ConcurrencyControl,MVCC)实现并发验证时,往往需要多次读取或者写入数据库,造成数据库的访问压力过大,进而导致MVCC验证效率低。
发明内容
本申请实施例提供一种数据处理方法、装置及存储介质,有利于提高MVCC的验证效率。
本申请实施例第一方面提供了一种数据处理方法,应用于服务器,包括:
向第一线程发送第一信息指令,所述第一信息指令用于指示所述第一线程若从读集数据库中读取到第M个区块对应的数据集,则执行通过第一队列以所述第M个区块之前的N个区块对应的数据集生成N个第一任务,其中,所述N为小于或等于M的正整数,所述M为正整数;
若确定第二线程的当前任务为获取通过所述第一队列将所述N个区块之前的P个区块对应的数据集生成的P个第一任务时,则执行向所述第二线程发送第二信息指令,所述第二信息指令用于指示所述第二线程对所述P个区块进行MVCC验证;并指示所述第二线程将所述P个区块对应的数据集分别写入到写集缓存中,并生成P个写入事件;并将所述P个写入事件同步到第二队列中,生成P个第三任务,其中,P是小于或等于N的正整数;
若确定第三线程的当前任务为通过写集数据库获取所述第二队列中的Q个第三任务时,则执行向所述第三线程发送第三信息指令,所述第三信息指令用于指示第三线程执行所述Q个第三任务,并获取所述写集缓存中的当前BlockID;当所述Q个第三任务中任意一个第三任务执行完成时,则执行更新所述当前BolckID为所述任意一个第三任务的区块对应的BlockID,其中,Q是小于或等于P的正整数,所述Q个第三任务对应于P个区块之前的Q个区块,每一第三任务对应一个区块。
本申请实施例第二方面提供了一种数据处理装置,应用于服务器,所述装置包括:第一发送单元、第二发送单元和第三发送单元,其中,
所述第一发送单元,用于向第一线程发送第一信息指令,所述第一信息指令用于指示所述第一线程若从读集数据库中读取到第M个区块对应的数据集,则执行通过第一队列以所述第M个区块之前的N个区块对应的数据集生成N个第一任务,其中,所述N为小于或等于M的正整数,所述M为正整数;
所述第二发送单元,用于若确定第二线程的当前任务为获取通过所述第一队列将所述N个区块之前的P个区块对应的数据集生成的P个第一任务时,则执行向所述第二线程发送第二信息指令,所述第二信息指令用于指示所述第二线程对所述P个区块进行MVCC验证;并指示所述第二线程将所述P个区块对应的数据集分别写入到写集缓存中,并生成P个写入事件;并将所述P个写入事件同步到第二队列中,生成P个第三任务,其中,P是小于或等于N的正整数;
所述第三发送单元,用于若确定第三线程的当前任务为通过写集数据库获取所述第二队列中的Q个第三任务时,则执行向所述第三线程发送第三信息指令,所述第三信息指令用于指示第三线程执行所述Q个第三任务,并获取所述写集缓存中的当前BlockID;当所述Q个第三任务中任意一个第三任务执行完成时,则执行更新所述当前BolckID为所述任意一个第三任务的区块对应的BlockID,其中,Q是小于或等于P的正整数,所述Q个第三任务对应于P个区块之前的Q个区块,每一第三任务对应一个区块。
本申请实施例的第三方面提供一种服务器,所述服务器包括处理器、通信接口、存储器以及一个或多个程序,所述处理器、通信接口和存储器相互连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行本申请实施例第一方面所述的方法。
本申请实施例的第四方面提供了一种计算机可读存储介质,其中,上述计算机可读存储介质存储用于电子数据交换的计算机程序,其中,上述计算机程序使得计算机执行如本申请实施例第一方面所描述的部分或全部步骤。
本申请实施例的第五方面提供了一种计算机程序产品,其中,上述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,上述计算机程序可操作来使计算机执行如本申请实施例第一方面所描述的部分或全部步骤。该计算机程序产品可以为一个软件安装包。
实施本申请实施例,至少具有如下有益效果:可向第一线程发送第一信息指令,第一信息指令用于指示第一线程若从读集数据库中读取到第M个区块对应的数据集,则执行通过第一队列以第M个区块之前的N个区块对应的数据集生成N个第一任务,其中,N为小于或等于M的正整数,M为正整数;若确定第二线程的当前任务为获取通过第一队列将N个区块之前的P个区块对应的数据集生成的P个第一任务时,则执行向第二线程发送第二信息指令,第二信息指令用于指示第二线程对P个区块进行MVCC验证;并指示第二线程将P个区块对应的数据集分别写入到写集缓存中,并生成P个写入事件;并将P个写入事件同步到第二队列中,生成P个第三任务,其中,P是小于或等于N的正整数;若确定第三线程的当前任务为通过写集数据库获取第二队列中的Q个第三任务时,则执行向第三线程发送第三信息指令,第三信息指令用于指示第三线程执行Q个第三任务,并获取写集缓存中的当前BlockID;当Q个第三任务中任意一个第三任务执行完成时,则执行更新当前BolckID为任意一个第三任务的区块对应的BlockID,其中,Q是小于或等于P的正整数,Q个第三任务对应于P个区块之前的Q个区块,每一第三任务对应一个区块。如此,可将数据库的读写分离,分别分为读集数据库和写集数据库,并引入缓存的概念;进而,在上述每一线程运行时,可对应访问不同的区间,实现了多线程的数据库访问,有利于减少数据库的访问压力;同时,在进行MVCC验证时,可直接访问上述缓存,不用频繁访问数据库,有利于提高MVCC的验证效率;此外,上述操作仅涉及CPU操作,有利于提高区块链的性能。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1A为本申请实施例提供了一种数据处理的***架构示意图;
图1B为本申请实施例提供了一种数据处理方法的流程示意图;
图2为本申请实施例提供了一种数据处理方法的流程示意图;
图3为本申请实施例提供了一种数据处理方法的流程示意图;
图4为本申请实施例提供了一种服务器的结构示意图;
图5为本申请实施例提供了一种数据处理装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、***、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
在本申请中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本申请所描述的实施例可以与其它实施例相结合。
为了能够更好地理解本申请实施例,下面将对应用本申请实施例的方法进行介绍。
本申请实施例中提到的服务器可以包括但不限于后台服务器、组件服务器、云端服务器、数据处理***服务器或数据处理软件服务器等,上述仅是举例,而非穷举,包含但不限于上述装置。
请参见图1A,图1A是本申请实施例提供的一种数据处理的***架构示意图。
其中,本申请实施例应用于服务器,该服务器中可部署区块链网络,区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。
其中,本申请实施例具体可应用于FiMax区块链平台中,该FiMax区块链平台是一种以S3C为基础框架组成的区块链网络,该S3C是由区块链解决方案模块、区块链内核模块、区块链隐私保护模块和区块链网络管理模块组成的框架***。
其中,上述***架构中可包括:读集数据库、写集数据库、第一队列、第二队列、写集缓存和多版本并发控制(Multi-Version Concurrency Control,MVCC)模块。
其中,上述MVCC模块用于区块中交易信息的版本验证,上述区块可为区块链网络中的基本单元结构,每个区块由区块头和区块体组成;其中,区块头存储结构化的数据,区块体一般为树状结构,用于记录区块的交易信息;而上述MVCC模块主要用于验证上述交易信息中对应的数据版本是否正确,如果当前交易的使用的读集版本和当前数据库中的读集版本不相等,则认为交易已经过时,并标记为错误的交易。
此外,在本申请实施例中,可将数据库中的读写部分分开,并通过多线程(2个或2个以上的线程)去访问数据库,将在数据库中的写集数据存储于写集缓存中,在做上述MVCC版本验证时,可直接访问写集缓存,不需要等待数据库写缓存,有利于提高数据库的写入性能,避免写入时的数据阻塞。
其中,上述数据处理方法可对应有3个线程,上述读集数据库用于完成第一线程的任务,上述MVCC模块用于完成第二线程的任务,上述写集数据库用于完成第三线程的任务,并且,上述三个线程可同时进行,可同步处理多个区块中的数据,如此,上述读集和写集的相关操作可理解为IO操作,将上述数据库进行读写分离以后,上述MVCC验证可由CPU完成,通过分成3个线程去同步进行上述操作,从而实现将IO操作与CPU操作进行分离,有利于提高区块链网络的性能。
请参见图1B,图1B是本申请实施例提供的一种数据处理方法的流程示意图,应用于服务器,上述方法包括以下步骤:
101、向第一线程发送第一信息指令,所述第一信息指令用于指示所述第一线程若从读集数据库中读取到第M个区块对应的数据集,则执行通过第一队列以所述第M个区块之前的N个区块对应的数据集生成N个第一任务,其中,所述N为小于或等于M的正整数,所述M为正整数。
其中,上述读集数据库可对应于如图1A所示的***架构图中的读集数据库;可将用于存储区块中对应的信息的数据库拆分为读集数据库和写集数据库,以有利于后续不同线程在不同的时段访问,以缓解频繁访问同一数据库,以减少数据库的访问压力。
其中,上述第一信息指令可为用户自行设置或者***默认,在此不作限定;该第一信息指令用于指示第一线程从上述读集数据库中读取区块对应的数据集。
其中,上述第M个区块可为在某一时间段内上述第一线程需要对该区块进行MVCC验证的任意一个区块,可从读集数据库中读取该第M个区块对应的数据集,该数据集中可包括以下至少一项:BlockID、数据版本号、该BlockID对应的数据键值对和引用计数等等,在此不做限定,上述数据版本号可为该区块对应的数据库版本号。
其中,由于区块链网络中的区块是链式排列的,因此可对每一区块进行编号,每一BolckID可对应一个区块,该BolckID可从小到大排列,BolckID越小,则越被上述第一线程优先处理。例如,对于上述第M个区块来说,该BlockID可以为M,该BlockID用于标识该区块。
其中,上述第一线程工作的同时,第二线程、第三线程均可并行处理数据,上述第一线程、第二线程和第三线程可组合成一个数据处理流程,每一线程处理的区块可不同,但是处理步骤可相同,例如,针对7个区块来说,其对应的BlockID分别为:1、2、3、4、5、6、7;在第一时间段,若第一线程在处理区块6和区块7,此时,第二线程可同步或者并行处理区块3、区块4和区块5;而第三线程可同步或者并行处理区块1和区块2;且上述区块对应的BlockID越小,则越优先处理;即,在第一时间段的上一时间段内,第一线程在处理区块3、区块4和区块5,第二线程可能在同步处理区块2,第三线程可能在同步处理区块1;以此类推。
其中,上述第一线程读取区块对应的数据集以后,可将该区块置于第一队列中,该第一队列可用于存放上述区块,该第一队列可提供执行任务所需的功能,比如,结果的返回、任务的重试等等;例如,当第一队列接收到第一线程发送的区块以后,可向后续线程,即第二线程返回一个结果信息,以告知第二线程区块存放完成等信息,以便于第二线程实现后续功能,例如,可对区块进行MVCC验证等;每一区块被第一线程置于第一队列时,均可生成第一任务,每一区块可对应一个第一任务。
其中,由于上述第一线程在处理第M个区块时,第一线程和其他线程是同步工作的,且每一线程的处理速度可能不同,当第一线程在处理第M个区块时,此时第一队列中的区块全部为已由第一线程处理完成的区块,因此,第一队列此时存放有第M个区块之前的N个区块,该N个区块为第一线程处理完成以后发送到第一队列得到,N为小于或等于M的整数。
102、若确定第二线程的当前任务为获取通过所述第一队列将所述N个区块之前的P个区块对应的数据集生成的P个第一任务时,则执行向所述第二线程发送第二信息指令,所述第二信息指令用于指示所述第二线程对所述P个区块进行MVCC验证;并指示所述第二线程将所述P个区块对应的数据集分别写入到写集缓存中,并生成P个写入事件;并将所述P个写入事件同步到第二队列中,生成P个第三任务,其中,P是小于或等于N的正整数。
其中,上述多版本并发控制(Multi-Version Concurrency Control,MVCC)验证是一种并发控制的方法,用于验证上述区块中包括的交易数据的数据版本是否正确;即校验区块中交易的读集是否和当前数据库账本中的版本一致(即没有变化),如果没有改变,说明交易写集中对数据的修改有效,把该交易标注为有效,交易的写集更新到具体的数据库(如写集数据库)中。
其中,上述第二信息指令可为用户自行设置或者***默认,在此不作限定;服务器在检测到预设触发条件以后,可向第二线程发送上述第二信息指令,该第二信息指令用于指示第二线程对区块实现MVCC验证,上述预设触发条件可由用户自行设置或者***默认,在此不作限定;例如,当第二线程的当前任务为获取第一队列生成的第一任务时、或者当第一线程接收到第一信息指令时,同时也可触发第二线程开始运行以实现对应的功能。
其中,上述第二线程可直接从第一队列中获取区块,以对该区块进行MVCC验证,并在验证完成以后,写入到写集缓存中,该写集缓存可为用户自行设置或者***默认,在此不作限定;该写集缓存可用于存储区块对应的数据集等信息,此外,当区块验证成功或者验证失败以后,可生成验证结果,可将该验证结果写入写集数据库中,以记录针对该区块的验证结果。
其中,上述第二队列可为用户自行设置或者***默认,在此不作限定;该第二队列与上述第一队列的结构可相同,该第二队列可用于存放由第二线程验证完成的区块,并且可向写集缓存提供区块,具体实现中,第二队列可针对区块,生成其对应的第三任务,该第三任务用于向写集数据库告知上一线程处理完成,以向写集数据库提供区块对应的数据集等信息,以帮助写集数据库更新上述区块对应的数据集等信息。
其中,如图1A所示的MVCC模块可用于实现上述对P个区块进行MVCC验证,每一区块可打包有至少一个交易,每一交易对应有交易信息,在实现MVCC验证时,最小单位可为交易信息。
在一种可能的示例中,若所述区块A对应的引用计数不为0,还可包括如下步骤:在将所述区块A写入到所述写集缓存之前,若存在区块B的数据集与所述区块A的数据集相关联,则通过所述区块A将所述写集缓存中所述区块B的数据集中的引用计数加1,其中,所述区块B为在所述区块A之前写入所述写集缓存中的任意一个区块。
其中,在进行MVCC验证时,若当前处理的区块中的交易信息与之前处理过的区块的写集中打包的交易信息相关联,则之前处理的区块可对当前处理的区块产生影响;例如,若该当前区块中的一笔交易信息在进行MVCC验证时,可能需要使用之前处理的其他区块中的交易信息作为参考数据,以验证该目标区块的交易情况(例如:余额信息、消费信息等等);如此,在进行MVCC验证时,由于该区块相关联的其他区块可能会对其的MVCC验证的过程产生影响;因此,可在进行MVCC验证之前,对该当前区块与之前的多个区块进行关联性判断。
其中,可通过数据集中的引用计数实现数据关联性的判断,该引用计数用于判断写集缓存中是否存在与其对应的区块有关联数据的区块。
具体实现中,若第二线程在处理当前处理区块时,在第二线程进行MVCC验证或者第三线程处理的区块中存在任意一个区块对应的引用计数不为0,则表明该区块与当前处理的区块分别对应的数据集之间存在关联,则在MVCC验证时,可直接调用关联的区块中的数据集,以帮助当前处理的区块实现MVCC验证。
此外,上述区块A为P个区块中任意一个区块,若在上述针对区块A进行MVCC验证处理之后,在将区块A写入到写集缓存之前,若发现存在区块B的数据集与该区块A的数据集相关联,则该区块A可令区块B的引用计数加1,如此,可表示该区块A与区块B之间存在数据关联性,同时,在下一个流程在此进行MVCC验证的时候,该区块A即可通过该区块B的引用计数知道该区块B与其自身的数据集之间存在关联性;其中,区块B可为区块A之前的任意一个区块,在本申请实施例中,仅以其中两个区块为例进行说明。
可选地,对上述P个区块进行MVCC验证,可包括如下步骤:可基于每一区块对应的数据集,确定每一区块中每一交易信息对应的数据版本号,并将该数据版本号与预设数据版本号进行比较,若相同,则确定针对该区块的MVCC验证成功,反之,则确定针对该区块的MVCC验证失败;该区块可为上述P个区块中任意一个。
其中,该预设数据版本号可为可为用户自行设置或者***默认,在此不作限定。该预设版本号可为后台工作人员进行设置,例如,可为100或者200等,若针对一个交易进行MVCC验证成功,则表明该笔交易是有效的,则该交易对应的区块可存储到本地链中,且验证成功的对应的结果数据可由第二队列生成第三任务,以用于告知写集数据库验证成功,并被存储并更新到写集数据库中。
在一种可能的示例中,在对上述P个区块进行MVCC验证时,还可包括如下步骤:确定所述区块A在从所述读集数据库访问对应的数据集时,所述读集数据库的数据版本号为第一版本号;根据所述第一版本号,确定与所述区块A相关联的区块E,则将所述区块E的引用计数加1;对所述区块A进行所述MVCC验证;当所述区块A在进行MVCC验证完成时,则执行将所述区块E的引用计数减1。
其中,上述区块与区块之间的关联性可基于数据库版本号建立,可事先将有数据关联性的区块置于同一数据库中,或者将数据库版本号写入有数据关联性的多个区块中。
其中,上述第一版本号可为区块A对应的读集数据库所对应的数据版本号,可根据该数据版本号,确定其对应的相关联的区块E。
举例来说,上述区块与区块之间的关联性可基于数据库版本号建立,比如,BlockID为100的区块100在从数据库访问数据时,此时,数据库的版本号是60;那么,区块100可与数据库版本号61对应的区块61产生了关联。在后续步骤中,可令区块61的引用计数+1,只有等区块100完成上述MVCC验证以后,才可将区块61的引用计数-1,此时,也解除了区块100和区块61之间的关联性,即区块100与区块61之间没有关联性。
103、若确定第三线程的当前任务为通过写集数据库获取所述第二队列中的Q个第三任务时,则执行向所述第三线程发送第三信息指令,所述第三信息指令用于指示第三线程执行所述Q个第三任务,并获取所述写集缓存中的当前BlockID;当所述Q个第三任务中任意一个第三任务执行完成时,则执行更新所述当前BolckID为所述任意一个第三任务的区块对应的BlockID,其中,Q是小于或等于P的正整数,所述Q个第三任务对应于P个区块之前的Q个区块,每一第三任务对应一个区块。
其中,上述当前BolckID对应的区块为当前第三线程正在处理的区块对应的BlockID。
其中,当第二线程在处理上述P个区块时,第三线程可同步处理在P个区块对应的BlockID之前的Q个区块,该Q个区块是在上述P个区块之前被第二线程处理完成的一批区块。
其中,上述第三信息指令可由用户自行设置或者***默认,在此不作限定;当写集数据库获取上述第二队列中的Q个第三任务时,可触发服务器向第三线程发送上述第三信息指令。
其中,第三线程每处理完成一个区块,可将写集缓存中的当前BlockID更新为当前处理完成的区块对应的BlockID,以用于标识当前处理的区块号,并告知其他线程当前处理的区块,有利于保证整个线程的共同协作。
其中,当上述任意一个区块对应的第三任务执行完成,即任意一个区块对应的数据集被写入上述写集数据库以后,则可执行更新上述写集缓存中的当前BlockID。
在一种可能的示例中,所述数据集包括:引用计数,上述方法还可包括如下步骤:若所述区块A对应的引用计数不为0,则执行确定存在区块的数据集与所述区块A的数据集之间有关联,其中,所述区块A为所述P个区块中任意一个;若所述区块A对应的引用计数为0,则执行确定不存在区块的数据集与所述区块A的数据集之间有关联,则在更新所述当前BlockID为所述区块A的BlockID以后,将所述区块A对应的数据集从所述写集缓存中删除。
其中,上述数据集可包括以下至少一项:BlockID、版本号、该BlockID对应的数据键值对和引用计数等等,在此不做限定;上述BlockID可以理解为当前处于这一线程中进行数据处理的区块号,上述版本号可为数据库版本号。
具体实现中,在经过上述第二线程对区块A处理以后,其对应的引用计数可能发生过变化,如此,当进入第三线程以后,可对该区块A引用计数进行监测,若该引用计数为0,则表明在进行第二线程MVCC验证以后,可能存在其他区块与其的数据集之间有数据关联,则可保留该区块A;反之,若该区块A对应的引用计数为0,则表明不存在区块与该区块A的数据集之间有关联,又由于,一般情况下,每一区块中可能包含成千上万笔交易,其所需占用的内存空间可能较大,因此,为了节省缓存的内存空间,可在更新当前BlockID为该区块A的BlockID以后,可将该区块A对应的数据集从写集缓存中删除。
可选地,还可包括如下步骤:若在执行所述第一线程、所述第二线程或者所述第三线程的任务时触发缓存回收机制,则执行确定所述写集缓存中存在的多个区块和所述多个区块对应的多个引用计数,每一区块对应一个引用计数;若存在区块C对应的BlockID小于所述当前BolckID,且区块C对应的引用计数为0,则从所述写集缓存中删除所述区块C,其中,所述区块C为所述多个区块中任意一个区块。
其中,为了节约缓存中的内存空间,上述服务器中还可设置缓存回收机制,该缓存回收机制可由***默认或者用户自行设置,在此不作限定;当在任意一个线程,触发该缓存回收机制以后,则可确定写集缓存中所有的区块以及每一区块对应的引用计数,可通过引用计数,对写集缓存中存储的区块对应的数据集进行处理。
具体实现中,若存在上述区块C对应的BlockID小于当前BlockID,即表明该区块C是已完成上述三个线程的处理的,若该区块C的引用计数为0,则表明没有与该区块C的数据集相关联的区块,则可从上述写集缓存中删除该区块C,以节省写集缓存的内存空间,有利于提高后续从写集缓存中获取数据的效率。
在一个可能的示例中,还可包括如下步骤:若所述区块C的数据集与区块D对应的数据集相关联,则执行在删除所述区块C以后,将所述区块D对应的引用计数减1,所述区块C和所述区块D为所述写集缓存中任意两个区块。
其中,上述引用计数的加减实际为区块对区块的操作,例如,若区块C在MVCC验证时,发现区块D与该区块C的数据集之间有关联,则该区块C可令区块D对应的引用计数+1,如此,在后续流程时,该区块C可获取其他区块对应的引用计数,若不为0,则与其之间存在关联,若为0,则无关联,每一区块获取的其他区块的引用计数是相对于该区块的;又例如,若某一区块的引用计数为5,则可能存在5个区块与其有关联。
具体实现中,若该区块C的引用计数为0,但是区块D与该区块C的数据集相关联,也就是说,该区块C发现区块D与其之间的数据有关联,但是此时区块C在进行MVCC认证时,已经使用过该区块D对应的数据集,则在删除该区块C以后,可将区块D对应的引用计数减1。
可以看出,本申请实施例中所描述的数据处理方法,应用于服务器,可向第一线程发送第一信息指令,第一信息指令用于指示第一线程若从读集数据库中读取到第M个区块对应的数据集,则执行通过第一队列以第M个区块之前的N个区块对应的数据集生成N个第一任务,其中,N为小于或等于M的正整数,M为正整数;若确定第二线程的当前任务为获取通过第一队列将N个区块之前的P个区块对应的数据集生成的P个第一任务时,则执行向第二线程发送第二信息指令,第二信息指令用于指示第二线程对P个区块进行MVCC验证;并指示第二线程将P个区块对应的数据集分别写入到写集缓存中,并生成P个写入事件;并将P个写入事件同步到第二队列中,生成P个第三任务,其中,P是小于或等于N的正整数;若确定第三线程的当前任务为通过写集数据库获取第二队列中的Q个第三任务时,则执行向第三线程发送第三信息指令,第三信息指令用于指示第三线程执行Q个第三任务,并获取写集缓存中的当前BlockID;当Q个第三任务中任意一个第三任务执行完成时,则执行更新当前BolckID为任意一个第三任务的区块对应的BlockID,其中,Q是小于或等于P的正整数,Q个第三任务对应于P个区块之前的Q个区块,每一第三任务对应一个区块。如此,可将数据库的读写分离,分别分为读集数据库和写集数据库,并引入缓存的概念;进而,在上述每一线程运行时,可对应访问不同的区间,实现了多线程的数据库访问,有利于减少数据库的访问压力;同时,在进行MVCC验证时,可直接访问上述缓存,不用频繁访问数据库,有利于提高MVCC的验证效率;此外,上述操作仅涉及CPU操作,有利于提高区块链的性能。
与上述一致地,请参阅图2,图2是本申请实施例公开的一种数据处理方法的流程示例图,应用于服务器,其中,如图所示,可包括如图1A所示的读集数据库、写集缓存、第一队列、第二队列、MVCC模块和写集数据库。
其中,读集数据库中正在处理的为BolckID为66的区块66,同样的,写集缓存正在处理的为BolckID分别为57、58、59、60和61的区块57、区块58、区块59、区块60和区块61;第一队列正在处理的为BolckID分别为63、64和65的区块63、区块64和区块65;第二队列正在处理的为BolckID分别为59、61和61的区块59、区块60和区块61;MVCC模块正在处理的为BolckID为62的区块62;写集数据库正在处理的为BolckID为58的区块58.
其中,上述第一线程可从读集数据库读取到区块66对应的数据集,则执行通过第一队列以区块63、区块64和区块65分别对应的数据集生成3个第一任务;同时,第二线程可对区块62进行MVCC验证;此时,写集缓存中正在写入区块57、区块58、区块59、区块60和区块61分别对应的数据集,并生成5个写入事件,并同时将5个写入事件同步到第二队列中,生成5个第三任务,以告知第二队列此时正在写入的区块以及告知第二队列此时需要写入到写集数据库中的区块对应的数据集;同时,第三线程中,第二队列可放置有MVCC模块验证完成的区块59、区块60和区块61;此时,若区块58对应的第三任务执行完成,则可执行在写集数据库中写入该区块58对应的数据集,同时,可知,上一处理的区块为区块57,则更新当前BolckID(57)为区块58的BolckID,即为58。如此,将数据库的读写分离,分别分为读集数据库和写集数据库,并引入缓存的概念;进而,在上述每一线程运行时,每一线程可对应访问不同的区间,可实现多线程的数据库访问,有利于减少数据库的访问压力;同时,在进行MVCC验证时,可直接访问上述缓存以获取区块对应的数据集,不用频繁访问数据库,有利于提高MVCC的验证效率;此外,上述操作仅涉及CPU操作,有利于提高区块链的性能。
与上述一致地,请参阅图3,图3是本申请实施例公开的一种数据处理方法的流程示例图,应用于服务器,该数据处理方法可包括如下步骤:
301、向第一线程发送第一信息指令,所述第一信息指令用于指示所述第一线程若从读集数据库中读取到第M个区块对应的数据集,则执行通过第一队列以所述第M个区块之前的N个区块对应的数据集生成N个第一任务。
302、若确定第二线程的当前任务为获取通过所述第一队列将所述N个区块之前的P个区块对应的数据集生成的P个第一任务时,则执行向所述第二线程发送第二信息指令,所述第二信息指令用于指示所述第二线程对所述P个区块进行MVCC验证;并指示所述第二线程将所述P个区块对应的数据集分别写入到写集缓存中,并生成P个写入事件;并将所述P个写入事件同步到第二队列中,生成P个第三任务,其中,P是小于或等于N的正整数。
303、若确定第三线程的当前任务为通过写集数据库获取所述第二队列中的Q个第三任务时,则执行向所述第三线程发送第三信息指令,所述第三信息指令用于指示第三线程执行所述Q个第三任务,并获取所述写集缓存中的当前BlockID;当所述Q个第三任务中任意一个第三任务执行完成时,则执行更新所述当前BolckID为所述任意一个第三任务的区块对应的BlockID,其中,Q是小于或等于P的正整数,所述Q个第三任务对应于P个区块之前的Q个区块,每一第三任务对应一个区块。
304、若在执行所述第一线程、所述第二线程或者所述第三线程的任务时触发缓存回收机制,则执行确定所述写集缓存中存在的多个区块和所述多个区块对应的多个引用计数,每一区块对应一个引用计数。
305、若存在区块C对应的BlockID小于所述当前BolckID,且区块C对应的引用计数为0,则从所述写集缓存中删除所述区块C,其中,所述区块C为所述多个区块中任意一个区块。
306、若所述区块C的数据集与区块D对应的数据集相关联,则执行在删除所述区块C以后,将所述区块D对应的引用计数减1,所述区块C和所述区块D为所述写集缓存中任意两个区块。
上述步骤301-306的具体描述可以参照图1B所述的数据处理方法的相应描述,在此不再赘述。
可以看出,本申请实施例所描述的数据处理方法,应用于服务器,可向第一线程发送第一信息指令,第一信息指令用于指示第一线程若从读集数据库中读取到第M个区块对应的数据集,则执行通过第一队列以第M个区块之前的N个区块对应的数据集生成N个第一任务,其中,N为小于或等于M的正整数,M为正整数;若确定第二线程的当前任务为获取通过第一队列将N个区块之前的P个区块对应的数据集生成的P个第一任务时,则执行向第二线程发送第二信息指令,第二信息指令用于指示第二线程对P个区块进行MVCC验证;并指示第二线程将P个区块对应的数据集分别写入到写集缓存中,并生成P个写入事件;并将P个写入事件同步到第二队列中,生成P个第三任务,其中,P是小于或等于N的正整数;若确定第三线程的当前任务为通过写集数据库获取第二队列中的Q个第三任务时,则执行向第三线程发送第三信息指令,第三信息指令用于指示第三线程执行Q个第三任务,并获取写集缓存中的当前BlockID;当Q个第三任务中任意一个第三任务执行完成时,则执行更新当前BolckID为任意一个第三任务的区块对应的BlockID,其中,Q是小于或等于P的正整数,Q个第三任务对应于P个区块之前的Q个区块,每一第三任务对应一个区块;若在执行第一线程、第二线程或者第三线程的任务时触发缓存回收机制,则执行确定写集缓存中存在的多个区块和多个区块对应的多个引用计数,每一区块对应一个引用计数;若存在区块C对应的BlockID小于当前BolckID,且区块C对应的引用计数为0,则从写集缓存中删除区块C,其中,区块C为多个区块中任意一个区块;若区块C的数据集与区块D对应的数据集相关联,则执行在删除区块C以后,将区块D对应的引用计数减1,区块C和区块D为写集缓存中任意两个区块。如此,可将数据库的读写分离,分别分为读集数据库和写集数据库,并引入缓存的概念;进而,在上述每一线程运行时,可对应访问不同的区间,实现了多线程的数据库访问,有利于减少数据库的访问压力;同时,在进行MVCC验证时,可直接访问上述缓存,不用频繁访问数据库,有利于提高MVCC的验证效率;此外,上述操作仅涉及CPU操作,有利于提高区块链的性能;再进一步地,可设置缓存回收机制,不管在哪个线程触发该机制,均可对写集缓存中的区块进行处理,有利于节省写进缓存中的内存空间。
与上述一致地,请参阅图4,图4为本申请实施例提供的一种服务器的结构示意图,如图4所示,包括处理器、通信接口、存储器以及一个或多个程序,所述处理器、通信接口和存储器相互连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,上述一个或多个程序程序包括用于执行以下步骤的指令:
向第一线程发送第一信息指令,所述第一信息指令用于指示所述第一线程若从读集数据库中读取到第M个区块对应的数据集,则执行通过第一队列以所述第M个区块之前的N个区块对应的数据集生成N个第一任务,其中,所述N为小于或等于M的正整数,所述M为正整数;
若确定第二线程的当前任务为获取通过所述第一队列将所述N个区块之前的P个区块对应的数据集生成的P个第一任务时,则执行向所述第二线程发送第二信息指令,所述第二信息指令用于指示所述第二线程对所述P个区块进行MVCC验证;并指示所述第二线程将所述P个区块对应的数据集分别写入到写集缓存中,并生成P个写入事件;并将所述P个写入事件同步到第二队列中,生成P个第三任务,其中,P是小于或等于N的正整数;
若确定第三线程的当前任务为通过写集数据库获取所述第二队列中的Q个第三任务时,则执行向所述第三线程发送第三信息指令,所述第三信息指令用于指示第三线程执行所述Q个第三任务,并获取所述写集缓存中的当前BlockID;当所述Q个第三任务中任意一个第三任务执行完成时,则执行更新所述当前BolckID为所述任意一个第三任务的区块对应的BlockID,其中,Q是小于或等于P的正整数,所述Q个第三任务对应于P个区块之前的Q个区块,每一第三任务对应一个区块。
可以看出,本申请实施例中所描述的服务器,可向第一线程发送第一信息指令,第一信息指令用于指示第一线程若从读集数据库中读取到第M个区块对应的数据集,则执行通过第一队列以第M个区块之前的N个区块对应的数据集生成N个第一任务,其中,N为小于或等于M的正整数,M为正整数;若确定第二线程的当前任务为获取通过第一队列将N个区块之前的P个区块对应的数据集生成的P个第一任务时,则执行向第二线程发送第二信息指令,第二信息指令用于指示第二线程对P个区块进行MVCC验证;并指示第二线程将P个区块对应的数据集分别写入到写集缓存中,并生成P个写入事件;并将P个写入事件同步到第二队列中,生成P个第三任务,其中,P是小于或等于N的正整数;若确定第三线程的当前任务为通过写集数据库获取第二队列中的Q个第三任务时,则执行向第三线程发送第三信息指令,第三信息指令用于指示第三线程执行Q个第三任务,并获取写集缓存中的当前BlockID;当Q个第三任务中任意一个第三任务执行完成时,则执行更新当前BolckID为任意一个第三任务的区块对应的BlockID,其中,Q是小于或等于P的正整数,Q个第三任务对应于P个区块之前的Q个区块,每一第三任务对应一个区块。如此,可将数据库的读写分离,分别分为读集数据库和写集数据库,并引入缓存的概念;进而,在上述每一线程运行时,可对应访问不同的区间,实现了多线程的数据库访问,有利于减少数据库的访问压力;同时,在进行MVCC验证时,可直接访问上述缓存,不用频繁访问数据库,有利于提高MVCC的验证效率;此外,上述操作仅涉及CPU操作,有利于提高区块链的性能。
在一个可能的示例中,所述数据集包括:引用计数,所述程序用于执行以下步骤的指令:
若所述区块A对应的引用计数不为0,则执行确定存在区块的数据集与所述区块A的数据集之间有关联,其中,所述区块A为所述P个区块中任意一个;
若所述区块A对应的引用计数为0,则执行确定不存在区块的数据集与所述区块A的数据集之间有关联,则在更新所述当前BlockID为所述区块A的BlockID以后,将所述区块A对应的数据集从所述写集缓存中删除。
在一个可能的示例中,若所述区块A对应的引用计数不为0,所述程序用于执行以下步骤的指令:
在将所述区块A写入到所述写集缓存之前,若存在区块B的数据集与所述区块A的数据集相关联,则通过所述区块A将所述写集缓存中所述区块B的数据集中的引用计数加1,其中,所述区块B为在所述区块A之前写入所述写集缓存中的任意一个区块。
在一个可能的示例中,所述程序用于执行以下步骤的指令:
若在执行所述第一线程、所述第二线程或者所述第三线程的任务时触发缓存回收机制,则执行确定所述写集缓存中存在的多个区块和所述多个区块对应的多个引用计数,每一区块对应一个引用计数;
若存在区块C对应的BlockID小于所述当前BolckID,且区块C对应的引用计数为0,则从所述写集缓存中删除所述区块C,其中,所述区块C为所述多个区块中任意一个区块。
在一个可能的示例中,所述程序还用于执行以下步骤的指令:
若所述区块C的数据集与区块D对应的数据集相关联,则执行在删除所述区块C以后,将所述区块D对应的引用计数减1,所述区块C和所述区块D为所述写集缓存中任意两个区块。
在一个可能的示例中,所述数据集还包括:数据版本号,在所述对所述P个区块进行MVCC验证方面,所述程序用于执行以下步骤的指令:
确定所述区块A在从所述读集数据库访问对应的数据集时,所述读集数据库的数据版本号为第一版本号;
根据所述第一版本号,确定与所述区块A相关联的区块E,则将所述区块E的引用计数加1;
对所述区块A进行所述MVCC验证;
当所述区块A在进行MVCC验证完成时,则确定执行将所述区块E的引用计数减1。
上述主要从方法侧执行过程的角度对本申请实施例的方案进行了介绍。可以理解的是,服务器为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所提供的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对服务器进行功能单元的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个处理单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
与上述一致地,请参阅图5,图5是本申请实施例公开的一种数据处理装置的结构示意图,应用于服务器,该装置包括:第一发送单元501、第二发送单元502和第三发送单元503,其中,
所述第一发送单元501,用于向第一线程发送第一信息指令,所述第一信息指令用于指示所述第一线程若从读集数据库中读取到第M个区块对应的数据集,则执行通过第一队列以所述第M个区块之前的N个区块对应的数据集生成N个第一任务,其中,所述N为小于或等于M的正整数,所述M为正整数;
所述第二发送单元502,用于若确定第二线程的当前任务为获取通过所述第一队列将所述N个区块之前的P个区块对应的数据集生成的P个第一任务时,则执行向所述第二线程发送第二信息指令,所述第二信息指令用于指示所述第二线程对所述P个区块进行MVCC验证;并指示所述第二线程将所述P个区块对应的数据集分别写入到写集缓存中,并生成P个写入事件;并将所述P个写入事件同步到第二队列中,生成P个第三任务,其中,P是小于或等于N的正整数;
所述第三发送单元503,用于若确定第三线程的当前任务为通过写集数据库获取所述第二队列中的Q个第三任务时,则执行向所述第三线程发送第三信息指令,所述第三信息指令用于指示第三线程执行所述Q个第三任务,并获取所述写集缓存中的当前BlockID;当所述Q个第三任务中任意一个第三任务执行完成时,则执行更新所述当前BolckID为所述任意一个第三任务的区块对应的BlockID,其中,Q是小于或等于P的正整数,所述Q个第三任务对应于P个区块之前的Q个区块,每一第三任务对应一个区块。
可以看出,本申请实施例中所描述的数据处理装置,应用于服务器,可向第一线程发送第一信息指令,第一信息指令用于指示第一线程若从读集数据库中读取到第M个区块对应的数据集,则执行通过第一队列以第M个区块之前的N个区块对应的数据集生成N个第一任务,其中,N为小于或等于M的正整数,M为正整数;若确定第二线程的当前任务为获取通过第一队列将N个区块之前的P个区块对应的数据集生成的P个第一任务时,则执行向第二线程发送第二信息指令,第二信息指令用于指示第二线程对P个区块进行MVCC验证;并指示第二线程将P个区块对应的数据集分别写入到写集缓存中,并生成P个写入事件;并将P个写入事件同步到第二队列中,生成P个第三任务,其中,P是小于或等于N的正整数;若确定第三线程的当前任务为通过写集数据库获取第二队列中的Q个第三任务时,则执行向第三线程发送第三信息指令,第三信息指令用于指示第三线程执行Q个第三任务,并获取写集缓存中的当前BlockID;当Q个第三任务中任意一个第三任务执行完成时,则执行更新当前BolckID为任意一个第三任务的区块对应的BlockID,其中,Q是小于或等于P的正整数,Q个第三任务对应于P个区块之前的Q个区块,每一第三任务对应一个区块。如此,可将数据库的读写分离,分别分为读集数据库和写集数据库,并引入缓存的概念;进而,在上述每一线程运行时,可对应访问不同的区间,实现了多线程的数据库访问,有利于减少数据库的访问压力;同时,在进行MVCC验证时,可直接访问上述缓存,不用频繁访问数据库,有利于提高MVCC的验证效率;此外,上述操作仅涉及CPU操作,有利于提高区块链的性能。
在一个可能的示例中,所述数据集还包括:数据版本号,在所述对所述P个区块进行MVCC验证方面,所述第二发送单元502具体用于:
确定所述区块A在从所述读集数据库访问对应的数据集时,所述读集数据库的数据版本号为第一版本号;
根据所述第一版本号,确定与所述区块A相关联的区块E,则将所述区块E的引用计数加1;
对所述区块A进行所述MVCC验证;
当所述区块A在进行MVCC验证完成时,则确定执行将所述区块E的引用计数减1。
本申请实施例还提供一种计算机可读存储介质,其中,该计算机存储介质存储用于电子数据交换的计算机程序,该计算机程序使得计算机执行如上述方法实施例中记载的任何一种数据处理方法的部分或全部步骤。
本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机程序可操作来使计算机执行如上述方法实施例中记载的任何一种数据处理方法的部分或全部步骤。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、ROM、RAM、磁盘或光盘等。
以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种数据处理方法,其特征在于,应用于服务器,所述服务器中部署区块链网络,包括:
向第一线程发送第一信息指令,所述第一信息指令用于指示所述第一线程若从读集数据库中读取到第M个区块对应的数据集,则执行通过第一队列以所述第M个区块之前的N个区块对应的数据集生成N个第一任务,其中,所述N为小于或等于M的正整数,所述M为正整数;
若确定第二线程的当前任务为获取通过所述第一队列将所述N个区块之前的P个区块对应的数据集生成的P个第一任务时,则执行向所述第二线程发送第二信息指令,所述第二信息指令用于指示所述第二线程对所述P个区块进行MVCC验证,并指示所述第二线程将所述P个区块对应的数据集分别写入到写集缓存中,并生成P个写入事件;将所述P个写入事件同步到第二队列中,生成P个第三任务,其中,P是小于或等于N的正整数;
若确定第三线程的当前任务为通过写集数据库获取所述第二队列中的Q个第三任务时,则执行向所述第三线程发送第三信息指令,所述第三信息指令用于指示第三线程执行所述Q个第三任务,并获取所述写集缓存中的当前BlockID;当所述Q个第三任务中任意一个第三任务执行完成时,则执行更新所述当前BolckID为所述任意一个第三任务的区块对应的BlockID,其中,Q是小于或等于P的正整数,所述Q个第三任务对应于P个区块之前的Q个区块,每一第三任务对应一个区块,其中,所述区块为所述区块链网络中的基本单元结构。
2.根据权利要求1所述的方法,其特征在于,所述数据集包括:引用计数,所述方法还包括:
若区块A对应的引用计数不为0,则执行确定存在区块的数据集与所述区块A的数据集之间有关联,其中,所述区块A为所述P个区块中任意一个;
若所述区块A对应的引用计数为0,则执行确定不存在区块的数据集与所述区块A的数据集之间有关联,则在更新所述当前BlockID为所述区块A的BlockID以后,将所述区块A对应的数据集从所述写集缓存中删除。
3.根据权利要求1或2所述的方法,其特征在于,若所述区块A对应的引用计数不为0,所述方法还包括:
在将所述区块A写入到所述写集缓存之前,若存在区块B的数据集与所述区块A的数据集相关联,则通过所述区块A将所述写集缓存中所述区块B的数据集中的引用计数加1,其中,所述区块B为在所述区块A之前写入所述写集缓存中的任意一个区块。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若在执行所述第一线程、所述第二线程或者所述第三线程的任务时触发缓存回收机制,则执行确定所述写集缓存中存在的多个区块和所述多个区块对应的多个引用计数,每一区块对应一个引用计数;
若存在区块C对应的BlockID小于所述当前BolckID,且区块C对应的引用计数为0,则从所述写集缓存中删除所述区块C,其中,所述区块C为所述多个区块中任意一个区块。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
若所述区块C的数据集与区块D对应的数据集相关联,则执行在删除所述区块C以后,将所述区块D对应的引用计数减1,所述区块C和所述区块D为所述写集缓存中任意两个区块。
6.根据权利要求1或2所述的方法,其特征在于,所述数据集还包括:数据版本号,所述对所述P个区块进行MVCC验证,包括:
确定区块A在从所述读集数据库访问对应的数据集时,所述读集数据库的数据版本号为第一版本号;
根据所述第一版本号,确定与所述区块A相关联的区块E,则将所述区块E的引用计数加1;
对所述区块A进行所述MVCC验证;
当所述区块A在进行MVCC验证完成时,则确定执行将所述区块E的引用计数减1。
7.一种数据处理装置,其特征在于,应用于服务器,所述服务器中部署区块链网络,所述装置包括:第一发送单元、第二发送单元和第三发送单元,其中,
所述第一发送单元,用于向第一线程发送第一信息指令,所述第一信息指令用于指示所述第一线程若从读集数据库中读取到第M个区块对应的数据集,则执行通过第一队列以所述第M个区块之前的N个区块对应的数据集生成N个第一任务,其中,所述N为小于或等于M的正整数,所述M为正整数;
所述第二发送单元,用于若确定第二线程的当前任务为获取通过所述第一队列将所述N个区块之前的P个区块对应的数据集生成的P个第一任务时,则执行向所述第二线程发送第二信息指令,所述第二信息指令用于指示所述第二线程对所述P个区块进行MVCC验证,并指示所述第二线程将所述P个区块对应的数据集分别写入到写集缓存中,并生成P个写入事件;将所述P个写入事件同步到第二队列中,生成P个第三任务,其中,P是小于或等于N的正整数;
所述第三发送单元,用于若确定第三线程的当前任务为通过写集数据库获取所述第二队列中的Q个第三任务时,则执行向所述第三线程发送第三信息指令,所述第三信息指令用于指示第三线程执行所述Q个第三任务,并获取所述写集缓存中的当前BlockID;当所述Q个第三任务中任意一个第三任务执行完成时,则执行更新所述当前BolckID为所述任意一个第三任务的区块对应的BlockID,其中,Q是小于或等于P的正整数,所述Q个第三任务对应于P个区块之前的Q个区块,每一第三任务对应一个区块,其中,所述区块为所述区块链网络中的基本单元结构。
8.根据权利要求7所述的装置,其特征在于,所述数据集还包括:数据版本号,所述对所述P个区块进行MVCC验证,包括:
确定区块A在从所述读集数据库访问对应的数据集时,所述读集数据库的数据版本号为第一版本号;
根据所述第一版本号,确定与所述区块A相关联的区块E,则将所述区块E的引用计数加1;
对所述区块A进行所述MVCC验证;
当所述区块A在进行MVCC验证完成时,则确定执行将所述区块E的引用计数减1。
9.一种服务器,其特征在于,包括处理器、通信接口、存储器以及一个或多个程序,所述处理器、通信接口和存储器相互连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如权利要求1-6任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求1-6任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010913919.5A CN111984421B (zh) | 2020-09-03 | 2020-09-03 | 数据处理方法、装置及存储介质 |
PCT/CN2021/109268 WO2022048358A1 (zh) | 2020-09-03 | 2021-07-29 | 数据处理方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010913919.5A CN111984421B (zh) | 2020-09-03 | 2020-09-03 | 数据处理方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111984421A CN111984421A (zh) | 2020-11-24 |
CN111984421B true CN111984421B (zh) | 2022-09-16 |
Family
ID=73447432
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010913919.5A Active CN111984421B (zh) | 2020-09-03 | 2020-09-03 | 数据处理方法、装置及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN111984421B (zh) |
WO (1) | WO2022048358A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111984421B (zh) * | 2020-09-03 | 2022-09-16 | 深圳壹账通智能科技有限公司 | 数据处理方法、装置及存储介质 |
CN113505000B (zh) * | 2021-09-08 | 2021-12-21 | 广东卓启云链科技有限公司 | 区块链中的多线程处理方法、装置、***和存储介质 |
CN114297109B (zh) * | 2021-12-28 | 2024-05-24 | 中汽创智科技有限公司 | 一种基于订阅发布模式的数据处理方法、装置、电子设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106598549A (zh) * | 2016-12-08 | 2017-04-26 | 天津米游科技有限公司 | 一种基于区块链的智能合约***及实现方法 |
CN109471734A (zh) * | 2018-10-27 | 2019-03-15 | 哈尔滨工业大学(威海) | 一种新型缓存优化多线程确定性方法 |
CN109493223A (zh) * | 2018-11-07 | 2019-03-19 | 联动优势科技有限公司 | 一种记账方法及装置 |
CN109933632A (zh) * | 2019-04-04 | 2019-06-25 | 杭州数梦工场科技有限公司 | 一种数据库的数据迁移方法、装置及设备 |
CN110245006A (zh) * | 2019-05-07 | 2019-09-17 | 深圳壹账通智能科技有限公司 | 区块链事务的处理方法、装置、设备及存储介质 |
CN111241061A (zh) * | 2020-01-09 | 2020-06-05 | 平安科技(深圳)有限公司 | 状态数据库的写入方法、数据处理装置及存储介质 |
CN111414389A (zh) * | 2020-03-19 | 2020-07-14 | 北京字节跳动网络技术有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170289134A1 (en) * | 2016-03-30 | 2017-10-05 | Ping Identity Corporation | Methods and apparatus for assessing authentication risk and implementing single sign on (sso) using a distributed consensus database |
US10868674B2 (en) * | 2016-08-12 | 2020-12-15 | ALTR Solutions, Inc. | Decentralized database optimizations |
US10708250B2 (en) * | 2018-07-11 | 2020-07-07 | Americorps Investments Llc | Blockchain operating system |
CN109271258B (zh) * | 2018-08-28 | 2020-11-17 | 百度在线网络技术(北京)有限公司 | 读写锁重入的实现方法、装置、终端及存储介质 |
CN111984421B (zh) * | 2020-09-03 | 2022-09-16 | 深圳壹账通智能科技有限公司 | 数据处理方法、装置及存储介质 |
-
2020
- 2020-09-03 CN CN202010913919.5A patent/CN111984421B/zh active Active
-
2021
- 2021-07-29 WO PCT/CN2021/109268 patent/WO2022048358A1/zh active Application Filing
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106598549A (zh) * | 2016-12-08 | 2017-04-26 | 天津米游科技有限公司 | 一种基于区块链的智能合约***及实现方法 |
CN109471734A (zh) * | 2018-10-27 | 2019-03-15 | 哈尔滨工业大学(威海) | 一种新型缓存优化多线程确定性方法 |
CN109493223A (zh) * | 2018-11-07 | 2019-03-19 | 联动优势科技有限公司 | 一种记账方法及装置 |
CN109933632A (zh) * | 2019-04-04 | 2019-06-25 | 杭州数梦工场科技有限公司 | 一种数据库的数据迁移方法、装置及设备 |
CN110245006A (zh) * | 2019-05-07 | 2019-09-17 | 深圳壹账通智能科技有限公司 | 区块链事务的处理方法、装置、设备及存储介质 |
CN111241061A (zh) * | 2020-01-09 | 2020-06-05 | 平安科技(深圳)有限公司 | 状态数据库的写入方法、数据处理装置及存储介质 |
CN111414389A (zh) * | 2020-03-19 | 2020-07-14 | 北京字节跳动网络技术有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
基于区块链和连续双向拍卖机制的微电网直接交易模式及策略;王健 等;《中国电机工程学报》;20180905;第38卷(第17期);第5072页-第5085页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111984421A (zh) | 2020-11-24 |
WO2022048358A1 (zh) | 2022-03-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111984421B (zh) | 数据处理方法、装置及存储介质 | |
EP3678346B1 (en) | Blockchain smart contract verification method and apparatus, and storage medium | |
CN110659256B (zh) | 多机房同步方法、计算设备及计算机存储介质 | |
FI3382551T3 (fi) | Hajautettu laitteistojäljitys | |
US20210049715A1 (en) | Blockchain-based data procesing method, apparatus, and electronic device | |
CN112395300B (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN111241061B (zh) | 状态数据库的写入方法、数据处理装置及存储介质 | |
CN104246767A (zh) | 用于云同步***的遥测*** | |
CN109445861A (zh) | ***启动方法、装置、计算机装置及存储介质 | |
CN112037058B (zh) | 数据验证方法、装置及存储介质 | |
CN110851535B (zh) | 基于区块链的数据处理方法、装置、存储介质及终端 | |
US20200026427A1 (en) | System and method for handling data storage on storage devices | |
CN112632163B (zh) | 大数据报表导出方法及相关设备 | |
US20160342641A1 (en) | Using checksums to reduce the write latency of logging | |
CN112445596A (zh) | 基于多线程的数据导入方法、***及存储介质 | |
CN112015558A (zh) | 数据验证方法、装置及存储介质 | |
CN110147354B (zh) | 批量数据编辑方法、装置、计算机设备及存储介质 | |
EP3933639B1 (en) | Transaction processing method, apparatus, and electronic device for blockchain | |
CN114331440A (zh) | 一种冲突检测及性能优化方法和装置 | |
CN108196975B (zh) | 基于多校验和的数据验证方法、装置及存储介质 | |
CN107958414B (zh) | 一种清除cics***长交易的方法及*** | |
CN111078418A (zh) | 操作同步方法、装置、电子设备及计算机可读存储介质 | |
CN114756624A (zh) | 全量节点的数据处理方法、装置、设备及存储介质 | |
CN111371818B (zh) | 一种数据请求的验证方法、装置及设备 | |
CN109213526B (zh) | 用于确定处理器操作的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
CB02 | Change of applicant information |
Address after: 518000 Room 201, building A, No. 1, Qian Wan Road, Qianhai Shenzhen Hong Kong cooperation zone, Shenzhen, Guangdong (Shenzhen Qianhai business secretary Co., Ltd.) Applicant after: ONECONNECT FINANCIAL TECHNOLOGY Co.,Ltd. (SHANGHAI) Address before: Room 201, Building A, No. 1 Qianwan Road, Qianhaisheng Cooperation Zone, Shenzhen City, Guangdong Province, 518000 Applicant before: ONECONNECT FINANCIAL TECHNOLOGY Co.,Ltd. (SHANGHAI) |
|
CB02 | Change of applicant information | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |