CN117076507A - 交易的执行方法及装置 - Google Patents
交易的执行方法及装置 Download PDFInfo
- Publication number
- CN117076507A CN117076507A CN202311120381.2A CN202311120381A CN117076507A CN 117076507 A CN117076507 A CN 117076507A CN 202311120381 A CN202311120381 A CN 202311120381A CN 117076507 A CN117076507 A CN 117076507A
- Authority
- CN
- China
- Prior art keywords
- data
- target
- block
- transaction
- target block
- 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
- 238000000034 method Methods 0.000 title claims abstract description 105
- 230000002688 persistence Effects 0.000 claims description 18
- 230000002085 persistent effect Effects 0.000 claims description 16
- 230000004044 response Effects 0.000 claims description 9
- 230000002045 lasting effect Effects 0.000 claims description 4
- 230000008569 process Effects 0.000 description 43
- 238000012545 processing Methods 0.000 description 28
- 230000006870 function Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 12
- 238000005516 engineering process Methods 0.000 description 11
- 238000004590 computer program Methods 0.000 description 9
- 230000006872 improvement Effects 0.000 description 8
- 238000012795 verification Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 108010001267 Protein Subunits Proteins 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 239000007795 chemical reaction product Substances 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 229920001296 polysiloxane Polymers 0.000 description 1
- 239000000047 product Substances 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 239000010979 ruby Substances 0.000 description 1
- 229910001750 ruby Inorganic materials 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
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/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/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书提供一种交易的执行方法及装置。所述方法包括针对待执行的目标区块和需要在所述目标区块之前执行的前向区块,在存在至少一个尚未执行完毕的所述前向区块的情况下,根据所述目标区块中的各笔交易确定所述目标区块的第一读集,其中,所述第一读集中包含执行所述目标区块中各笔交易所需的第一目标数据的数据标识;根据所述数据标识从持久化保存的状态数据中读取并缓存第一目标数据;在所述前向区块全部执行完毕的情况下,根据缓存的第一目标数据执行所述目标区块中的各笔交易。
Description
技术领域
本说明书实施例属于区块链技术领域,尤其涉及一种交易的执行方法及装置。
背景技术
区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。用户可以通过区块链节点参与实现区块链的相关事务,例如,区块链系统中分别对应不同用户的多个区块链节点,可以基于同态加密、零知识证明等隐私技术针对某一节点的私有数据进行安全多方计算(Secure Multi-Party Computation,SMPC)。再例如,基于区块链网络可以在不同用户账户之间实现转账;再例如,还可以基于区块链网络发行数字画作、数字头像、GIF等数字藏品对应的NFT(Non-Fungible Token,非同质化代币),以便NFT所承载的数字藏品的所有权能够在区块链网络的用户之间流通,从而产生对应于数字藏品的价值。
在区块共识完成的情况下,区块中包含的交易以及各笔交易的预设顺序即被区块链系统中的大多数区块链节点所认可。此后,各个区块链节点可以分别按照上述预设顺序执行该区块,即按照上述预设顺序依次执行该区块中的各笔交易,并在执行完成后将相应的状态数据持久化保存。
区块链中的各个区块需要按照区块高度由低到高的顺序依次执行。在相关技术中,针对共识完成的任一待执行区块(下称后一区块),区块链节点会响应于该区块的前一区块执行完毕,从持久化保存的状态数据中读取执行后一区块所需的状态数据,并利用这些状态数据执行后一区块,然后将执行得到的新的状态数据持久化保存,从而完成针对该区块的处理过程。但是,由于用于持久化保存状态数据的存储空间的读/写性能通常较差使得状态数据的读取过程较慢,因此后一区块的总体执行耗时较长,严重影响了流水线的区块处理效率,导致区块链系统整体的交易吞吐量较低。
发明内容
本说明书提供一种交易的执行方法及装置。具体地,本说明书是通过如下技术方案实现的:
根据本说明书实施例的第一方面,提供了一种交易的执行方法,包括:
针对待执行的目标区块和需要在所述目标区块之前执行的前向区块,在存在至少一个尚未执行完毕的所述前向区块的情况下,根据所述目标区块中的各笔交易确定所述目标区块的第一读集,其中,所述第一读集中包含执行所述目标区块中各笔交易所需的第一目标数据的数据标识;
根据所述数据标识从持久化保存的状态数据中读取并缓存第一目标数据;
在所述前向区块全部执行完毕的情况下,根据缓存的第一目标数据执行所述目标区块中的各笔交易。
根据本说明书实施例的第二方面,提供了一种交易的执行装置,包括:
读集确定单元,用于针对待执行的目标区块和需要在所述目标区块之前执行的前向区块,在存在至少一个尚未执行完毕的所述前向区块的情况下,根据所述目标区块中的各笔交易确定所述目标区块的第一读集,其中,所述第一读集中包含执行所述目标区块中各笔交易所需的第一目标数据的数据标识;
数据缓存单元,用于根据所述数据标识从持久化保存的状态数据中读取并缓存第一目标数据;
交易执行单元,用于在所述前向区块全部执行完毕的情况下,根据缓存的第一目标数据执行所述目标区块中的各笔交易。
根据本说明书实施例的第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如第一方面中任一项所述的方法的步骤。
根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面中任一项所述方法的步骤。
在本说明书所提供的技术方案中,针对待执行的目标区块和需要在所述目标区块之前执行的前向区块,区块链节点在存在至少一个尚未执行完毕的所述前向区块的情况下,根据所述目标区块中的各笔交易确定所述目标区块的第一读集,其中,所述第一读集中包含执行所述目标区块中各笔交易所需的第一目标数据的数据标识;然后根据所述数据标识从持久化保存的状态数据中读取并缓存第一目标数据;进而在所述前向区块全部执行完毕的情况下,根据缓存的第一目标数据执行所述目标区块中的各笔交易。
区块链节点在至少一个前向区块(即需要在目标区块之前执行的区块)尚未执行完毕的情况下,即从持久化保存的状态数据中读取并缓存执行目标区块所需的第一目标数据;基于此,在各个前向区块均执行完毕的情况下,利用预先读取并缓存的所述第一目标数据执行目标区块。可见,本方案摒弃了在执行目标区块时临时读取第一目标数据的方式,而是在执行目标区块之前(如在执行前向区块时或者执行前向区块之前)预先读取并缓存第一目标数据,即利用等待前向区块执行完毕的这段时间预先读取并缓存(执行目标区块所需的)第一目标数据,进而在执行完各个前向区块之后(因为各个区块按序执行,所以实际上是执行完与目标区块相邻的前一个前向区块之后)即可立即使用已缓存的第一目标数据执行目标区块。该方案在执行前向区块的时间内预先读取并缓存执行目标区块所需的第一目标数据,不仅通过复用这段时间实现了不同区块的并行处理,有效避免了在执行目标区块之前白白等待前向区块执行完毕,而且将读取第一目标数据的过程提前,从而在执行完前向区块之后可以立即开始(根据缓存的第一目标数据)执行目标区块,有效缩短目标区块的整体执行耗时,提升执行效率,从而有助于提升区块链系统的交易吞吐量。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是一示例性实施例提供的一种交易的执行方法的流程图;
图2是一示例性实施例提供的一种流水线架构的示意图;
图3是一示例性实施例提供的一种设备的结构示意图;
图4是一示例性实施例提供的一种交易的执行装置的示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与本说明书的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
在区块共识完成的情况下,区块中包含的交易以及各笔交易的预设顺序即被区块链系统中的大多数区块链节点所认可。此后,各个区块链节点可以分别按照上述预设顺序执行该区块,即按照上述预设顺序依次执行该区块中的各笔交易,并在执行完成后将相应的状态数据持久化保存。
区块链中的各个区块需要按照区块高度由低到高的顺序依次执行。在相关技术中,针对共识完成的任一待执行区块(下称后一区块),区块链节点会响应于该区块的前一区块执行完毕,从持久化保存的状态数据中读取执行后一区块所需的状态数据,并利用这些状态数据执行后一区块,然后将执行得到的新的状态数据持久化保存,从而完成针对该区块的处理过程。但是,由于用于持久化保存状态数据的存储空间的读/写性能通常较差使得状态数据的读取过程较慢,因此后一区块的总体执行耗时较长,严重影响了流水线的区块处理效率,导致区块链系统整体的交易吞吐量较低。
对此,本说明书提供了一种新的交易的执行方法,下面结合附图对该执行方法进行详细说明。
图1是一示例性实施例提供的一种交易的执行方法的流程图。如图1所示,该方法可以应用于区块链系统中的任一区块链节点。本说明书所述的区块链节点,可以为所述区块链系统中发起共识提议的节点(如主节点),或者也可以为该节点之外的其他区块链节点(如从节点),无论所述区块链系统中的主节点还是从节点,各个节点均可实现为任何具有计算/处理能力的装置、平台、设备或设备集群。所述方法包括下述步骤102-106。
步骤102,针对待执行的目标区块和需要在所述目标区块之前执行的前向区块,在存在至少一个尚未执行完毕的所述前向区块的情况下,根据所述目标区块中的各笔交易确定所述目标区块的第一读集,其中,所述第一读集中包含执行所述目标区块中各笔交易所需的第一目标数据的数据标识。
首先需要说明的是,本说明书所述的各个区块需要按照顺序逐一执行。以区块高度为例,可以按照区块高度由低到高的顺序依次执行各个区块,如在执行任一区块i(即区块高度为i的区块,下同)完成后,再执行下一区块i+1。本说明书所述的目标区块为待执行的任一区块,所述前向区块为需要在目标区块之前执行的各个区块;换言之,目标区块的前向区块都需要在该目标区块之前执行。当然,各个前向区块的执行也需要满足相应的先后顺序,不再赘述。
另外,本说明书“执行”任一区块的过程,即为按照该区块中各笔交易的预设顺序依次执行各笔交易的过程,其中,所述预设顺序即为该区块在共识过程中确定出的顺序。为描述简便,下文将“执行区块中各笔交易”称为“执行区块”,特此说明。
在一实施例中,区块链节点可以按照流水线架构处理各个区块。例如,该流水线架构可以包括多条流水线,任一流水线用于针对各个区块完成特定的处理任务,即按照自身的处理逻辑依次按序处理各个区块。示例性的,所述流水线架构中的多条流水线,按照针对任一区块的处理顺序可以包括但不限于:成块流水线、共识流水线、执行流水线、持久化流水线、验证流水线等。基于此,对于成块流水线生成的区块,可以由共识流水线进行共识处理;共识完成的该区块即成为待执行区块,此时可以交由执行流水线执行;执行完成后,可以由持久化流水线对执行得到的状态数据进行持久化处理,最终由验证流水线对执行和持久化结果进行验证:若验证无误,则该区块被处理完成;若验证有误,则可以按照预设逻辑等待连续多个区块持久化完毕后再次验证或者直接进行回滚等相关处理。
另外,流水线架构中的各个流水线可以分别由不同的进程实现,以避免不同流水线之间相互影响。所述进程可以为分立的概念,这些进程在逻辑上归属于所述区块链节点。其中,区块链节点的节点程序(用于实现节点的控制逻辑)可以部署在任一物理设备中,而上述进程既可以部署于该物理设备中,也可以部署于区别于该物理设备的其他物理设备中(如各个进程可以通过集群形式部署在不同的云服务器中)。无论何种部署方式,上述不同进程之间均可以视为“远程”,不同进程之间可以通过相应的进程间通信技术实现信息和数据交互,如RPC(Remote Procedure Call,远程过程调用)技术、PIPE(管道)技术、消息队列(Message Queue)技术等,本说明书并不对此进行限制。
需要说明的是,上述成块流水线、共识流水线等仅是为了示例性说明所述流水线架构的工作原理,在方案实施过程中,所述流水线架构也可以根据实际需要调整所包含流水线的数量、顺序和/或处理逻辑等,本说明书对于流水线架构的具体内容并不进行限制。可以理解的是,所述流水线架构可以在实现对任一区块串行处理的同时,实现对多个区块的并行处理。仍以上述示例性流水线架构为例,任一区块i可以被成块流水线、共识流水线、执行流水线、持久化流水线、验证流水线依次处理,从而实现对该区块的串行处理;而相邻的多个区块可以在同时时刻被不同的流水线分别处理,如在任一时刻t,共识流水线在参与针对区块i的共识过程、执行流水线在执行区块i-1、持久化流水线在持久化保存执行区块i-2得到的状态数据等,不再赘述。可见,相对于依次处理各个区块,利用上述流水线架构可以并行处理多个区块,显著提升区块链系统的交易吞吐量。而本说明书所述的交易的执行方法即可结合上述流水线架构实现,具体实现方法可参见下文实施例,此处暂不赘述。
如前所述,作为任一区块的目标区块中存在至少一笔交易,而且该区块可能存在一个或多个区块。对此,区块链节点可以在存在至少一个尚未执行完毕的所述前向区块的情况下,根据所述目标区块中的各笔交易确定所述目标区块的第一读集。其中,所述尚未执行完毕的前向区块,可以包括尚未开始执行的前向区块和/或正在执行(但尚未结束)的前向区块。
在一实施例中,区块可以响应于所述目标区块共识完成,在存在至少一个尚未执行完毕的所述前向区块的情况下,根据所述目标区块包含的各笔交易确定所述目标区块的第一读集。其中,目标区块共识完成,表明需要执行该区块,换言之,共识完成的目标区块即称为待执行区块。响应于目标区块共识完成,区块链节点可以检查当前是否存在尚未执行完毕的(目标区块的)前向区块,并在存在至少一个所述前向区块的情况下,确定目标区块的第一读集。
图2是一示例性实施例提供的一种流水线架构的示意图。如图2所示,共识流水线可以参与针对区块BLOCKn的共识过程。在共识完成后,BLOCKn即成为待执行区块,此时,共识流水线可以将BLOCKn传递至由执行流水线管理的等待执行区块队列,作为该队列中的最后一个区块。在所述等待执行区块队列中,所述BLOCKn之前还依次排列有BLOCKn-1、BLOCKn-2和BLOCKn-3。当前时刻从等待执行区块队列中移出的BLOCKn-4正在被执行,执行该区块可以得到需要被持久化保存的状态数据。相应的,对于当前时刻已经执行完毕的BLOCKn-5,持久化流水线正在持久化保存执行该区块得到的状态数据。可以理解的是,所述等待执行区块队列中的各个区块将被按照其排列顺序依次移出以便执行,如在BLOCKn-4执行完毕后,BLOCKn-3的各个前向区块即全部执行完毕,此时可以将BLOCKn-3移除该队列以便执行。
在执行所述目标区块中各笔交易的过程中,需要使用当前已经持久化保存的状态数据,下称这部分状态数据为第一目标数据。在前向区块尚未执行完毕的情况下确定出的第一读集,即包含各个第一目标数据的数据标识;换言之,第一读集是一个集合,目标区块对应的各个第一目标数据的数据标识共同构成该集合。因此,区块链节点可以分别根据目标区块中的各笔交易确定相应的第一目标数据的数据标识,而各笔交易分别所需的第一目标数据的数据标识构成所述目标区块的第一读集。
在一实施例中,鉴于待执行的交易通常存在输入参数和/或会调用已经部署的智能合约等,区块链节点在确定第一读集时,可以根据任一交易的输入参数和/或调用的智能合约,确定执行该交易所需的第一目标数据的数据标识,其中,所述目标区块中各笔交易分别所需的第一目标数据的数据标识构成所述目标区块的第一读集。通过该方式,区块链节点可以根据各笔交易的输入参数和/或调用的智能合约准确地确定出各笔交易分别所需的第一目标数据,为后续执行过程得到正确的执行结果打好数据基础。
其中,上述方式确定的任一第一目标数据的数据标识,可以为该数据的数据名称、数据编号、(持久化存储后的)存储地址等。示例性的,在所述状态数据被按照键值对(key-value或称KVs)的形式持久化保存的情况下,任一第一目标数据的数据标识可以为相应的键(key),而所述任一第一目标数据即为该键对应的值(value)。另外,由于目标区块中可能存在多笔交易需要同一个状态数据,所以在根据各笔交易分别确定所需第一目标数据的数据标识后,还可以对这些数据标识进行去重处理,以避免后续对持久化保存的某一第一目标数据进行多次重复读取或者缓存多份同一第一目标数据。
以任一交易调用的智能合约为例,可以根据该合约的API(ApplicationProgramming Interface,应用程序编程接口)或者ABI(Application Binary Interface,应用程序二进制接口)中记录的函数(function)确定该合约的入参信息,然后根据该信息查询各个入参分别对应的key。
至此,针对待执行的目标区块,区块链节点确定了该区块的第一读集,即确定出了执行该区块所需的各个第一目标数据的数据标识。需要强调的是,第一读集中仅包含第一目标数据的标识,而并不包含第一目标数据本身。鉴于后续执行目标区块需要使用各个第一目标数据(本身),所以区块链节点还需要根据第一读集中的各个数据标识从持久化保存的状态数据中读取并缓存第一目标数据。可以理解的是,对于目标区块而言,被持久化保存的状态数据可以由区块链系统统一设置和/或通过执行前向区块(这部分前向区块在当前时刻已经完成执行和持久化处理)得到。
步骤104,根据所述数据标识从持久化保存的状态数据中读取并缓存第一目标数据。
在一实施例中,区块链系统除了持久化保存有所述状态数据之外,还可以持久化保存这些状态数据的数据标识,如可以持久化保存执行前向区块得到的各个状态数据及其数据标识之间的对应关系。基于此,区块链节点可以在所述对应关系中查询第一读集中的任一数据标识,然后将查询到的该数据标识所对应的状态数据确定为第一目标数据,进而读取并缓存该第一目标数据。其中,上述状态数据及其数据标识之间的对应关系可以为列表形式、键值对形式等,本说明书并不对此进行限制。
示例性的,在待读取的所述状态数据被按照键值对的形式持久化保存的情况下,其中任一状态数据所对应的键为该状态数据的数据标识、所对应的值为该状态数据的数据值(即该状态数据本身)。基于此,区块链节点在根据所述数据标识读取第一目标数据时,可以先从持久化保存的所述键值对的键中查询与所述数据标识相同的目标键,然后读取所述目标键对应的目标值作为第一目标数据。通过该方式,区块链节点可以从持久化保存的键值对中准确读取到第一目标数据。
本说明书所述状态数据,可以被持久化保存在区块链节点的数据库中,该数据库具体可以为区块链节点可访问的磁盘(disk),如区块链节点所处节点设备的本地磁盘或者该节点设备挂载的虚拟磁盘等,该数据库还可以为区块链节点可访问的网络数据库等远程存储空间。另外,用于缓存第一目标数据的存储空间,可以为区块链节点所处节点设备的内存或本地缓存(Cache,或称缓冲区)等。相应的,“持久化保存任一状态数据”,即将该状态数据存储(即写入)在区块链节点的上述数据库中;“缓存任一第一目标数据”,即将该第一目标数据存储(即写入)在上述缓存空间中。
本说明书对于用于持久化存储的数据库的形式以及第一目标数据的缓存空间的形式并不进行限制,可以根据实际需要选取。但需要说明的是,所述缓存空间的读/写性能通常优于所述数据库的读写性能(如区块链节点所处节点设备的内存的读/写性能即优于该设备本地磁盘的读/写性能),因此从缓存空间读取(被缓存的)第一目标数据的耗时通常小于从所述数据库中读取(被持久化保存的)第一目标数据的耗时。正因为此,本方案通过从上述数据库中预先读取被持久化保存的第一目标数据并将其缓存在所述缓存空间中,然后在执行目标区块的过程中再从该缓存空间中读取(被缓存的)第一目标数据,而不是直接从上述数据库中读取(被持久化保存的)第一目标数据,能够显著缩短执行目标区块的过程中读取第一目标数据的耗时,从而提升该区块的整体执行速度。
至此,完成了对执行目标区块所需第一目标数据的读取和缓存过程。需要说明的是,在执行前述步骤102和104的同时,区块链节点还可以执行前向区块;而且,在执行步骤102和104完成后(即缓存了所述第一目标数据后),若还存在尚未执行完毕的前向区块,则区块链节点需要继续执行这部分前向区块,直至全部前向区块均执行完毕的情况下,再开始利用缓存的第一目标数据执行目标区块。
在一实施例中,在前述“尚未执行完毕的前向区块”中的任一前向区块执行完毕后,会产生需要持久化保存的状态数据,若这部分状态数据中存在至少一个状态数据同时属于第一目标数据,则后续执行目标区块时需要按照该状态数据执行相应的交易,而不应该使用已经缓存的第一目标数据执行相应的交易,以确保该交易执行结果的正确性。为此,区块链节点可以对已经缓存的第一目标数据进行更新。例如,在任一前向区块执行完毕的情况下,可以确定所述任一前向区块的前向写集,该前向写集中包含执行该前向区块中的各笔交易得到的、需要持久化保存的前向状态数据及其数据标识。可以理解的是,在执行任一前向区块完毕后,可以使用执行过程得到的需要持久化保存的前向状态数据及其数据标识构成所述前向写集。如前所述,第一读集中包含第一目标数据的数据标识,基于此,可以逐一比较所述前向写集和第一读集分别包含的数据标识是否相同:若所述前向写集和第一读集中包含相同的数据标识(下称待更新数据标识),则将所述待更新数据标识表征的已缓存的第一目标数据更新为所述待更新数据标识表征的前向状态数据;换言之,对于任一待更新数据标识在第一写集中对应的第一目标数据和在前向写集中对应的前向状态数据,可以使用该前向状态数据更新已持久化保存的该第一目标数据。其中,更新后的该目标数据可以被用于执行所述目标区块中相应的交易。通过该方式,对于任一前向区块执行完毕前就缓存完成的区块所需的全部第一目标数据,可以在该前向区块执行完毕后对其中需要更新的部分进行更新,以便后续执行目标区块时可以使用更新后的该状态数据执行相应的交易,从而有效确保这部分交易执行过程及其执行结果的正确性。
另外,除了更新已缓存的所述第一目标数据之外,还可以更新持久化保存的相应的状态数据。例如,若所述前向写集和第一读集中包含相同的待更新数据标识,则可以将所述待更新数据标识表征的已持久化保存的第一目标数据更新为所述待更新数据标识表征的前向状态数据。换言之,对于任一待更新数据标识在前述数据库中对应的状态数据(即前述步骤104中被读取的状态数据)和在前向写集中对应的前向状态数据,可以使用该前向状态数据更新数据库中对应的该状态数据。该更新过程可以由前述持久化流水线完成。
其中,使用任一前向状态数据更新任一数据(即任一第一目标数据或者任一状态数据),具体可以通过写入操作实现,如在所述任一数据的原地址写入所述任一前向状态数据,从而覆盖所述任一数据;或者也可以在其他地址写入所述任一前向状态数据,并将针对所述任一数据的访问指针指向所述其他地址,本说明书对于具体更新方式并不进行限制。
如图2所示,不妨假设disk为区块链节点所处节点设备的本地磁盘(区块链节点可访问)、storage cache为从该节点设备的内存中划分的缓存空间。若所述区块BLOCKn为前述目标区块,则在BLOCKn共识完成后(如图2中的步骤“1.共识完成后”)可以被传递至等待执行区块队列。此时BLOCKn之前存在四个尚未执行完毕的区块,即BLOCKn-1~BLOCKn-4。区块链节点可以确定BLOCKn的第一读集并从disk读取相应的第一目标数据,然后将读取到的各个第一目标数据写入storage cache中(如图2中的步骤“2.预读”和步骤“3/4.从磁盘读取数据到缓存”),完成对这部分数据的缓存。
同时,执行流水线还在执行BLOCKn-4:从storage cache中加载预先缓存的BLOCKn-4的第一目标数据(如图2中的步骤“5.从缓存加载数据”)并执行该区块中的各笔交易(如图2中的“正在执行区块”)。在该区块执行完毕后可以得到(相对于BLOCKn而言的)前向写集,此时可以判断该前向写集中是否存在与第一读集中的数据标识相同的待更新数据标识:若存在,则使用所述待更新数据标识表征的该前向写集中的前向状态数据更新其表征的storage cache中的(BLOCKn对应的)第一目标数据(如图2中的步骤“6.更新缓存”)。当然,若该前向写集中存在与BLOCKn-1~BLOCKn-3分别对应第一读集中的数据标识相同的待更新数据标识,则可以通过同样的方式更新已缓存的这部分第一目标数据,不再赘述。
步骤106,在所述前向区块全部执行完毕的情况下,根据缓存的第一目标数据执行所述目标区块中的各笔交易。
如前所述,步骤102是在存在至少一个尚未执行完毕的前向区块的情况下确定的第一读集,区块链节点在执行步骤102和104的过程中或执行完成后,可以同时执行前向区块,直至全部前向区块均执行完毕的情况下,可以开始利用缓存的第一目标数据执行目标区块。
如前所述,区块链节点可以通过流水线架构处理各个区块。在该场景下,前述步骤102-106可以由该架构中的执行流水线完成,换言之,步骤102和104的执行主体可以为流水线框架中的执行流水线。
在本说明书所提供的技术方案中,针对待执行的目标区块和需要在所述目标区块之前执行的前向区块,区块链节点在存在至少一个尚未执行完毕的所述前向区块的情况下,根据所述目标区块中的各笔交易确定所述目标区块的第一读集,其中,所述第一读集中包含执行所述目标区块中各笔交易所需的第一目标数据的数据标识;然后根据所述数据标识从持久化保存的状态数据中读取并缓存第一目标数据;进而在所述前向区块全部执行完毕的情况下,根据缓存的第一目标数据执行所述目标区块中的各笔交易。
区块链节点在至少一个前向区块(即需要在目标区块之前执行的区块)尚未执行完毕的情况下,即从持久化保存的状态数据中读取并缓存执行目标区块所需的第一目标数据;基于此,在各个前向区块均执行完毕的情况下,利用预先读取并缓存的所述第一目标数据执行目标区块。可见,本方案摒弃了在执行目标区块时临时读取第一目标数据的方式,而是在执行目标区块之前(如在执行前向区块时或者执行前向区块之前)预先读取并缓存第一目标数据,即利用等待前向区块执行完毕的这段时间预先读取并缓存(执行目标区块所需的)第一目标数据,进而在执行完各个前向区块之后(因为各个区块按序执行,所以实际上是执行完与目标区块相邻的前一个前向区块之后)即可立即使用已缓存的第一目标数据执行目标区块。该方案在执行前向区块的时间内预先读取并缓存执行目标区块所需的第一目标数据,不仅通过复用这段时间实现了不同区块的并行处理,有效避免了在执行目标区块之前白白等待前向区块执行完毕,而且将读取第一目标数据的过程提前,从而在执行完前向区块之后可以立即开始(根据缓存的第一目标数据)执行目标区块,有效缩短目标区块的整体执行耗时,提升执行效率,从而有助于提升区块链系统的交易吞吐量。
由于前述第一读集在“存在至少一个尚未执行完毕的前向区块”的情况下确定,被缓存的相应的第一数据标识在确定第一读集后从持久化保存的状态数据中读取,而在目标区块执行之前还执行了至少一个前向区块,鉴于前向区块的执行过程可能会对目标区块中交易所需的目标数据产生影响,如前向区块的执行过程改变了某一智能合约的某一状态参数的key,而目标区块需要调用该状态参数。对于这种情况,若仍然采用预存读取并缓存的第一目标数据执行相应交易,则可能导致该交易执行结果出错。简而言之,因为状态数据对应的第一目标数据在前向区块执行完毕之前预先读取并缓存,而前向区块的执行过程可能会影响目标区块需要调用的状态数据,所以在实际执行目标区块时所需的目标数据可能与第一目标数据不同。
对此,为了避免交易执行出错,可以在执行目标区块之前再确定相应的第二读集,并将其与第一读集进行比较,以便确定其中发生变化的部分并针对性处理。例如,在执行所述目标区块中的各笔交易时,可以先根据所述目标区块中的各笔交易确定所述目标区块的第二读集,其中,所述第二读集中包含执行所述目标区块中各笔交易所需的第二目标数据的数据标识。其中,第二读集的具体确定方式可以与前述第一读集相同,不再赘述。可以理解的,第一读集和第二读集的形式相同,因为分别在不同时刻确定,所以二者的内容(即分别包含的数据标识)可能相同也可能不同:若持久化保存前述前向区块对应的状态数据时更新了(至少一个)第一目标数据的数据标识,则第二读集将与第一读集不同;反之,若未更新第一目标数据的数据标识,则第二读集将与第一读集相同。因此,在确定出第二读集后,可以比较第一读集和第二读集是否相同,即比较第一读集和第二读集分别包含的数据标识是否相同。其中,比较过程可以将两集合分别包含的各个数据标识逐一比较;或者,为提升效率,也可以先计算两集合的整体哈希并进行比较,以快速排除两集合相同的特殊情况,并在确定二者存在不同数据标识(两集合的整体哈希不同)的情况下再比较以进一步确定具体哪些数据标识不同;再或者,还可以通过布隆过滤器(bloom fliter)进行快速比较,具体比较过程可以参见相关技术中的记载,此处不再赘述。
根据比较结果,若第一读集和第二读集分别包含的数据标识完全相同,则表明(在前向区块全部执行完毕之后确定的)第二目标数据和(在前向区块全部执行完毕之前确定的)第一目标数据完全相同,此时可以直接根据缓存的各个第一目标数据执行所述目标区块中的各笔交易。反之,若第一读集和第二读集分别包含的数据标识不完全相同,则表明前述第二目标数据和第一目标数据并不完全相同,此时可以将第二读集包含的数据标识划分为两部分:与第一读集所包含数据标识相同的未变更标识、与第一读集所包含数据标识不同的已变更标识(如相对于第一读集中的数据标识发生变化的数据标识,或者相对于第一读集新增的数据标识等)。进一步的,可以从持久化保存的状态数据中读取所述已变更标识表征的第二目标数据;然后根据已缓存的所述未变更数据标识表征的第一目标数据和读取到的所述已变更数据标识表征的第二目标数据执行所述目标区块中的各笔交易。其中,“读取到的所述已变更数据标识表征的第二目标数据”可以在读取到之后缓存在所述缓存空间内,以便执行相应交易时从该缓存空间加载;或者,为了节省缓存空间,也可以执行交易的过程中临时读取,从而无需缓存这部分数据。
通过该方式,可以在前向区块的执行过程导致目标区块所需的目标数据发生变化的情况下,准确的确定出当前时刻(即全部前向区块均执行完毕后)执行目标区块实际所需的第二目标数据,进而根据这部分目标数据执行目标区块中的各个交易得到准确的执行结果,避免上述变化导致目标区块执行结果出错。其中,在目标区块和前向区块间隔较小的情况下,目标区块的执行过程通常仅会导致目标区块所需的很少一部分目标数据发生变化甚至全部目标数据均不发生变化,所以可以通过合理设置前述流水线架构中等待执行区块队列的长度(即该队列同时可容纳区块的最大数量),限制目标区块与前向区块尽量小,以便有效减少第二读集中已变更标识的数量(尽量使该数量趋近于0),从而使目标区块执行过程中尽可能多的额使用预先读取并缓存的第一目标数据,进而减少目标区块的执行耗时。
通过前述方式计算目标区块中的各笔交易,可以得到所述目标区块的目标写集,该目标写集中包含待写入数据(即执行所述各笔交易产生的、待持久化保存的状态数据)及其数据标识;此时,可以持久化保存所述目标写集中的这些待写入数据及其数据标识。该持久化过程可以由前述区块链架构中的持久化流水线完成。
在一实施例中,可以通过多种方式实现上述持久化过程。例如,可以在执行所述目标区块中任一笔交易完成的情况下,确定并缓存执行该笔交易得到的待写入数据及其数据标识,其中,执行所述目标区块中的各笔交易分别得到的待写入数据及其数据标识即构成所述目标写集;然后,在所述目标区块中的各笔交易均执行完毕的情况下,持久化保存被缓存的所述目标写集(即被缓存的所述目标区块中的各笔交易分别对应的目标数据的数据标识和数据值)。通过该方式,一个区块执行得到的全部待写入数据及其数据标识可以批量持久化保存在区块链节点的数据库中,从而减少区块链节点的上层逻辑(如持久化流水线)与底层数据库(如磁盘)之间的交互次数,提升持久化效率。
再例如,也可以在执行所述目标区块中任一笔交易完成的情况下,确定并持久化保存执行该笔交易得到的待写入数据及其数据标识。可以理解的是,在所述目标区块中的各笔交易均执行完毕的情况下,持久化保存完毕的所述各笔交易分别对应的目标数据的数据标识和数据值即构成所述目标写集。如图2所示,在BLOCKn-5执行完毕后,可以将其目标写集中的待写入数据和数据标识写入区块链节点所处节点设备的磁盘(如图2中的步骤“7.缓存的数据持久化到磁盘”)。通过该方式,可以及时地持久化保存执行交易得到的待写入数据及其数据标识,从而减少对这部分数据的管理压力并节省缓存空间,甚至可以不用缓存这部分数据。
可以理解的是,前述方式预读取并缓存的第一目标数据被用于执行目标区块,由于其占用了区块链节点宝贵的缓存空间(如节点设备的内存等),所以在执行所述目标区块中的各笔交易完成的情况下,可以及时删除已缓存的第一目标数据,以便及时回收这部分数据占用的缓存空间。当然,前述某些实施例需要读取并缓存所述已变更数据标识表征的第二目标数据,对此,在执行所述目标区块中的各笔交易完成的情况下,也可以删除被缓存的这部分目标数据,不再赘述。总而言之,在任一区块执行完毕后,可以删除为执行该区块而缓存的全部目标数据。
如前所述,区块链节点可以响应于所述目标区块共识完成,在存在尚未执行完毕的所述前向区块的情况下,确定所述目标区块的第一读集。实际上,区块链节点也可以响应于所述目标区块共识完成,在不存在尚未执行完毕的所述前向区块的情况下,确定所述目标区块的第一读集;进一步的,可以根据第一读集包含的所述数据标识从持久化保存的状态数据中读取第一目标数据,并根据读取到的第一目标数据执行所述目标区块中的各笔交易。第一读集的确定方式、第一目标数据的确定方式和第一区块的执行方式可以参见前述实施例,不再赘述。可见,区块链节点可以响应于所述目标区块共识完成直接确定该区块的第一读集,而无需判断是否存在尚未执行完毕的所述前向区块,不再赘述。
图3是一示例性实施例提供的一种设备的示意结构图。请参考图3,在硬件层面,该设备包括处理器302、内部总线304、网络接口306、内存308以及非易失性存储器310,当然还可能包括其他功能所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器302从非易失性存储器310中读取对应的计算机程序到内存308中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
如图4所示,图4是本说明书根据一示例性实施例提供的一种交易的执行装置的框图,该装置可以应用于如图3所示的设备中,作为区块链节点的功能模块,以实现本说明书的技术方案。该装置包括:
读集确定单元401,用于针对待执行的目标区块和需要在所述目标区块之前执行的前向区块,在存在至少一个尚未执行完毕的所述前向区块的情况下,根据所述目标区块中的各笔交易确定所述目标区块的第一读集,其中,所述第一读集中包含执行所述目标区块中各笔交易所需的第一目标数据的数据标识;
数据缓存单元402,用于根据所述数据标识从持久化保存的状态数据中读取并缓存第一目标数据;
交易执行单元403,用于在所述前向区块全部执行完毕的情况下,根据缓存的第一目标数据执行所述目标区块中的各笔交易。
可选的,还包括:
前向写集确定单元404,用于在任一前向区块执行完毕的情况下,确定所述任一前向区块的前向写集,所述前向写集中包含执行该前向区块中的各笔交易得到的、需要持久化保存的前向状态数据及其数据标识;
缓存更新单元405,用于若所述前向写集和第一读集中包含相同的待更新数据标识,则将所述待更新数据标识表征的已缓存的第一目标数据更新为所述待更新数据标识表征的前向状态数据。
可选的,还包括:
持久化更新单元406,用于若所述前向写集和第一读集中包含相同的待更新数据标识,则将所述待更新数据标识表征的已持久化保存的状态数据更新为所述待更新数据标识表征的前向状态数据。
可选的,所述交易执行单元403具体用于:
根据所述目标区块中的各笔交易确定所述目标区块的第二读集,其中,所述第二读集中包含执行所述目标区块中各笔交易所需的第二目标数据的数据标识;
若第一读集和第二读集分别包含的数据标识完全相同,则根据缓存的各个第一目标数据执行所述目标区块中的各笔交易;
若第一读集和第二读集分别包含的数据标识不完全相同,则将第二读集包含的数据标识划分为与第一读集所包含数据标识相同的未变更标识以及与第一读集所包含数据标识不同的已变更标识,并从持久化保存的状态数据中读取所述已变更标识表征的第二目标数据;以及,根据已缓存的所述未变更数据标识表征的第一目标数据和读取到的所述已变更数据标识表征的第二目标数据执行所述目标区块中的各笔交易。
可选的,所述读集确定单元401具体用于:
响应于所述目标区块共识完成,在存在至少一个尚未执行完毕的所述前向区块的情况下,根据所述目标区块包含的各笔交易确定所述目标区块的第一读集。
可选的,所述读集确定单元401具体用于:
根据任一交易的输入参数和/或调用的智能合约,确定执行该交易所需的第一目标数据的数据标识,其中,所述目标区块中各笔交易分别所需的第一目标数据的数据标识构成所述目标区块的第一读集。
可选的,所述状态数据被按照键值对的形式持久化保存,其中任一状态数据所对应的键为该状态数据的数据标识、所对应的值为该状态数据的数据值,所述数据缓存单元402具体用于:
从持久化保存的所述键值对的键中查询与所述数据标识相同的目标键,并读取所述目标键对应的目标值作为第一目标数据。
可选的,还包括:
持久化单元407,用于确定执行所述目标区块中的各笔交易得到的所述目标区块的目标写集,并持久化保存所述目标写集中包含的待写入数据及其数据标识。
可选的,所述持久化单元407具体用于:
在执行所述目标区块中任一笔交易完成的情况下,确定并缓存执行该笔交易得到的待写入数据及其数据标识,执行所述目标区块中的各笔交易分别得到的待写入数据及其数据标识构成所述目标写集;以及,在所述目标区块中的各笔交易均执行完毕的情况下,持久化保存被缓存的所述目标写集;或者,
在执行所述目标区块中任一笔交易完成的情况下,确定并持久化保存执行该笔交易得到的待写入数据及其数据标识。
可选的,还包括:
缓存回收单元408,用于在执行所述目标区块中的各笔交易完成的情况下,删除已缓存的第一目标数据。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Progra目标数据able Logic Device,PLD)(例如现场可编程门阵列(Field Progra目标数据able Gate Array,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为服务器系统。当然,本发明不排除随着未来计算机技术的发展,实现上述实施例功能的计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
虽然本说明书一个或多个实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。例如若使用到第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储、石墨烯存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。
Claims (13)
1.一种交易的执行方法,包括:
针对待执行的目标区块和需要在所述目标区块之前执行的前向区块,在存在至少一个尚未执行完毕的所述前向区块的情况下,根据所述目标区块中的各笔交易确定所述目标区块的第一读集,其中,所述第一读集中包含执行所述目标区块中各笔交易所需的第一目标数据的数据标识;
根据所述数据标识从持久化保存的状态数据中读取并缓存第一目标数据;
在所述前向区块全部执行完毕的情况下,根据缓存的第一目标数据执行所述目标区块中的各笔交易。
2.根据权利要求1所述的方法,还包括:
在任一前向区块执行完毕的情况下,确定所述任一前向区块的前向写集,所述前向写集中包含执行该前向区块中的各笔交易得到的、需要持久化保存的前向状态数据及其数据标识;
若所述前向写集和第一读集中包含相同的待更新数据标识,则将所述待更新数据标识表征的已缓存的第一目标数据更新为所述待更新数据标识表征的前向状态数据。
3.根据权利要求2所述的方法,还包括:
若所述前向写集和第一读集中包含相同的待更新数据标识,则将所述待更新数据标识表征的已持久化保存的状态数据更新为所述待更新数据标识表征的前向状态数据。
4.根据权利要求1所述的方法,所述根据缓存的所述目标数据执行所述目标区块中的各笔交易,包括:
根据所述目标区块中的各笔交易确定所述目标区块的第二读集,其中,所述第二读集中包含执行所述目标区块中各笔交易所需的第二目标数据的数据标识;
若第一读集和第二读集分别包含的数据标识完全相同,则根据缓存的各个第一目标数据执行所述目标区块中的各笔交易;
若第一读集和第二读集分别包含的数据标识不完全相同,则将第二读集包含的数据标识划分为与第一读集所包含数据标识相同的未变更标识以及与第一读集所包含数据标识不同的已变更标识,并从持久化保存的状态数据中读取所述已变更标识表征的第二目标数据;以及,根据已缓存的所述未变更数据标识表征的第一目标数据和读取到的所述已变更数据标识表征的第二目标数据执行所述目标区块中的各笔交易。
5.根据权利要求1所述的方法,在存在至少一个尚未执行完毕的所述前向区块的情况下,根据所述目标区块包含的各笔交易确定所述目标区块的第一读集,包括:
响应于所述目标区块共识完成,在存在至少一个尚未执行完毕的所述前向区块的情况下,根据所述目标区块包含的各笔交易确定所述目标区块的第一读集。
6.根据权利要求1所述的方法,所述根据所述目标区块包含的各笔交易确定所述目标区块的第一读集,包括:
根据任一交易的输入参数和/或调用的智能合约,确定执行该交易所需的第一目标数据的数据标识,其中,所述目标区块中各笔交易分别所需的第一目标数据的数据标识构成所述目标区块的第一读集。
7.根据权利要求1所述的方法,所述状态数据被按照键值对的形式持久化保存,其中任一状态数据所对应的键为该状态数据的数据标识、所对应的值为该状态数据的数据值,所述根据所述数据标识从持久化保存的状态数据中读取第一目标数据,包括:
从持久化保存的所述键值对的键中查询与所述数据标识相同的目标键,并读取所述目标键对应的目标值作为第一目标数据。
8.根据权利要求1所述的方法,还包括:
确定执行所述目标区块中的各笔交易得到的所述目标区块的目标写集,并持久化保存所述目标写集中包含的待写入数据及其数据标识。
9.根据权利要求8所述的方法,所述确定执行所述目标区块中的各笔交易得到的所述目标区块的目标写集,并持久化保存所述目标写集中包含的待写入数据及其数据标识,包括:
在执行所述目标区块中任一笔交易完成的情况下,确定并缓存执行该笔交易得到的待写入数据及其数据标识,执行所述目标区块中的各笔交易分别得到的待写入数据及其数据标识构成所述目标写集;以及,在所述目标区块中的各笔交易均执行完毕的情况下,持久化保存被缓存的所述目标写集;或者,
在执行所述目标区块中任一笔交易完成的情况下,确定并持久化保存执行该笔交易得到的待写入数据及其数据标识。
10.根据权利要求1所述的方法,还包括:
在执行所述目标区块中的各笔交易完成的情况下,删除已缓存的第一目标数据。
11.一种交易的执行装置,包括:
读集确定单元,用于针对待执行的目标区块和需要在所述目标区块之前执行的前向区块,在存在至少一个尚未执行完毕的所述前向区块的情况下,根据所述目标区块中的各笔交易确定所述目标区块的第一读集,其中,所述第一读集中包含执行所述目标区块中各笔交易所需的第一目标数据的数据标识;
数据缓存单元,用于根据所述数据标识从持久化保存的状态数据中读取并缓存第一目标数据;
交易执行单元,用于在所述前向区块全部执行完毕的情况下,根据缓存的第一目标数据执行所述目标区块中的各笔交易。
12.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-10中任一项所述的方法。
13.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1-10中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311120381.2A CN117076507A (zh) | 2023-08-31 | 2023-08-31 | 交易的执行方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311120381.2A CN117076507A (zh) | 2023-08-31 | 2023-08-31 | 交易的执行方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117076507A true CN117076507A (zh) | 2023-11-17 |
Family
ID=88702236
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311120381.2A Pending CN117076507A (zh) | 2023-08-31 | 2023-08-31 | 交易的执行方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117076507A (zh) |
-
2023
- 2023-08-31 CN CN202311120381.2A patent/CN117076507A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6875557B2 (ja) | サービス・データをブロックチェーン・システムに書き込むための方法およびデバイス | |
CN107038206B (zh) | Lsm树的建立方法、lsm树的数据读取方法和服务器 | |
CN113743941B (zh) | 一种在区块链中执行交易的方法、区块链和主节点 | |
US9679003B2 (en) | Rendezvous-based optimistic concurrency control | |
CN108628688B (zh) | 一种消息处理方法、装置及设备 | |
CN114827165B (zh) | 对多个交易进行分组的方法和区块链节点 | |
CN113743942B (zh) | 交易执行方法、区块链、主节点和主存储设备 | |
CN117312394B (zh) | 一种数据访问方法、装置、存储介质及电子设备 | |
WO2023231336A1 (zh) | 执行交易的方法和区块链节点 | |
WO2024001024A1 (zh) | 在区块链系统中执行交易的方法、区块链系统和节点 | |
WO2023160083A1 (zh) | 执行交易的方法、区块链、主节点和从节点 | |
CN114090637B (zh) | 数据存取方法、装置、设备及存储介质 | |
CN112559529A (zh) | 数据存储方法、装置、计算机设备及存储介质 | |
CN116822657B (zh) | 一种模型训练加速的方法、装置、存储介质及电子设备 | |
CN110430255A (zh) | 分布式集群中服务请求的处理方法、系统以及电子设备 | |
CN111427885B (zh) | 基于查找表的数据库管理方法和装置 | |
CN115374117A (zh) | 一种数据处理方法、装置、可读存储介质及电子设备 | |
CN115391341A (zh) | 分布式图数据处理系统、方法、装置、设备及存储介质 | |
CN113744062B (zh) | 在区块链中执行交易的方法、区块链节点和区块链 | |
CN113744061B (zh) | 在区块链系统中执行交易的方法、区块链系统、和从节点 | |
CN115391337A (zh) | 数据库分区的方法、装置、存储介质及电子设备 | |
CN113744063A (zh) | 区块链中执行交易的方法及装置 | |
WO2024001025A1 (zh) | 一种预执行缓存数据清理方法和区块链节点 | |
CN116707891A (zh) | 重放攻击检查方法和区块链节点 | |
CN117076507A (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 |