发明内容
本申请的目的在于提供一种区块链交易数据的处理方法、装置、电子设备及计算机可读存储介质,旨在解决现有区块链网络下固定通过串行的方式处理每一条交易数据时存在的效率低下、无法很好的利用设备的多任务并行处理的问题。
为实现上述目的,本申请提供了一种区块链交易数据的处理方法,包括:
获取待共识区块中的每条交易数据;
以并行的方式同时处理预设条数的交易数据,并将以并行方式处理时出现交易冲突的交易数据标记为冲突交易数据;
以串行的方式依次处理按原有时间顺序排列的各条冲突交易数据。
可选的,以并行的方式同时处理预设条数的交易数据,包括:
以并行的方式同时处理所述待共识区块中的每一条交易数据。
可选的,以并行的方式同时处理预设条数的交易数据,包括:
将所述待共识区块中的所有交易数据按时间顺序连续的分配至多个处理队列中;
以并行的方式同时处理每个所述处理队列中的交易数据。
可选的,将以并行方式处理时出现交易冲突的交易数据标记为冲突交易数据,包括:
根据每条所述交易数据所使用智能合约在合约执行时对数据执行的操作,创建与每种智能合约对应的读写操作集合;
将每个所述读写操作集合与其它读写操作集合存在交集的部分交易数据标记为所述冲突交易数据。
可选的,在以并行的方式同时处理预设条数的交易数据之前,还包括:
将所述待共识区块中的每条交易数据均读取至内存;
对应的,以并行的方式同时处理预设条数的交易数据,包括:
在所述内存中以并行的方式同时处理所述预设条数的交易数据;
对应的,以串行的方式依次处理按原有时间顺序排列的各条冲突交易数据,包括:
将所述内存中剩余的各条冲突交易数据按原有时间顺序排列,得到冲突交易数据处理队列;
以串行的方式依次处理位于所述冲突交易数据处理队列中的每一条冲突交易数据。
可选的,在将所述内存中剩余的各条冲突交易数据按原有时间顺序排列之前,还包括:
将并行处理过程中未出现所述交易冲突的交易数据从所述内存中删去。
为实现上述目的,本申请还提供了一种区块链交易数据的处理方法装置,该装置包括:
待处理交易数据获取单元,用于获取待共识区块中的每条交易数据;
并行处理单元,用于以并行的方式同时处理预设条数的交易数据,并将以并行方式处理时出现交易冲突的交易数据标记为冲突交易数据;
冲突交易数据串行处理单元,用于以串行的方式依次处理按原有时间顺序排列的各条冲突交易数据。
可选的,所述并行处理单元包括:
一次性全部并行处理子单元,用于以并行的方式同时处理所述待共识区块中的每一条交易数据。
可选的,所述并行处理单元包括:
交易数据分配子单元,用于将所述待共识区块中的所有交易数据按时间顺序连续的分配至多个处理队列中;
分组并行处理子单元,用于以并行的方式同时处理每个所述处理队列中的交易数据。
可选的,所述并行处理单元包括:
读写操作集合生成子单元,用于根据每条所述交易数据所使用智能合约在合约执行时对数据执行的操作,创建与每种智能合约对应的读写操作集合;
去交集子单元,用于将每个所述读写操作集合与其它读写操作集合存在交集的部分交易数据标记为所述冲突交易数据。
可选的,该处理装置还包括:
内存读取单元,用于在以并行的方式同时处理预设条数的交易数据之前,将所述待共识区块中的每条交易数据均读取至内存;
对应的,所述并行处理单元包括:
内存并行处理子单元,用于在所述内存中以并行的方式同时处理所述预设条数的交易数据;
对应的,所述冲突交易数据串行处理单元包括:
冲突交易数据排列子单元,用于将所述内存中剩余的各条冲突交易数据按原有时间顺序排列,得到冲突交易数据处理队列;
串行处理子单元,用于以串行的方式依次处理位于所述冲突交易数据处理队列中的每一条冲突交易数据。
可选的,该处理装置还包括:
非冲突交易数据内存删去单元,用于在将所述内存中剩余的各条冲突交易数据按原有时间顺序排列之前,将并行处理过程中未出现所述交易冲突的交易数据从所述内存中删去。
为实现上述目的,本申请还进一步提供了一种电子设备装置,所述电子设备包括存储器、处理器以及总线,所述存储器上存储有可在所述处理器上运行的交易数据处理程序,所述交易数据处理程序被所述总线传输至所述处理器,并在被所述处理器执行时实现如上述内容所描述的区块链交易数据的处理方法。
为实现上述目的,本申请还进一步提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有交易数据处理程序,所述交易数据处理程序可被一个或者多个处理器执行,以实现如上述内容所描述的区块链交易数据的处理方法。
显然,在本申请所提供的技术方案中,首先尝试性的将待共识区块的各条交易数据以并行方式同时处理,由于并非所有交易数据都会在并行处理时出现交易冲突,因此能够将所有未出现交易冲突的交易数据以并行这一高效率方式进行处理,之后只需要将出现交易的冲突交易数据再次以串行的方式进行处理即可。相比于现有技术无论是否存在交易冲突都按照串行的方式执行的方式,本申请所提供的技术方案在不影响处理结果的基础上能够最大程度的利用设备的多任务并行处理能力,减少处理耗时、增加处理效率。
本申请同时还提供了一种区块链交易数据的处理装置、电子设备及计算机可读存储介质,具有上述有益效果,在此不再赘述。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
实施例一
请参见图1,图1为本申请实施例提供的一种区块链交易数据的处理方法的流程图,其包括以下步骤:
S101:获取待共识区块中的每条交易数据;
待共识区块中存储有在某个时间周期内发生在区块链网络中的所有交易数据,该待共识区块中的交易数据将在完成共识后作为一个新增的区块附加在原有区块链的末尾。需要说明的是,每条交易数据都会按照发生的时间顺序依次的排列,排列依据通常为附加在交易数据中的时间戳。
S102:以并行的方式同时处理预设条数的交易数据,并将以并行方式处理时出现交易冲突的交易数据标记为冲突交易数据;
本步骤旨在以并行的方式同时处理预设条数的交易数据,并将以并行方式处理时出现交易冲突的交易数据标记为冲突交易数据。由于包含于待共识区块中的每条交易数据并非都会在并行处理时出现交易冲突,因此经过本步骤的操作会将所有不需要一定按顺序依次执行的交易数据以并行处理这一高效率处理方式进行处理,同时剩余的就是不按照时间顺序依次执行的冲突交易数据。
为了方便理解交易冲突这一概念,此处举一个简单的例子,假设A用户账户原先由70个代币,此后在一个待共识区块中一共存在3笔与用户A相关的代币交易,依次为转给B用户50个代币(此时剩余20个代币)、收到C用户转来的60个代币(此时剩余80个代币)、转给D用户80个代币(此时剩余0个代币),如果将这三笔交易数据以并行的方式同时,在处理设备看来需要同时处理的数据为:转出50个代币给B、收到C给的60个代币、转出80个代币给D。但是由于剩余代币数应大于等于转出代币数的限制(因为不存在负数的情况),因此在处理设备在并行执行上述三笔交易时,其中的第三笔(转出80个代币给D)将会因为A当前账户中只剩余有70个代币而出现无法执行的情况。诸如此类在处理设备无法处理的情况被统称为交易冲突现象,应当理解的是,A用户必须要先收到C转来的60个代币才能拥有数量大于80的代币数。
区别于上述举的例子,如果需要两条交易数据中不存在上述情况,即不存在交易冲突情况(例如完全是两个不相干的用户间发生的交易的数据),则完全可以以并行的方式完成处理,剩下的部分则需要等待之前一些不存在交易冲突的交易数据处理完后,重新根据新的账户数据进行。
上面通过一个较容易理解的代币交易过程对如何判别冲突交易数据进行了说明,在更广泛的应用场景下,也可以通过使区块链网络能够实现更丰富的功能的智能合约来得到冲突交易数据,之所以能够通过智能合约确定出冲突交易数据,是因为作为交易执行的主体,预先编写好并置于区块链网络的智能合约将负责生成每条交易数据,也就是说交易执行过程中的每一个操作都在智能合约的指导下进行,因此也就可以通过智能合约的执行过程确定在每条交易数据对应的交易在执行时读取或写入的数据,由于区块链网络上通常会设置有多个智能合约,用于按照不同规则执行不同的操作,不可避免的会有存在多个智能合约均需要对相同对象执行操作的情况,因此就很有可能在并行执行时存在冲突,那就是说冲突的那部分就是得以发现的无法并行执行的冲突交易数据。
一种包括但不限于的实现方式为(请参见图2):
S201:根据每条交易数据所使用智能合约在合约执行时对数据执行的操作,创建与每种智能合约对应的读写操作集合;
S202:将每个读写操作集合与其它读写操作集合存在交集的部分交易数据标记为冲突交易数据。
一种包括但不限于的实现方式为(请参见图2):
S201:根据每条交易数据所使用智能合约在合约执行时对数据执行的操作,创建与每种智能合约对应的读写操作集合;
S202:将每个读写操作集合与其它读写操作集合存在交集的部分交易数据标记为冲突交易数据。
其中,对数据执行的操作具体包括读操作和写操作,创建出的与每个智能合约对应的读写操作集合可形如{read(key1)、write(key2)、……、read(keyi)},其中,i表示该待共识区块中包含的每个使用该智能合约的交易数据的数量。简单来说,该实现方式是通过创建读写操作集合、去各读写操作集合的交集部分、将交易部分对应的交易数据标记为冲突交易数据的方式实现对冲突交易数据的确定。
为方便理解,还请参见图3给出的示意图,从图3可以看出,该待共识区块中的交易数据被确定出共被三个不同的智能合约生成,分别创建出了与每种智能合约对应的读写操作结合,可以明显看出,三个读写操作集合中,仅有第一读写操作集合(对应于第一智能合约)与第二读写操作集合(对应于第二智能合约)存在小部分的交集,因此该交集部分中包含的交易数据将被标记为冲突交易数据。
相比于通过单线程依次执行每条交易数据的方式,并行处理的过程通常是通过创建多个线程并同时由多个线程分别处理不同交易数据的方式实现的,具体的,在不同的实际应用场景下,能够创建的线程数会受制多种影响因素,例如可用计算资源数、负载上限、设备核心数、设备性能等等,在处理设备性能足够的情况下,可以创建数量足够的线程数来一次性的同时处理所有的交易数据,以通过最短的时间的处理完所有的交易数据;若设备性能不足,也可以通过将各交易数据分为与可创建线程数相同的待处理组,使得每个线程负责处理一个待处理组中的交易数据。
S103:以串行的方式依次处理按原有时间顺序排列的各条冲突交易数据。
在S102的基础上,本步骤旨在以串行的方式依次处理按原有时间顺序排列的各条冲突交易数据,其中,由于被标记为冲突交易数据的交易数据很有原先是夹在两条可以并行处理的交易数据中间的,因此为了防止各冲突交易数据执行再出问题,还需要将这些各冲突交易数据按照原有时间顺序排列好。
进一步的,应当理解的是,还可以为经过第一次并行处理尝试后出现交易冲突现象的冲突交易数据再次尝试并行处理,因为第一次被判别为冲突交易数据的原因是最开始的账户代币余额,而经过第一次并行处理后,其账户代币余额已经发生的变化,因此之前存在交易冲突的冲突交易数据已经不再存在交易冲突,依旧以上面的例子:可以看到A用户的前两笔交易是完全可以并行处理的,经过第一次并行处理后第三笔交易因代币不足而被标记为冲突交易数据,但经过并行处理完的前两笔交易,A用户的账户代币余额已经升至80个,假设之后还存在几笔转出代币数在70个至80之前的交易,也将满足在第二次并行处理的要求。简单的来说,并行处理可以分批做,因为前一次并行处理的结果将使得部分被第一次并行处理过程中标记为冲突交易数据的交易数据又再次满足了并行处理的条件,因此,完全可以多次尝试进行并行处理,直至剩下的交易数据无法再以并行处理时再按照串行的方式执行。如此可以最大化的利用设备的多任务并行处理能力。
更进一步的,在并行处理各交易数据时,可以预先将其读取至内存,并行处理将得以借助内存具有的高速读写性能实现较快的处理速度,可以被并行处理的交易数据将可以及时的从内存中移除,剩下的冲突交易数据将得以直接在内存中处理,效率更高。
在本实施例提供的技术方案中,首先尝试性的将待共识区块的各条交易数据以并行方式同时处理,由于并非所有交易数据都会在并行处理时出现交易冲突,因此能够将所有未出现交易冲突的交易数据以并行这一高效率方式进行处理,之后只需要将出现交易的冲突交易数据再次以串行的方式进行处理即可。相比于现有技术无论是否存在交易冲突都按照串行的方式执行的方式,本申请所提供的技术方案在不影响处理结果的基础上能够最大程度的利用设备的多任务并行处理能力,减少处理耗时、增加处理效率。
实施例二
请参见图4,图4为本申请实施例提供的另一种区块链交易数据的处理方法的流程图,在实施例一的基础上,本实施例给出了一种通过分组的方式来由数量较少的线程来进行并行处理的具体方式,包括如下步骤:
S301:获取待共识区块中的每条交易数据;
S302:将待共识区块中的所有交易数据按时间顺序连续的分配至多个处理队列中;
为方便理解,此处通过举例说明:假设待共识区块中一共存在100条按时间顺序排列的交易数据,假定处理队列共有10个,也就是每个处理队列分配有10条交易数据,而在分配交易数据至每个处理队列时是连续的,而不是随机的,也就是说排在最前面的10条将分配给第一个处理队列,11~20条将分配给第二个处理队列……91~100条将分配给第十个处理队列,而不是第一条分配给处理队列,将第二条分配给另一个处理队列,以期通过此种方式来防止交易数据过于混乱,减少排序来带的不必要运算量,因为实际情况下,一个待共识区块中将拥有数量极多的交易数据。
S303:以并行的方式同时处理每个处理队列中的交易数据;
在S202的基础上,本步骤将通过创建多个线程来同时处理对应的处理队列中的交易数据,具体的,线程数可以少于处理队列数,也可以等同于处理队列数,前者某些线程将可能陆续被分配多个处理队列,后者每个线程将只需要被分配一个处理队列。
S304:将以并行方式处理时出现交易冲突的交易数据标记为冲突交易数据;
S305:以串行的方式依次处理按原有时间顺序排列的各条冲突交易数据。
因为情况复杂,无法一一列举进行阐述,本领域技术人员应能意识到根据本申请提供的基本方法原理结合实际情况可以存在很多的例子,在不付出足够的创造性劳动下,应均在本申请的保护范围内。
实施例三
请参见图3,图3为本申请实施例提供的一种区块链交易数据的处理装置的结构框图,该装置可以包括:
待处理交易数据获取单元100,用于获取待共识区块中的每条交易数据;
并行处理单元200,用于以并行的方式同时处理预设条数的交易数据,并将以并行方式处理时出现交易冲突的交易数据标记为冲突交易数据;
冲突交易数据串行处理单元300,用于以串行的方式依次处理按原有时间顺序排列的各条冲突交易数据。
其中,该并行处理单元200可以包括:
一次性全部并行处理子单元,用于以并行的方式同时处理待共识区块中的每一条交易数据。
其中,该并行处理单元200可以包括:
交易数据分配子单元,用于将待共识区块中的所有交易数据按时间顺序连续的分配至多个处理队列中;
分组并行处理子单元,用于以并行的方式同时处理每个处理队列中的交易数据。
其中,该并行处理单元200可以包括:
读写操作集合生成子单元,用于根据每条交易数据所使用智能合约在合约执行时对数据执行的操作,创建与每种智能合约对应的读写操作集合;
去交集子单元,用于将每个读写操作集合与其它读写操作集合存在交集的部分交易数据标记为冲突交易数据。
进一步的,该处理装置还可以包括:
内存读取单元,用于在以并行的方式同时处理预设条数的交易数据之前,将待共识区块中的每条交易数据均读取至内存;
对应的,该并行处理单元200可以包括:
内存并行处理子单元,用于在内存中以并行的方式同时处理预设条数的交易数据;
对应的,该冲突交易数据串行处理单元300可以包括:
冲突交易数据排列子单元,用于将内存中剩余的各条冲突交易数据按原有时间顺序排列,得到冲突交易数据处理队列;
串行处理子单元,用于以串行的方式依次处理位于冲突交易数据处理队列中的每一条冲突交易数据。
更进一步的,该处理装置还可以包括:
非冲突交易数据内存删去单元,用于在将内存中剩余的各条冲突交易数据按原有时间顺序排列之前,将并行处理过程中未出现交易冲突的交易数据从内存中删去。
本实施例作为与方法实施例对应的装置实施例存在,具有与方法实施例相同的有益效果,此处不再赘述。
在上文中已经通过一些实施例对如何先通过并行处理再将冲突交易数据通过串行处理来增加设备的性能利用率的方案进行了详细的描述,本申请还提供一种与该方法对应的实体硬件装置,此部分内容原理与方案部分相对应,实现原理的部分此处不再赘述,以下将对该实体硬件装置的硬件组成进行描述,请参见图4,图4为本申请实施例提供的一种电子设备的结构示意图:
该电子设备400包括存储器410、处理器420以及总线430,存储器410上存储有可在处理器420上运行的交易数据处理程序,该交易数据处理程序通过总线430被传输至处理器420,并在被处理器420执行时可实现如上述实施例所描述的区块链交易数据的处理方法中的各步骤。
其中,存储器410至少包括一种类型的可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器410在一些实施例中可以是电子设备400的内部存储单元,例如该电子设备400的硬盘。存储器410在另一些实施例中也可以是该电子设备400的外部存储设备,例如该电子设备400上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器410还可以同时由内部存储单元和外部存储设备同时组成。进一步的,存储器410不仅可以用于存储安装于该电子设备400中的各种应用软件和各类数据,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器420在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器410中存储的程序代码或处理数据,例如交易数据处理程序等。
总线430可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一条双向中空指示线表示,但并不表示仅有一根总线或一种类型的总线。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例中所给出的方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。