CN112561695B - 在区块链中并发执行交易的方法和装置 - Google Patents
在区块链中并发执行交易的方法和装置 Download PDFInfo
- Publication number
- CN112561695B CN112561695B CN201910913970.3A CN201910913970A CN112561695B CN 112561695 B CN112561695 B CN 112561695B CN 201910913970 A CN201910913970 A CN 201910913970A CN 112561695 B CN112561695 B CN 112561695B
- Authority
- CN
- China
- Prior art keywords
- transaction
- write
- version
- read
- variable
- 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
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/382—Payment protocols; Details thereof insuring higher security of transaction
- G06Q20/3829—Payment protocols; Details thereof insuring higher security of transaction involving key management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Abstract
本说明书实施例提供了一种在区块链中并发执行多个交易的方法和装置,其中,所述多个交易具有预定的提交顺序,其中包括第一交易,所述方法在区块链中的第一节点执行,所述第一节点的共享内存中当前记录有与第一变量对应的多个写版本,每个写版本对应于所述多个交易中的一个交易对第一变量的写操作的执行,所述写版本中包括与所述写操作对应的交易编号和该写操作的写入值,所述方法包括:确定在所述多个写版本中是否存在第一写版本,所述第一写版本对应于在前交易对所述第一变量的写操作,其中,所述在前交易为所述多个交易中交易编号小于所述第一交易的交易,其中,所述交易编号对应于交易的提交顺序;以及基于所述确定结果,执行第一交易中的对所述第一变量的读操作。
Description
技术领域
本说明书实施例涉及区块链技术领域,更具体地,涉及一种在区块链中并发执行多个交易的方法和装置。
背景技术
区块链技术是构建在点对点(P2P)网络上,利用链式数据结构来验证与存储数据,利用分布式节点共识算法来生成和更新数据,利用密码学的方式保证数据传输和访问的安全,利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。区块链技术也被称之为分布式账本技术,是一种去中心化的分布式数据库技术,其特点是去中心化、公开透明、不可篡改、可信任。区块链的每笔数据,都会广播到全网的区块链节点,每个全节点都有全量的、一致的数据。区块链中的节点通过发送交易而进行转账、存入数据等业务,区块链中的记账节点在交易池中收集区块链中的交易,执行所述交易,并在执行所述交易之后,将这些交易打包到区块中并扩散到区块链中。区块链中的验证节点会对从记账节点发出的区块进行验证,在验证通过之后,每个节点在接收到该区块时,都会执行该区块中包括的每个交易。为了保证各个节点的数据一致性,各个节点中在执行区块中的多个交易时,对该多个交易的提交顺序需要是一致的,这样才能得到一致的执行结果。因此,在现有技术中,记账节点在执行交易之前会按照预定规则对将要执行的多个交易进行编号,并按照编号的顺序依次执行多个交易,也即依次提交多个交易,并且其它节点在接收到该区块之后,也是按照上述交易编号顺序依次执行并提交所述多个交易。然而,所述多个交易并不一定都是相互依赖的,在两个交易之间不存在依赖性的情况中,并发执行这两个交易并不影响最终的结果。而如果并发执行的两个交易存在依赖性,则该并发执行将影响到最终的结果。
因此,需要一种更有效的在区块链中并发执行多个交易的方法。
发明内容
本说明书实施例旨在提供一种更有效的在区块链中并发执行交易的方案,以解决现有技术中的不足。
为实现上述目的,本说明书一个方面提供一种在区块链中并发执行多个交易的方法,其中,所述多个交易具有预定的提交顺序,其中包括第一交易,所述方法在区块链中的第一节点执行,所述第一节点的共享内存中当前记录有与第一变量对应的多个写版本,每个写版本对应于所述多个交易中的一个交易对第一变量的写操作的执行,所述写版本中包括与所述写操作对应的交易编号和该写操作的写入值,所述方法包括:
确定在所述多个写版本中是否存在第一写版本,所述第一写版本对应于在前交易对所述第一变量的写操作,其中,所述在前交易为所述多个交易中交易编号小于所述第一交易的交易,其中,所述交易编号对应于交易的提交顺序;以及
基于所述确定结果,执行第一交易中的对所述第一变量的读操作。
在一个实施例中,基于所述确定结果,执行第一交易中的对所述第一变量的读操作包括,在确定所述多个写版本中不存在第一写版本的情况中,读取所述第一变量的初始值。
在一个实施例中,基于所述确定结果,执行第一交易中的对所述第一变量的读操作包括,在确定所述多个写版本中存在至少一个第一写版本的情况中,从所述至少一个第一写版本中确定第二写版本,并从第二写版本中的写入值读取所述第一变量的值,其中,所述第二写版本对应的交易为所述至少一个第一写版本对应的至少一个交易中交易编号最大的交易。
在一个实施例中,其中,所述第一节点的共享内存中当前还记录有与第一变量对应的多个读版本,所述方法还包括,在执行第一交易中的对所述第一变量的读操作之后,在所述多个读版本中没有与第一交易对应的读版本的情况中,在所述共享内存中增加与第一交易对应的第一读版本,所述第一读版本包括第一交易的交易编号和所述第一变量的值的来源。
在一个实施例中,所述方法还包括,在所述多个读版本中已经包括与第一交易对应的读版本的情况中,基于所述第一变量的值的来源,对该与第一交易对应的读版本相应地修改。
在一个实施例中,所述第一变量值的来源为所读取的写版本中的交易编号。
在一个实施例中,所述多个交易中还包括第二交易,所述第二交易中包括对所述第一变量的写操作,所述第二交易的交易编号小于第一交易,在所述写操作执行于在所述变量读取表中增加与第一交易对应的第一读版本之后情况中,所述方法还包括:
在执行所述写操作之后,基于所述第一读版本,确定第一交易中的所述读操作是否需要重新执行;
在确定第一交易中的所述读操作需要重新执行的情况中,通知本地重新执行第一交易中的对所述第一变量的读操作。
在一个实施例中,基于所述第一读版本,确定第一交易中的所述读操作是否需要重新执行包括,确定所述第一读版本中的所述第一变量的值的来源是否对应于编号小于等于第二交易的交易或者对应于第一变量初始值。
在一个实施例中,所述写版本中还包括对应的交易对第一变量的写操作的写入次数,所述读版本中的第一变量的值的来源包括所读取的写版本中的交易编号和写入次数,其中,在执行所述写操作之后,基于所述第一读版本,确定第一交易中的所述读操作是否需要重新执行包括,在提交所述第二交易之后,确定所述第一读版本中的所述第一变量的值的来源是否满足以下任一项:对应于第一变量初始值、交易编号小于第二交易的交易编号、交易编号等于第二交易的交易编号且写入次数小于所述第二交易中的所述写操作的写入次数。
在一个实施例中,在所述共享内存中,在第一变量的与第二交易对应的数据集中记录与第二交易对应的写版本和读版本,所述方法还包括,在提交所述第二交易之后,在与第二交易对应的数据集中标明:所述第二交易已提交,并将与第三交易对应的数据集删除,其中,所述第三交易依据交易编号为第二交易前一个交易。
在一个实施例中,所述方法还包括,在执行所述写操作之后,在所述多个写版本中没有与第二交易对应的写版本的情况中,在所述共享内存中增加与第二交易对应的写版本。
在一个实施例中,所述方法还包括,在所述多个写版本中已经包括与第二交易对应的写版本的情况中,基于所述第二交易的所述写操作的写入值修改与第二交易对应的写版本。
本说明书另一方面提供一种在区块链中并发执行多个交易的装置,其中,所述多个交易具有预定的提交顺序,其中包括第一交易,所述装置部署在区块链中的第一节点中,所述第一节点的共享内存中当前记录有与第一变量对应的多个写版本,每个写版本对应于所述多个交易中的一个交易对第一变量的写操作的执行,所述写版本中包括与所述写操作对应的交易编号和该写操作的写入值,所述装置包括:
第一确定单元,配置为,确定在所述多个写版本中是否存在第一写版本,所述第一写版本对应于在前交易对所述第一变量的写操作,其中,所述在前交易为所述多个交易中交易编号小于所述第一交易的交易,其中,所述交易编号对应于交易的提交顺序;以及
执行单元,配置为,基于所述确定结果,执行第一交易中的对所述第一变量的读操作。
在一个实施例中,所述第一确定单元还配置为,在确定所述多个写版本中不存在第一写版本的情况中,读取所述第一变量的初始值。
在一个实施例中,所述执行单元还配置为,在确定所述多个写版本中存在至少一个第一写版本的情况中,从所述至少一个第一写版本中确定第二写版本,并从第二写版本中的写入值读取所述第一变量的值,其中,所述第二写版本对应的交易为所述至少一个第一写版本对应的至少一个交易中交易编号最大的交易。
在一个实施例中,其中,所述第一节点的共享内存中当前还记录有与第一变量对应的多个读版本,所述装置还包括,第一增加单元,配置为,在执行第一交易中的对所述第一变量的读操作之后,在所述多个读版本中没有与第一交易对应的读版本的情况中,在所述共享内存中增加与第一交易对应的第一读版本,所述第一读版本包括第一交易的交易编号和所述第一变量的值的来源。
在一个实施例中,所述装置还包括,第一修改单元,配置为,在所述多个读版本中已经包括与第一交易对应的读版本的情况中,基于所述第一变量的值的来源,对该与第一交易对应的读版本相应地修改。
在一个实施例中,所述多个交易中还包括第二交易,所述第二交易中包括对所述第一变量的写操作,所述第二交易的交易编号小于第一交易,在所述写操作执行于在所述变量读取表中增加与第一交易对应的第一读版本之后情况中,所述装置还包括:
第二确定单元,配置为,在执行所述写操作之后,基于所述第一读版本,确定第一交易中的所述读操作是否需要重新执行;
通知单元,配置为,在确定第一交易中的所述读操作需要重新执行的情况中,通知本地重新执行第一交易中的对所述第一变量的读操作。
在一个实施例中,所述第二确定单元还配置为,确定所述第一读版本中的所述第一变量的值的来源是否对应于编号小于等于第二交易的交易或者对应于第一变量初始值。
在一个实施例中,所述写版本中还包括对应的交易对第一变量的写操作的写入次数,所述读版本中的第一变量的值的来源包括所读取的写版本中的交易编号和写入次数,其中,所述第二确定单元还配置为,在提交所述第二交易之后,确定所述第一读版本中的所述第一变量的值的来源是否满足以下任一项:对应于第一变量初始值、交易编号小于第二交易的交易编号、交易编号等于第二交易的交易编号且写入次数小于所述第二交易中的所述写操作的写入次数。
在一个实施例中,在所述共享内存中,在第一变量的与第二交易对应的数据集中记录与第二交易对应的写版本和读版本,所述装置还包括,标明单元,配置为,在提交所述第二交易之后,在与第二交易对应的数据集中标明:所述第二交易已提交,以及删除单元,配置为,将与第三交易对应的数据集删除,其中,所述第三交易依据交易编号为第二交易前一个交易。
在一个实施例中,所述装置还包括,第二增加单元,配置为,在执行所述写操作之后,在所述多个写版本中没有与第二交易对应的写版本的情况中,在所述共享内存中增加与第二交易对应的写版本。
在一个实施例中,所述装置还包括,第二修改单元,配置为,在所述多个写版本中已经包括与第二交易对应的写版本的情况中,基于所述第二交易的所述写操作的写入值修改与第二交易对应的写版本。
本说明书另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。
本说明书另一方面提供一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。
通过根据本说明书实施例的在区块链中并发执行交易的方案,通过在共享内存中记录与各个变量对应的读写版本,并基于所述读写版本进行读写操作,从而使得对于没有相互依赖性的多个交易,可并发执行这些交易,对于具有相互依赖性的多个交易,可基于所述读写版本避免交易冲突,从而在保证计算结果一致性的同时,加快了处理速度,提高了处理性能。
附图说明
通过结合附图描述本说明书实施例,可以使得本说明书实施例更加清楚:
图1示出根据本说明书实施例的区块链系统示意图;
图2示出根据本说明书实施例的区块链节点中的内存结构示意图;
图3示出执行交易n中对变量k1的读取流程图;
图4示意示出根据本说明书一个实施例的一种在区块链中并发执行多个交易的方法流程图;
图5示出根据本说明书一个实施例的一种在区块链中并发执行多个交易的装置5000。
具体实施方式
下面将结合附图描述本说明书实施例。
图1示出根据本说明书实施例的区块链系统示意图。如图1所示,所述系统中包括构成区块链的多个节点(图中示意示出6个节点),这些节点两两相连,其中例如包括节点11、节点12和节点13。如本领域技术人员所知,在区块链中,一些节点会收集区块链中的多个交易放入交易池中并竞争记账权。例如图中的节点11通过获取记账权而成为记账节点。节点11在成为记账节点之后会执行其交易池中的多个交易,并将该多个交易打包成区块发送给其它节点,例如发送给节点12。节点12将会对该区块进行验证,并同样地执行该区块中的多个交易。在预定数目个节点对该区块进行验证之后,也即对该区块达到了共识,区块链中的其它节点(例如节点13)将不需要继续对该区块进行验证,而是直接对该区块中的交易进行执行,以更新本地的相关数据。
所述多个交易中可能涉及到对多个变量的计算,在两个交易中不涉及相同的变量的情况中,其执行顺序并不会影响最终的计算结果,而在两个交易中涉及相同的变量的情况中,其执行顺序将会影响最终的计算结果。因此,在本说明书实施例中,为了保证各个节点对多个交易的执行结果是相同的,在各个节点的共享内存中记录各个变量的条目,在变量的条目中,记录了各个交易对该变量的读写操作。
图2示出根据本说明书实施例的区块链节点中的内存结构示意图。如图2所示,在该节点的内存中,包括两级缓冲区:第一级缓冲区L1和第二级缓冲区L2。其中,缓冲区L1仅与执行交易的线程相对应,例如,图2中的缓冲区L1为执行交易3的线程独享的缓冲区,其中记录线程3在执行交易3的过程中对变量的读写记录,其中L1中的T3表示交易3。例如,如图2中所示,L1包括写表和读表,其中写表中记录了k1W2和k5W8,分别表示对k1进行了第2次写入,对k5进行了第8次写入,读表中记录了k2_7.1和k3_0,分别表示读取了交易7对变量k2的第1次写入,读取了k3的初始值。
缓冲区L2为共享内存,即并发执行的多个线程都可以访问该缓冲区L2。如图2中所示,缓冲区L2中包括与各个变量对应的条目,例如变量k1的条目中包括TN4P、TN3P、TN2P、TN1,其中,TN4P、TN3P、TN2P、TN1为与各个交易对应的数据集,例如,TN4P与交易4对应,TN3P与交易3对应,其中TN4P中的P表示交易4还未提交,TN1表示交易1已提交。图2中L2右侧示意示出了数据集的构成,其中至少包括写版本和读版本。所述数据集中还可以包括提交标记,用于指示该数据集对应的交易是否提交,例如该标记的初始值为0,在相应的交易提交之后,将该标记修改为1。
例如,上述线程3在对k1进行第1次写入之后,在所述k1条目中还没有与交易3对应的数据集的情况中(即在该写入之前没有执行过交易3中的对k1的读取或写入),则该条目中增加一个与交易3对应的数据集,并且该数据集中的写版本例如为3W1<12>,其中,3表示交易3,1表示第1次写入,12表示该写入的值。而在线程3对k1进行进行第2次写入时,则可将该与交易3对应的数据集中的写版本修改为3W2<10>。当线程3对k1首次进行读取之后,可将该数据集中的读版本从默认值(例如“-1”)修改为3R1.2,表示交易3读取了交易1的第2次写入的k1值。
可以理解,图2所示的变量条目仅仅是示意性的,并不用于限制本说明书实施例的范围。在一个实施例中,在变量条目中可仅包括写版本,从而,在执行交易中的读操作时,可通过基于写版本判断编号在前的并发执行的交易是否执行了写操作来进行读操作,而在执行交易的写操作时,可对编号在后的交易都进行通知,以使得编号在后的执行过读操作的交易都重新执行读操作。在一个实施例中,在变量访问表中可仅包括读版本,从而,在执行交易中的读操作时,可直接进行,在执行交易的写操作时,可通过基于读版本判断编号在后的同时执行的交易是否执行了读操作,并在提交之后通知执行了读操作的交易重新执行读操作。
图3示出执行交易n中对变量k1的读取流程图。通过如上所述设置的缓冲区L1和L2,例如,交易n对应的线程n在将要读取k1时,通过图3所示的读取流程图进行读取。在步骤301,线程n首先确定L1的写表中是否包括k1,即,从L1中确定其之前有没有对k1进行写入,如果写入,则在步骤302,返回写表中k1值,即,将该写入值作为k1的读取值,如果没有写入,在步骤303,确定L1的读表中是否包括k1,即,从L1中确定其之前有没有读取k1,如果读取过,则在步骤304,返回读表中的k1值,即将该之前的读取值作为k1的读取值。如果确定线程3之前没有读取k1,则在步骤305确定L2中是否包括k1,如果包括,则在步骤306,从k1中的条目对图2中的k1的各个数据集依次确定是否存在小于n的交易对变量k1的写版本,如果存在,在步骤307,将第一个确定的所述写版本的k1值返回作为读取值,如果没有写入过,则在步骤308,从内存或持久存储器(例如rocksDB)中读取k1的初始值作为读取值。
线程n在执行交易n中的写入k1的情况中,在执行该写入之后,线程n可通过L2中记录的读版本,确定是否存在需要重读的读操作。
可以理解,上文中的描述只是示意性地,而不是用于限制本说明书实施例的范围。例如,所述读写版本不限于为上述具体形式,例如,所述版本中不需要R、W,在保证预定操作的情况中,所述版本中可以不需要写入次数,等等。下文将详细描述根据本说明书实施例的并发执行交易的过程。
图4示意示出根据本说明书一个实施例的一种在区块链中并发执行多个交易的方法流程图,其中,所述多个交易具有预定的提交顺序,其中包括第一交易,所述方法在区块链中的第一节点执行,所述第一节点的共享内存中当前记录有与第一变量对应的多个写版本,每个写版本对应于所述多个交易中的一个交易对第一变量的写操作的执行,所述写版本中包括与所述写操作对应的交易编号和该写操作的写入值,所述方法包括:
步骤S402,确定在所述多个写版本中是否存在第一写版本,所述第一写版本对应于在前交易对所述第一变量的写操作,其中,所述在前交易为所述多个交易中交易编号小于所述第一交易的交易,其中,所述交易编号对应于交易的提交顺序;以及
步骤S404,基于所述确定结果,执行第一交易中的对所述第一变量的读操作。
首先,在步骤S402,确定在所述多个写版本中是否存在第一写版本,所述第一写版本对应于在前交易对所述第一变量的写操作,其中,所述在前交易为所述多个交易中交易编号小于所述第一交易的交易,其中,所述交易编号对应于交易的提交顺序。
如上文中参考图1中所述,该方法在区块链中的一个节点执行。该节点在打包区块时,或者该节点在接收到新生成的区块之后,都会对相关的多个交易进行执行提交。例如,一个区块中可包括几千笔交易,而这几千笔交易可能涉及几百个变量,其中,多个交易可能访问不同的变量,或者,多个交易可能访问相同的变量。在现有技术中,在记账节点中,已经根据预定规则确定了将打包到一个区块中的多个交易各自的交易编号,该交易编号的顺序指示了交易的执行顺序和提交顺序。在本说明书实施例中,为了使得最后的计算结果与现有技术中的串行计算结果相同,对区块中的多个交易保留预定好的提交顺序,即,以各个交易的编号顺序作为其各自的提交顺序,同时,基于各个节点中记录的变量条目,使得没有依赖关系的各个交易可并发执行,并使得具有依赖关系的各个交易避免交易冲突,其中,对于先后编号的交易1和交易2,如果在交易1中对第一变量进行写入,在交易2中对第一变量进行读取,则交易2依赖于交易1的结果。
如上述参考图2所述,在共享内存中(即图2中的L2)中记录了各个变量的条目,例如图2中的变量k1为所述第一变量,变量k1的与各个交易对应的数据集中可能会包括与该交易对应的写版本。在一个实施例中,该写版本的形式例如为nW<xxx>,其中,n为执行该写入的交易编号,W表示写入,“xxx”为该写入操作的写入值。可以理解,所述写版本的具体形式不限于该形式,只要其中包括交易编号和写入值即可。在一个实施例中,所述写版本的形式例如为nWu<xxx>,其中u表示交易n对变量k1的写入次数。
如上述参考图3的描述,当交易n将要读取k1时,当在L1中没有读取到k1的值之后,将确定L2是否有可以读取的值。即,在L2中记录的与k1对应的多个写版本中,确定有没有交易编号小于n的写版本,也即,确定有没有交易n之前的交易已经对k1进行了写操作。所述交易编号对应于交易的提交顺序,提交顺序越靠前,交易编号越小。
在步骤S404,基于所述确定结果,执行第一交易中的对所述第一变量的读操作。
在确定存在交易编号小于n的写版本的情况中,从交易编号小于n的写版本中交易编号最大的写版本中读取k1的值。例如,参考图2,当进行交易3中对k1的读取时,如果与k1对应条目中包括写版本:1W2<12>、2W1<10>和4W1<23>,其中,交易编号小于n的写版本有1W2<12>和2W1<10>,取其中交易编号最大的写版本中的写入值(即10)作为该次读取的读取值。在与k1对应的条目中没有交易编号小于3的写版本的情况中,则从内存中或者持久存储器(例如rocksdb)中读取变量k1的初始值作为读取值。
在所述L2中的各个变量的条目中的数据集中还可以包括与相应交易对应的读版本。在一个实施例中,针对变量k1,所述读版本的形式例如为mRq,q为自然数,表示交易m读取了交易q写入k1的值。在一个实施例中,针对变量k1,所述读版本的形式例如为mRq.p,表示交易m读取了交易q第p次写入的值。当从内存中或者持久存储器(例如rocksdb)中读取变量k1的初始值作为读取值的情况中,所述读版本的形式为mR0。
例如,在进行交易3对变量k1的读取之后,如果在k1的条目中还没有与交易3对应的数据集,则在该条目增加该数据集,并在其中记录读版本,例如3R2.1、3R0或3R2;如果在k1的条目中已经包括了与交易3对应的数据集,但是其中没有读版本,则在其中添加读版本;如在k1的条目中已经包括了与交易3对应的数据集,并在数据集中已经包括了读版本,则根据最新的读取修改原有的读版本。
在一个实施例中,当交易n对变量k1进行一次写入之后,在k1的条目中与交易n对应的数据集中将包括nW<xxx>。为了避免在交易n之后的交易对变量k1的误读,可在交易n进行所述写入之后,立即检测与k1对应的读版本中是否存在mRq,其中m>n且q≤n,即,检测是否存在一个交易n后面的交易m超前读了交易n的本次写入之前的k1值,其中,交易n的本次写入之前的k1值包括:k1的初始值(即,q=0)、小于交易n的交易的写入值(即,q<n)、以及交易n在本次写入之前写入的k1值(即q=n)。如果存在上述mRq,则需要回撤该读版本相应的交易。
在一个实施例中,当交易n对变量k1进行一次写入之后,在k1的条目中与交易n对应的数据集中将包括nWu<xxx>。在该情况中,不需要在交易n进行所述写入之后立即检测读版本。例如,可以在提交交易n之后,在与变量k1对应的多个读版本中检测是否存在mRq.p,其中m>n且q<n,或者,m>n、q=n且p<u。在该情况中,通过写入次数p可确定读版本对应的读取值是否是该次写入的写入值。其中,m>n且q<n表示该读版本对应的交易读取了错误的交易写入的值,m>n、q=n且p<u表示该读版本对应的交易读取了正确的交易写入的值,但是该写入值后来又被再次更新。如果存在上述mRq.p,则需要回撤该读版本相应的交易。
例如,交易2对变量k1进行第1次写入之后,记录写版本2W1<22>,例如,在交易2提交之后,通过查询与k1对应的读版本,确定与k1对应的读版本包括3R1.1,从而可确定交易3超前读取了交易1对变量k1的第1次写入,因此需要回撤交易3。
例如,交易2对变量k1进行第2次写入之后,记录写版本2W2<22>,在交易2提交之后,通过查询与k1对应的读版本,确定与k1对应的读版本包括3R2.1,从而可确定交易3超前读取了交易2对变量k1的第1次写入,因此需要回撤交易3。
在上述确定需要回撤该读版本相应的交易的情况中,例如,可通过本地的交易调度器以重新进行第一交易中的所述读操作及相关的后续操作,或者,如果执行第一交易的线程不变,可在该线程的私有存储空间中进行标记,以通知该线程进行重读操作。
上述交易n在提交之后,将与变量k1对应的条目中的与已提交的交易n对应的数据集中的提交标记修改为1,并可将与变量k1对应的条目中的与已提交的交易n-1对应的数据集删除。
图5示出根据本说明书一个实施例的一种在区块链中并发执行多个交易的装置5000,其中,所述多个交易具有预定的提交顺序,其中包括第一交易,所述装置部署在区块链中的第一节点中,所述第一节点的共享内存中当前记录有与第一变量对应的多个写版本,每个写版本对应于所述多个交易中的一个交易对第一变量的写操作的执行,所述写版本中包括与所述写操作对应的交易编号和该写操作的写入值,所述装置包括:
第一确定单元501,配置为,确定在所述多个写版本中是否存在第一写版本,所述第一写版本对应于在前交易对所述第一变量的写操作,其中,所述在前交易为所述多个交易中交易编号小于所述第一交易的交易,其中,所述交易编号对应于交易的提交顺序;以及
执行单元502,配置为,基于所述确定结果,执行第一交易中的对所述第一变量的读操作。
在一个实施例中,所述第一确定单元还配置为,在确定所述多个写版本中不存在第一写版本的情况中,读取所述第一变量的初始值。
在一个实施例中,所述执行单元还配置为,在确定所述多个写版本中存在至少一个第一写版本的情况中,从所述至少一个第一写版本中确定第二写版本,并从第二写版本中的写入值读取所述第一变量的值,其中,所述第二写版本对应的交易为所述至少一个第一写版本对应的至少一个交易中交易编号最大的交易。
在一个实施例中,其中,所述第一节点的共享内存中当前还记录有与第一变量对应的多个读版本,所述装置还包括,第一增加单元503,配置为,在执行第一交易中的对所述第一变量的读操作之后,在所述多个读版本中没有与第一交易对应的读版本的情况中,在所述共享内存中增加与第一交易对应的第一读版本,所述第一读版本包括第一交易的交易编号和所述第一变量的值的来源。
在一个实施例中,所述装置还包括,第一修改单元504,配置为,在所述多个读版本中已经包括与第一交易对应的读版本的情况中,基于所述第一变量的值的来源,对该与第一交易对应的读版本相应地修改。
在一个实施例中,所述多个交易中还包括第二交易,所述第二交易中包括对所述第一变量的写操作,所述第二交易的交易编号小于第一交易,在所述写操作执行于在所述变量读取表中增加与第一交易对应的第一读版本之后情况中,所述装置还包括:
第二确定单元505,配置为,在执行所述写操作之后,基于所述第一读版本,确定第一交易中的所述读操作是否需要重新执行;
通知单元506,配置为,在确定第一交易中的所述读操作需要重新执行的情况中,通知本地重新执行第一交易中的对所述第一变量的读操作。
在一个实施例中,所述第二确定单元还配置为,确定所述第一读版本中的所述第一变量的值的来源是否对应于编号小于等于第二交易的交易或者对应于第一变量初始值。
在一个实施例中,所述写版本中还包括对应的交易对第一变量的写操作的写入次数,所述读版本中的第一变量的值的来源包括所读取的写版本中的交易编号和写入次数,其中,所述第二确定单元还配置为,在提交所述第二交易之后,确定所述第一读版本中的所述第一变量的值的来源是否满足以下任一项:对应于第一变量初始值、交易编号小于第二交易的交易编号、交易编号等于第二交易的交易编号且写入次数小于所述第二交易中的所述写操作的写入次数。
在一个实施例中,在所述共享内存中,在第一变量的与第二交易对应的数据集中记录与第二交易对应的写版本和读版本,所述装置还包括,标明单元507,配置为,在提交所述第二交易之后,在与第二交易对应的数据集中标明:所述第二交易已提交,以及删除单元508,配置为,将与第三交易对应的数据集删除,其中,所述第三交易依据交易编号为第二交易前一个交易。
在一个实施例中,所述装置还包括,第二增加单元509,配置为,在执行所述写操作之后,在所述多个写版本中没有与第二交易对应的写版本的情况中,在所述共享内存中增加与第二交易对应的写版本。
在一个实施例中,所述装置还包括,第二修改单元510,配置为,在所述多个写版本中已经包括与第二交易对应的写版本的情况中,基于所述第二交易的所述写操作的写入值修改与第二交易对应的写版本。
本说明书另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。
本说明书另一方面提供一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。
通过根据本说明书实施例的在区块链中并发执行交易的方案,通过在共享内存中记录与各个变量对应的读写版本,并基于所述读写版本进行读写操作,从而使得对于没有相互依赖性的多个交易,可并发执行这些交易,对于具有相互依赖性的多个交易,可基于所述读写版本避免交易冲突,从而在保证计算结果一致性的同时,加快了处理速度,提高了处理性能。
需要理解,本文中的“第一”,“第二”等描述,仅仅为了描述的简单而对相似概念进行区分,并不具有其他限定作用。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执轨道,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执轨道的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (26)
1.一种在区块链中并发执行多个交易的方法,其中,所述多个交易具有预定的提交顺序,其中包括第一交易,所述方法在区块链中的第一节点执行,所述第一节点的共享内存中当前记录有与第一变量对应的多个写版本,每个写版本对应于所述多个交易中的一个交易对第一变量的写操作的执行,所述写版本中包括与所述写操作对应的交易编号和该写操作的写入值,所述方法包括:
确定在所述多个写版本中是否存在第一写版本,所述第一写版本对应于在前交易对所述第一变量的写操作,其中,所述在前交易为所述多个交易中交易编号小于所述第一交易的交易,其中,所述交易编号对应于交易的提交顺序;以及
基于所述确定结果,执行第一交易中的对所述第一变量的读操作。
2.根据权利要求1所述的方法,其中,基于所述确定结果,执行第一交易中的对所述第一变量的读操作包括,在确定所述多个写版本中不存在第一写版本的情况中,读取所述第一变量的初始值。
3.根据权利要求1所述的方法,其中,基于所述确定结果,执行第一交易中的对所述第一变量的读操作包括,在确定所述多个写版本中存在至少一个第一写版本的情况中,从所述至少一个第一写版本中确定第二写版本,并从第二写版本中的写入值读取所述第一变量的值,其中,所述第二写版本对应的交易为所述至少一个第一写版本对应的至少一个交易中交易编号最大的交易。
4.根据权利要求1所述的方法,其中,所述第一节点的共享内存中当前还记录有与第一变量对应的多个读版本,所述方法还包括,在执行第一交易中的对所述第一变量的读操作之后,在所述多个读版本中没有与第一交易对应的读版本的情况中,在所述共享内存中增加与第一交易对应的第一读版本,所述第一读版本包括第一交易的交易编号和所述第一变量的值的来源。
5.根据权利要求4所述的方法,还包括,在所述多个读版本中已经包括与第一交易对应的读版本的情况中,基于所述第一变量的值的来源,对该与第一交易对应的读版本相应地修改。
6.根据权利要求4所述的方法,其中,所述第一变量值的来源为所读取的写版本中的交易编号。
7.根据权利要求4所述的方法,其中,所述多个交易中还包括第二交易,所述第二交易中包括对所述第一变量的写操作,所述第二交易的交易编号小于第一交易,在所述写操作执行于在所述变量读取表中增加与第一交易对应的第一读版本之后情况中,所述方法还包括:
在执行所述写操作之后,基于所述第一读版本,确定第一交易中的所述读操作是否需要重新执行;
在确定第一交易中的所述读操作需要重新执行的情况中,通知本地重新执行第一交易中的对所述第一变量的读操作。
8.根据权利要求7所述的方法,其中,基于所述第一读版本,确定第一交易中的所述读操作是否需要重新执行包括,确定所述第一读版本中的所述第一变量的值的来源是否对应于编号小于等于第二交易的交易或者对应于第一变量初始值。
9.根据权利要求7所述的方法,其中,所述写版本中还包括对应的交易对第一变量的写操作的写入次数,所述读版本中的第一变量的值的来源包括所读取的写版本中的交易编号和写入次数,其中,在执行所述写操作之后,基于所述第一读版本,确定第一交易中的所述读操作是否需要重新执行包括,在提交所述第二交易之后,确定所述第一读版本中的所述第一变量的值的来源是否满足以下任一项:对应于第一变量初始值、交易编号小于第二交易的交易编号、交易编号等于第二交易的交易编号且写入次数小于所述第二交易中的所述写操作的写入次数。
10.根据权利要求9所述的方法,其中,在所述共享内存中,在第一变量的与第二交易对应的数据集中记录与第二交易对应的写版本和读版本,所述方法还包括,在提交所述第二交易之后,在与第二交易对应的数据集中标明:所述第二交易已提交,并将与第三交易对应的数据集删除,其中,所述第三交易依据交易编号为第二交易前一个交易。
11.根据权利要求7所述的方法,还包括,在执行所述写操作之后,在所述多个写版本中没有与第二交易对应的写版本的情况中,在所述共享内存中增加与第二交易对应的写版本。
12.根据权利要求11所述的方法,还包括,在所述多个写版本中已经包括与第二交易对应的写版本的情况中,基于所述第二交易的所述写操作的写入值修改与第二交易对应的写版本。
13.一种在区块链中并发执行多个交易的装置,其中,所述多个交易具有预定的提交顺序,其中包括第一交易,所述装置部署在区块链中的第一节点中,所述第一节点的共享内存中当前记录有与第一变量对应的多个写版本,每个写版本对应于所述多个交易中的一个交易对第一变量的写操作的执行,所述写版本中包括与所述写操作对应的交易编号和该写操作的写入值,所述装置包括:
第一确定单元,配置为,确定在所述多个写版本中是否存在第一写版本,所述第一写版本对应于在前交易对所述第一变量的写操作,其中,所述在前交易为所述多个交易中交易编号小于所述第一交易的交易,其中,所述交易编号对应于交易的提交顺序;以及
执行单元,配置为,基于所述确定结果,执行第一交易中的对所述第一变量的读操作。
14.根据权利要求13所述的装置,其中,所述第一确定单元还配置为,在确定所述多个写版本中不存在第一写版本的情况中,读取所述第一变量的初始值。
15.根据权利要求13所述的装置,其中,所述执行单元还配置为,在确定所述多个写版本中存在至少一个第一写版本的情况中,从所述至少一个第一写版本中确定第二写版本,并从第二写版本中的写入值读取所述第一变量的值,其中,所述第二写版本对应的交易为所述至少一个第一写版本对应的至少一个交易中交易编号最大的交易。
16.根据权利要求13所述的装置,其中,所述第一节点的共享内存中当前还记录有与第一变量对应的多个读版本,所述装置还包括,第一增加单元,配置为,在执行第一交易中的对所述第一变量的读操作之后,在所述多个读版本中没有与第一交易对应的读版本的情况中,在所述共享内存中增加与第一交易对应的第一读版本,所述第一读版本包括第一交易的交易编号和所述第一变量的值的来源。
17.根据权利要求16所述的装置,还包括,第一修改单元,配置为,在所述多个读版本中已经包括与第一交易对应的读版本的情况中,基于所述第一变量的值的来源,对该与第一交易对应的读版本相应地修改。
18.根据权利要求13所述的装置,其中,所述第一变量值的来源为所读取的写版本中的交易编号。
19.根据权利要求13所述的装置,其中,所述多个交易中还包括第二交易,所述第二交易中包括对所述第一变量的写操作,所述第二交易的交易编号小于第一交易,在所述写操作执行于在所述变量读取表中增加与第一交易对应的第一读版本之后情况中,所述装置还包括:
第二确定单元,配置为,在执行所述写操作之后,基于所述第一读版本,确定第一交易中的所述读操作是否需要重新执行;
通知单元,配置为,在确定第一交易中的所述读操作需要重新执行的情况中,通知本地重新执行第一交易中的对所述第一变量的读操作。
20.根据权利要求19所述的装置,其中,所述第二确定单元还配置为,确定所述第一读版本中的所述第一变量的值的来源是否对应于编号小于等于第二交易的交易或者对应于第一变量初始值。
21.根据权利要求19所述的装置,其中,所述写版本中还包括对应的交易对第一变量的写操作的写入次数,所述读版本中的第一变量的值的来源包括所读取的写版本中的交易编号和写入次数,其中,所述第二确定单元还配置为,在提交所述第二交易之后,确定所述第一读版本中的所述第一变量的值的来源是否满足以下任一项:对应于第一变量初始值、交易编号小于第二交易的交易编号、交易编号等于第二交易的交易编号且写入次数小于所述第二交易中的所述写操作的写入次数。
22.根据权利要求21所述的装置,其中,在所述共享内存中,在第一变量的与第二交易对应的数据集中记录与第二交易对应的写版本和读版本,所述装置还包括,标明单元,配置为,在提交所述第二交易之后,在与第二交易对应的数据集中标明:所述第二交易已提交,以及删除单元,配置为,将与第三交易对应的数据集删除,其中,所述第三交易依据交易编号为第二交易前一个交易。
23.根据权利要求19所述的装置,还包括,第二增加单元,配置为,在执行所述写操作之后,在所述多个写版本中没有与第二交易对应的写版本的情况中,在所述共享内存中增加与第二交易对应的写版本。
24.根据权利要求23所述的装置,还包括,第二修改单元,配置为,在所述多个写版本中已经包括与第二交易对应的写版本的情况中,基于所述第二交易的所述写操作的写入值修改与第二交易对应的写版本。
25.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-12中任一项的所述的方法。
26.一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-12中任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910913970.3A CN112561695B (zh) | 2019-09-25 | 2019-09-25 | 在区块链中并发执行交易的方法和装置 |
PCT/CN2020/100486 WO2021057165A1 (zh) | 2019-09-25 | 2020-07-06 | 在区块链中并发执行交易的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910913970.3A CN112561695B (zh) | 2019-09-25 | 2019-09-25 | 在区块链中并发执行交易的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112561695A CN112561695A (zh) | 2021-03-26 |
CN112561695B true CN112561695B (zh) | 2021-07-23 |
Family
ID=75029476
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910913970.3A Active CN112561695B (zh) | 2019-09-25 | 2019-09-25 | 在区块链中并发执行交易的方法和装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN112561695B (zh) |
WO (1) | WO2021057165A1 (zh) |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10121019B2 (en) * | 2015-06-02 | 2018-11-06 | ALTR Solutions, Inc. | Storing differentials of files in a distributed blockchain |
CN109426949B (zh) * | 2017-08-29 | 2021-02-09 | 华为技术有限公司 | 一种跨链交易方法及装置 |
CN108876370B (zh) * | 2018-06-12 | 2021-12-17 | 北京航空航天大学 | 一种异构多链架构下跨区块链共享开放数据的体系架构 |
CN109190410B (zh) * | 2018-09-26 | 2020-05-19 | 华中科技大学 | 一种云存储环境下的基于区块链的日志行为审计方法 |
CN109493223B (zh) * | 2018-11-07 | 2021-12-21 | 联动优势科技有限公司 | 一种记账方法及装置 |
CN109508337A (zh) * | 2018-11-12 | 2019-03-22 | 杭州秘猿科技有限公司 | 一种交易并行执行方法、装置、电子设备及系统 |
CN110135985B (zh) * | 2019-04-04 | 2021-07-27 | 杭州抖音科技有限公司 | 一种区块链上交易的并行执行方法及系统 |
-
2019
- 2019-09-25 CN CN201910913970.3A patent/CN112561695B/zh active Active
-
2020
- 2020-07-06 WO PCT/CN2020/100486 patent/WO2021057165A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
CN112561695A (zh) | 2021-03-26 |
WO2021057165A1 (zh) | 2021-04-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110471795B (zh) | 区块链状态数据恢复方法及装置、电子设备 | |
US9990391B1 (en) | Transactional messages in journal-based storage systems | |
CN110706101B (zh) | 在区块链中并发执行交易的方法和装置 | |
US20190363874A1 (en) | Decentralized computation system architecture based on node specialization | |
CN110347660B (zh) | 基于区块链的分级存储方法及装置、电子设备 | |
US10108658B1 (en) | Deferred assignments in journal-based storage systems | |
US11036720B2 (en) | Blockchain-based hierarchical data storage | |
CN110675255B (zh) | 在区块链中并发执行交易的方法和装置 | |
CN113743950B (zh) | 在区块链系统中执行交易的方法、节点和区块链系统 | |
US10642792B2 (en) | Distributed transaction conflict resolution | |
CN110648124B (zh) | 在区块链中并发执行交易的方法和装置 | |
US20210081400A1 (en) | Search method using data structure for supporting multiple search in blockchain-based iot environment, and device according to method | |
US11386054B2 (en) | Blockchain-based hierarchical data storage | |
EP3961461B1 (en) | Method and apparatus for obtaining number for transaction-accessed variable in blockchain in parallel | |
CN109446211A (zh) | 一种一致性校验方法及装置 | |
CN113744062B (zh) | 在区块链中执行交易的方法、区块链节点和区块链 | |
CN110706108B (zh) | 在区块链中并发执行交易的方法和装置 | |
CN110689344B (zh) | 在区块链中并发执行交易的方法和装置 | |
CN112561695B (zh) | 在区块链中并发执行交易的方法和装置 | |
CN108710658B (zh) | 一种数据记录的存储方法及装置 | |
CN115237444A (zh) | 基于版本号的并发控制方法、装置、设备及存储介质 | |
US11074294B2 (en) | System and method for Directed Acyclic Graph (DAG) encoding into hash linked blocks | |
Assiri et al. | Approximate consistency in transactional memory | |
CN116340430A (zh) | 一种数据同步校验方法及相关设备 | |
CN117291741A (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40047877 Country of ref document: HK |