交易处理方法、装置、电子设备及可读存储介质与流程

    专利2022-07-08  106


    本发明涉及通信技术领域,特别是涉及一种交易处理方法、装置、电子设备及可读存储介质。



    背景技术:

    区块链技术实现于区块链网络之上,区块链网络中的分布式节点设备(以下简称为节点)通过运行区块链程序,从而实现区块数据的生成和共识,最终实现了数据的防篡改机制,为业务开展提供了安全可信的技术新思路。

    区块链技术可应用至多种业务场景,例如金融领域、电子商务领域、商品或原材料溯源领域、电子存证领域等,由于区块链技术实现了数据防篡改机制,因此利用区块链技术开展业务,能解决业务参与各方之间的信任危机。

    相关技术中,为了借助区块链网络开展业务,需要构建与业务相关的一个或多个交易,并将交易提交给区块链网络处理。区块链网络的各节点处理交易期间,生成处理数据,然后将这些处理数据持久化至账本数据库,从而相当于将这些数据作为区块数据并记录至区块链中。可见相关技术中,节点对交易的处理速度决定了整体业务的开展速度。因此,如何进一步提升交易处理速度,始终是区块链技术领域需要着重考虑的问题。



    技术实现要素:

    本发明实施例的目的在于提供一种交易处理方法、装置、电子设备及可读存储介质,旨在提升交易处理速度。具体技术方案如下:

    在本发明实施例的第一方面,提供一种交易处理方法,应用于区块链网络中的任一节点,所述方法包括:

    获得当前交易,并处理当前交易;其中,在处理当前交易期间,从当前交易单独对应的第一缓存中读取处理当前交易时所需的目标数据,并将生成的处理数据写入所述第一缓存;

    在当前交易处理成功的情况下,将所述第一缓存中的处理数据持久化至账本数据库;

    在当前交易处理失败的情况下,不将所述第一缓存中的处理数据持久化至所述账本数据库。

    在本发明实施例的第二方面,提供一种交易处理装置,应用于区块链网络中的任一节点,所述装置包括:

    交易处理模块,用于获得当前交易,并处理当前交易;其中,在处理当前交易期间,从当前交易单独对应的第一缓存中读取处理当前交易时所需的目标数据,并将生成的处理数据写入所述第一缓存;

    数据持久化模块,用于在当前交易处理成功的情况下,将所述第一缓存中的处理数据持久化至账本数据库,在当前交易处理失败的情况下,不将所述第一缓存中的处理数据持久化至所述账本数据库。

    在本发明实施例的第三方面,提供一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

    所述存储器,用于存放计算机程序;

    所述处理器,用于在执行存储器上所存放的程序时,实现本发明任一实施例所提供的交易处理方法。

    在本发明实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明任一实施例所提供的交易处理方法。

    本发明中,在账本数据库之前设置了当前交易单独对应的第一缓存,换言之,该第一缓存单独服务于当前交易。在节点处理当前交易期间,第一缓存用于供节点查询目标数据,并用于记录当前交易所对应的处理数据。在当前交易处理成功的情况下,节点将第一缓存中的中的处理数据持久化至账本数据库。而在当前交易处理失败的情况下,节点不将第一缓存中的处理数据持久化至所述账本数据库。

    本发明中,由于节点在处理当前交易期间,从第一缓存中查询目标数据,因此具有较高的查询效率,从而有利于提升交易处理速度。更重要的是,由于第一缓存单独服务于当前交易,第一缓存仅记录当前交易对应的处理数据,而不会同时记录多个交易各自对应的处理数据,因此在当前交易处理失败的情况下,仅当前交易对应的处理数据不会被持久化至账本数据库,而其他交易对应的处理数据不会受到影响。可见本发明中,在当前交易执行失败的情况下,需要作废的处理数据的范围较小,因此可以从整体上确保处理数据被高效地记录至账本数据库,从而进一步提升了交易处理速度。

    附图说明

    为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,以下描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。

    图1是相关技术提出的一种交易处理方法的示意图;

    图2是本发明一实施例提出的交易处理方法的流程图;

    图3是本发明另一实施例提出的交易处理方法的示意图;

    图4是本发明一实施例提出的交易处理装置的示意图;

    图5是本发明一实施例提出的电子设备的示意图。

    具体实施方式

    下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述。显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

    区块链技术实现于区块链网络之上,区块链网络中的分布式节点设备(以下简称为节点)通过运行区块链程序,从而实现区块数据的生成和共识,最终实现了数据的防篡改机制,为业务开展提供了安全可信的技术新思路。

    相关技术中,为了借助区块链网络开展业务,需要构建与业务相关的一个或多个交易,并将交易提交给区块链网络处理。区块链网络的各节点处理交易期间,生成处理数据,然后将这些处理数据持久化至账本数据库,从而相当于将这些数据作为区块数据并记录至区块链中。

    参考图1,图1是相关技术提出的一种交易处理方法的示意图,需要说明的是,图1所示的交易处理方法并非现有技术,当前也没有证据可以证明图1所示的交易处理方法为现有技术。

    还需要说明的是,为简化附图,凡是每个节点均需要参与的步骤,在图1中仅示意性地示出了一个或几个节点参与该步骤,而没有完整地示出所有节点均参与该步骤。

    如图1所示,区块链网络的任一节点接收到交易后,将交易提交给区块链网络的排序节点。排序节点对当前一段时间内接收到的多个交易进行排序和打包,从而生成交易包,该交易包中包括具有顺序关系的多个交易,该交易包还具有高度值。具体地,该交易包的高度值等于该交易包的前一交易包的高度值加1。排序节点生成交易包后,将该交易包分发给区块链网络内的每个节点。

    为便于理解,示例地,假设排序节点按照接收交易的顺序,对各个交易进行排序。当排序的交易达到20个,则将这20个交易打包成一个交易包。

    或者示例地,假设排序节点按照接收交易的顺序,对各个交易进行排序。排序节点每30秒,将已经排序的若干交易打包成一个交易包。

    如图1所示,当节点接收到交易包后,按照交易包中多个交易的顺序关系,依次从交易包中读取交易,并处理交易。其中,节点将交易包中的每个交易及该交易对应的处理数据作为区块数据,顺序地排列在区块中,从而生成一个区块,该区块的区块高度设置为该交易包的高度值。需要说明的是,区块数据会被记录至节点的账本数据库中。

    为便于理解,示例地,假设交易包中包括具有顺序关系的交易1至交易10,交易包的高度值等于1059。则每个节点在接收到交易包后,首先从交易包中读取交易1,并处理交易1,以及将交易1对应的处理数据记录至账本数据库中。然后从交易包中读取交易2,并处理交易2,以及将交易2对应的处理数据记录至账本数据库中。以此类推,最后从交易包中读取交易10,并处理交易10,以及将交易10对应的处理数据记录至账本数据库中。此后,节点将交易1及其对应的处理数据、节点2及其对应的处理数据…以及节点10及其对应的处理数据,作为区块数据,生成一个区块高度等于1059的区块。

    如图1所示,当节点生成区块后,各个节点相互之间会对各自生成的区块进行共识。如果节点确认其自身生成的区块通过共识,则节点继续处理下一个交易包。如果节点确认其自身生成的区块未通过共识,则节点自动下线,也即自动退出区块链网络。

    可选地,在一些具体实施方式中,节点相互之间对各自生成的区块进行共识时,可以采用以下共识方式:节点在生成区块后,针对该区块的全部区块数据计算一个hash值,节点将该hash值广播给区块链网络中的其他节点;与此同时,节点也会接收到其他节点广播的hash值,节点在接收到各节点广播的hash值后,将自身计算出的总hash值与其他节点各自广播的hash值对比;如果节点自身计算出的总hash值与超过预设数量的其他hash值相等,则节点确认自身生成的区块通过共识,否则节点确认自身生成的区块未通过共识。示例地,所述预设数量可以等于区块链网络的节点总数的51%。

    需要说明的是,上述具体实施方式所提出的共识方式仅作为示例,不应理解为是对本发明的限定。本发明在实施期间,节点可以采用其他共识方式对区块进行共识。

    通过实施图1所示的交易处理方式,由于排序节点统一对多个交易进行排序打包,并将生成的交易包分发给每个节点,使得每个节点在从交易包读取交易并执行交易时,可以按照相同的交易顺序依次执行各个交易,并且按照相同的顺序将交易及其处理数据记录至区块中。如此,在正常情况下,每个节点将会生成相同的区块。所谓相同的区块,具体是指:每个区块的区块高度相等,每个区块中包括相同的交易及其处理数据,并且交易按照相同的顺序排列在区块中,交易的处理数据也按照相同的方式排列在区块中。由于每个节点生成了相同的区块,因此节点相互之间对各自生成的区块进行共识时,可以比较顺利地通过共识。如此,整个区块链网络可以稳定地运行。

    如前所述,相关技术中,在利用区块链网络开展业务时,实际上需要构建与业务相关的一个或多个交易,并将交易提交给区块链网络处理。可见相关技术中,节点对交易的处理速度决定了整体业务的开展速度。因此,如何进一步提升交易处理速度,始终是区块链技术领域需要着重考虑的问题。

    有鉴于此,本发明通过以下实施例,提出交易处理方法、装置、电子设备及可读存储介质,旨在提升交易处理速度。

    参考图2,图2是本发明一实施例提出的交易处理方法的流程图,该交易处理方法应用于区块链网络中的任一节点。如图2所示,该交易处理方法包括以下步骤:

    步骤s21:获得当前交易,并处理当前交易;其中,在处理当前交易期间,从当前交易单独对应的第一缓存中读取处理当前交易时所需的目标数据,并将生成的处理数据写入所述第一缓存。

    其中,当前交易是指:节点当前正在处理的交易。当前交易单独对应的第一缓存是指:单独服务于当前交易的第一缓存,该第一缓存仅用于节点在处理当前交易时的数据读写,当节点处理完当前交易后,该第一缓存被清空或者被释放。

    本发明中,节点在处理当前交易之前,可以预先为当前交易分配所述第一缓存。如前所述,该第一缓存单独对应于该当前交易,换言之,该第一缓存单独服务于该当前交易。

    本发明中,节点为了为当前交易分配第一缓存,可以采用以下任一具体实施方式提出的缓存分配方式。

    可选地,在一些具体实施方式中,节点在处理当前交易之前,将当前交易的前一交易单独对应的第一缓存清空,并将清空后的第一缓存作为当前交易单独对应的第一缓存。

    为便于理解,示例地,假设当前交易为交易6,而当前交易的前一交易为交易5。当节点处理完交易5之后,将交易5单独对应的第一缓存清空。节点在处理交易6之前,将清空后的第一缓存分配给交易6。在节点处理交易6期间,该第一缓存单独服务于交易6。同样地,当节点处理完交易6之后,会再次将该第一缓存清空,并将该第一缓存分配给后一交易(即交易7)。

    可选地,在另一些具体实施方式中,节点在处理当前交易之前,为当前交易单独创建一个第一缓存,并将该第一缓存作为当前交易单独对应的第一缓存。

    为便于理解,示例地,假设当前交易为交易6,而当前交易的前一交易为交易5。当节点处理完交易5之后,将交易5单独对应的第一缓存释放。节点在处理交易6之前,又重新为交易6创建一个第一缓存。在节点处理交易6期间,重新创建的第一缓存单独服务于交易6。同样地,当节点处理完交易6之后,同样会将交易6单独对应的第一缓存释放,并在处理后一交易(即交易7)之前,又重新为交易7创建一个第一缓存。

    需要说明的是,上述两种缓存分配方式中,优选第一种缓存分配方式。其原因在于,在第一种缓存分配方式中,在处理当前交易之前,不需要重新为当前交易创建新的第一缓存,而仅需要将前一交易使用过的第一缓存清空,并将清空后的第一缓存分配给当前交易。如此,可以节省缓存创建步骤,从而进一步提升交易处理速度。

    本发明中,节点内可以运行有处理线程,每个处理线程在一个时间段内用于处理一个交易。

    可选地,在一些具体实施方式中,如果节点中仅运行有一个处理线程,则节点在一个时间段内仅能处理一个交易。相应地,节点内仅有一个第一缓存,该第一缓存单独服务于该交易。

    可选地,在另一些具体实施方式中,如果节点中有n(n≥2)个处理线程,则节点在一个时间段内可同时处理n个交易。相应地,节点内有n个第一缓存,每个第一缓存单独服务于一个交易。

    本发明中,节点为了获得当前交易,可以采用以下任一具体实施方式提出的交易获得方式。

    可选地,在一些具体实施方式中,如前所述,节点在获得排序节点分发的交包后,可以按照交易包中多个交易的顺序关系,依次从交易包的多个交易中读取交易。节点当前读取到的交易,也即是当前交易。

    可选地,在另一些具体实施方式中,节点可以接收区块链网络内的其他节点发送的单个交易,从而获得当前交易。

    可选地,在另一些具体实施方式中,节点可以直接接收客户端或者链外中间件发送的交易,从而获得当前交易。

    本发明中,节点在处理当前交易期间,从当前交易单独对应的第一缓存中读取处理当前交易时所需的目标数据,由于缓存的读写速率很快,因此节点读取目标数据的速率较快,进而有利于提升交易处理速度。示例地,处理当前交易时所需的目标数据包括但不限于:账户余额、用户身份信息、用户权限等。

    可选地,在一些具体实施方式中,如果节点未能从第一缓存中读取到目标数据,则节点可以直接从账本数据库中读取目标数据。节点从账本数据库中读取到目标数据后,可以将该目标数据备份至第一缓存中。如此,节点在继续处理该当前交易期间,如果再次需要该目标数据时,则可以直接从第一缓存中快速读取到该目标数据。

    步骤s22:在当前交易处理成功的情况下,将所述第一缓存中的处理数据持久化至账本数据库。

    换言之,在当前交易处理成功的情况下,将第一缓存中的处理数据(也即当前交易对应的处理数据)保存至账本数据库中。当前交易对应的处理数据将会作为区块数据,被添加至区块中。

    步骤s23:在当前交易处理失败的情况下,不将所述第一缓存中的处理数据持久化至所述账本数据库。

    换言之,在当前交易处理失败的情况下,不会将第一缓存中的处理数据(也即当前交易对应的处理数据)保存至账本数据库中。当前交易对应的处理数据不会作为区块数据,从而也不会被添加至区块中。

    为便于理解上述步骤s21至步骤s23,示例地,假设当前交易包括以下交易内容:(1)向账户a转入1000元;(2)从账户a转出8000元。

    节点在处理当前交易之前,预先为当前交易分配第一缓存,如前所述,该第一缓存单独服务于当前交易,该第一缓存暂时为空。

    节点在处理当前交易的交易内容(1)时,需要获取账户a的余额信息。节点首先尝试从第一缓存中读取账户a的余额信息,然而由于第一缓存暂时为空,因此节点未能从第一缓存中读取到账户a的余额信息。节点转而从账本数据库中读取账户a的余额信息。假设账户a的余额为6050元,节点从账本数据库中读取到账户a的余额信息后,将账户a的余额信息备份至第一缓存中。此外,节点在账户a的余额上增加1000元,从而更新账户a的余额信息,更新后的余额等于7050元。节点利用更新后的余额信息刷新第一缓存,刷新后的第一缓存中,账户a的余额信息等于7050元。需要说明的是,账户a的余额信息(7050元),即是当前交易对应的一条处理数据。

    节点在处理当前交易的交易内容(2)时,需要获取账户a的余额信息。节点首先尝试从第一缓存中读取账户a的余额信息,由于第一缓存中存在账户a的余额信息,因此节点可以快速从第一缓存中读取到账户a的余额信息。节点从第一缓存读取到账户a的余额信息后,在账户a的余额上减去8000元。然而由于账户a的余额等于7050元,账户a的余额不足以减去8000元,因此当前交易执行失败。如此,节点不会将第一缓存中的处理数据持久化至账本数据库,账本数据库中账户a的余额信息仍然为6050元。

    通过执行上述步骤s21至步骤s23,在账本数据库之前设置了当前交易单独对应的第一缓存,换言之,该第一缓存单独服务于当前交易。在节点处理当前交易期间,第一缓存用于供节点查询目标数据,并用于记录当前交易所对应的处理数据。在当前交易处理成功的情况下,节点将第一缓存中的中的处理数据持久化至账本数据库。而在当前交易处理失败的情况下,节点不将第一缓存中的处理数据持久化至所述账本数据库。

    由于节点在处理当前交易期间,从第一缓存中查询目标数据,因此具有较高的查询效率,从而有利于提升交易处理速度。更重要的是,由于第一缓存单独服务于当前交易,第一缓存仅记录当前交易对应的处理数据,而不会同时记录多个交易各自对应的处理数据,因此在当前交易处理失败的情况下,仅当前交易对应的处理数据不会被持久化至账本数据库,而其他交易对应的处理数据不会受到影响。可见本发明中,在当前交易执行失败的情况下,需要作废的处理数据的范围较小,因此可以从整体上确保处理数据被高效地记录至账本数据库,从而进一步提升了交易处理速度。

    参考图3,图3是本发明另一实施例提出的交易处理方法的示意图。如图3所示,多级缓存中至少包括:第一缓存和第二缓存。如前所述,第一缓存单独服务于当前交易。本发明中,第二缓存单独服务于当前交易包。以下将结合图3,介绍本发明另一实施例提出的交易处理方法。

    参考前述内容,节点为了获得当前交易,可以从当前交易包中读取待处理的交易,并将当前读取的一个交易作为当前交易。

    其中,一个交易包对应将来生成的一个区块。可选地,在一些具体实施方式中,如前所述,交易包具有高度值,节点针对该交易包生成区块之后,该区块的区块高度等于该交易包的高度值。

    其中,当前交易包是指:节点当前正在处理的交易包。如图3所示,当前交易包单独对应一个第二缓存。换言之,第二缓存单独服务于当前交易包,第二缓存仅用于节点在处理当前交易包时的数据读写,当节点处理完当前交易包后,第二缓存被清空或者被释放。

    在当前交易处理成功的情况下,节点为了将第一缓存中的处理数据(也即当前交易对应的处理数据)持久化至账本数据库,如图3所示,节点可以利用第一缓存中的处理数据,刷新当前交易包单独对应的第二缓存,以更新第二缓存中的处理数据(如图3中的2-1)。

    此外,在当前交易处理失败的情况下,节点为了不将第一缓存中的处理数据持久化至账本数据库,节点不会利用第一缓存中的处理数据,刷新当前交易包单独对应的第二缓存。换言之,如果当前交易执行失败,则当前交易单独对应的第一缓存中的处理数据,不会被更新至当前交易包单独对应的第二缓存。为简化附图,图3中未示出当前交易处理失败的情况。

    此外,如图3所示,在当前交易包中的最后一个交易被处理后,节点会将第二缓存中的处理数据持久化至账本数据库(如图3中的2-2)。具体地,如果当前交易包中的最后一个交易处理成功,则利用该交易对应的第一缓存刷新当前交易包对应的第二缓存后,才将第二缓存中的处理数据持久化至账本数据库。如果当前交易包中的最后一个交易处理失败,则不会利用该交易对应的第一缓存刷新当前交易包对应的第二缓存,但是仍会将第二缓存中的处理数据持久化至账本数据库。

    为便于理解,示例地,在当前交易(例如交易8)处理成功后,假设第一缓存中包括以下处理数据:账户b余额8500元、新账户y余额10000元。又假设此时第二缓存中包括以下处理数据:账户b余额6500元、账户c余额28000元。则利用第一缓存中的处理数据刷新第二缓存后,第二缓存中的处理数据被更新。更新后,第二缓存包括以下处理数据:账户b余额8500元、账户c余额28000元、新账户y余额10000元。

    此后,节点从当前交易包中读取出交易9,并将交易9作为当前交易。节点为交易9分配第一缓存,该第一缓存单独服务于交易9,该第一缓存暂时为空。假设交易9包括以下交易内容:(1)向账户b转入2000元;(2)从账户b转出15000元。

    节点在处理交易9的交易内容(1)时,需要获取账户b的余额信息。节点首先尝试从第一缓存中读取账户b的余额信息,然而由于第一缓存暂时为空,因此节点未能从缓存中读取到账户b的余额信息。节点转而从第二缓存中读取账户b的余额信息。节点从第二缓存中读取到账户b的余额信息后,将账户b的余额信息备份至第一缓存中。此外,节点在账户b的余额上增加2000元,从而更新账户b的余额信息,更新后的余额等于10500元。节点利用更新后的余额信息刷新第一缓存,刷新后的第一缓存中,账户b的余额信息等于10500元。

    节点在处理交易9的交易内容(2)时,又需要获取账户b的余额信息。节点首先尝试从第一缓存中读取账户b的余额信息,由于第一缓存中存在账户b的余额信息,因此节点可以快速从第一缓存中读取到账户b的余额信息。节点从第一缓存读取到账户b的余额信息后,在账户b的余额上减去15000元。然而由于账户b的余额等于10500元,账户b的余额不足以减去15000元,因此交易9执行失败。如此,节点不会将第一缓存中的处理数据持久化至第二缓存,第二缓存包括的处理数据维持为:账户b余额8500元、账户c余额28000元、新账户y余额10000元。

    此后,节点从当前交易包中读取出交易10,并将交易10作为当前交易,交易10是当前交易包中的最后一个交易。节点为交易10分配第一缓存,该第一缓存单独服务于交易10,该第一缓存暂时为空。假设交易10包括以下交易内容:(1)从账户y转出3000元。

    节点在处理交易10的交易内容(1)时,需要获取账户y的余额信息。节点首先尝试从第一缓存中读取账户y的余额信息,然而由于第一缓存暂时为空,因此节点未能从缓存中读取到账户y的余额信息。节点转而从第二缓存中读取账户y的余额信息。节点从第二缓存中读取到账户y的余额信息后,将账户y的余额信息备份至第一缓存中。此外,节点在账户y的余额的基础上减去3000元,从而更新账户y的余额信息,更新后的余额等于7000元。节点利用更新后的余额信息刷新第一缓存,刷新后的第一缓存中,账户y的余额信息等于7000元。

    然后,节点利用第一缓存中的处理数据刷新第二缓存,第二缓存中的处理数据被更新。更新后,第二缓存包括以下处理数据:账户b余额8500元、账户c余额28000元、新账户y余额7000元。

    节点在利用当前交易包中的最后一个交易(也即交易10)所对应的处理数据刷新第二缓存后,节点将第二缓存中的处理数据持久化至账本数据库。

    此外本发明中,在当前交易包处理失败的情况下,节点不将第二缓存中的处理数据持久化至账本数据库。

    为便于理解,示例地,假设在从当前交易包中读取交易时,交易读取失败,然而节点又不能跳过该交易转而读取下一个交易,导致节点不能继续处理当前交易包。在此情况下,节点可以确定当前交易包处理失败。如此,节点不会将第二缓存中的处理数据持久化至账本数据库。

    或者示例地,假设当前交易包的数据格式,不符合区块链程序要求的数据格式,节点不能继续处理当前交易包。在此情况下,节点可以确定当前交易包处理失败。如此,节点不会将第二缓存中的处理数据持久化至账本数据库。

    通过执行图3所示的交易处理方法,由于第二缓存单独服务于当前交易,第二缓存仅记录当前交易包对应的处理数据,而不会同时记录多个交易包各自对应的处理数据,因此在当前交易包处理失败的情况下,仅当前交易包对应的处理数据不会被持久化至账本数据库,而其他交易包对应的处理数据不会受到影响。又由于一个交易包对应一个区块,因此节点仍然能顺利地生成其他交易包各自对应的区块。可见本发明中,在当前交易包执行失败的情况下,并不影响节点为其他交易包生成相应区块。因此可以从整体上确保区块生成速率,从而提升了业务开展速度。

    本发明中,节点在处理当前交易包之前,可以预先为当前交易包分配一个第二缓存。如前所述,该第二缓存单独对应于该当前交易包,换言之,该第二缓存单独服务于该当前交易包。

    本发明中,节点为了为当前交易包分配一个第二缓存,可以采用以下任一具体实施方式提出的缓存分配方式。

    可选地,在一些具体实施方式中,节点在处理当前交易包之前,将当前交易包的前一交易包单独对应的第二缓存清空,并将清空后的第二缓存作为当前交易包单独对应的第二缓存。

    为便于理解,示例地,假设当前交易包为交易包1059,而当前交易包的前一交易包为交易包1058。当节点处理完交易包1058之后,将交易包1058单独对应的第二缓存清空。节点在处理交易包1059之前,将清空后的第二缓存分配给交易包1059。在节点处理交易包1059期间,该第二缓存单独服务于交易包1059。同样地,当节点处理完交易包1059之后,会再次将该第二缓存清空,并将该第二缓存分配给后一交易包(即交易包1060)。

    可选地,在另一些具体实施方式中,节点在处理当前交易包之前,为当前交易包单独创建一个第二缓存,并将该第二缓存作为当前交易包单独对应的第二缓存。

    为便于理解,示例地,假设当前交易包为交易包1059,而当前交易包的前一交易包为交易包1058。当节点处理完交易包1058之后,将交易包1058单独对应的第二缓存释放。节点在处理交易包1059之前,又重新为交易包1059创建一个第二缓存。在节点处理交易包1059期间,重新创建的第二缓存单独服务于交易包1059。同样地,当节点处理完交易包1059之后,同样会将交易包1059单独对应的第二缓存释放,并在处理后一交易包(即交易包1060)之前,又重新为交易包1060创建一个第二缓存。

    需要说明的是,上述两种缓存分配方式中,优选第一种缓存分配方式。其原因在于,在第一种缓存分配方式中,在处理当前交易包之前,不需要重新为当前交易包创建新的第二缓存,而仅需要将前一交易包使用过的第二缓存清空,并将清空后的第二缓存分配给当前交易包。如此,可以节省缓存创建步骤,从而进一步提升交易包处理速度。

    可选地,在一些具体实施方式中,如图3所示,多级缓存中还包括:第三缓存,第三缓存对应于账本数据库。如图3所示,在当前交易包中的最后一个交易被处理后,节点还利用第二缓存中的处理数据,刷新账本数据库对应的第三缓存(如图3中的2-2)。

    为便于理解,示例地,假设第二缓存包括以下处理数据:账户b余额8500元、账户c余额28000元、新账户y余额7000元。又假设第三缓存中包括以下数据:账户a余额6050元、账户b余额10400元、账户c余额36000元。则利用第二缓存中的处理数据刷新第三缓存后,第三缓存中的处理数据被更新。更新后,第三缓存包括以下处理数据:账户a余额6050元、账户b余额8500元、账户c余额28000元、新账户y余额7000元。

    此外,如前所述,节点在处理当前交易期间,需要从当前交易单独对应的第一缓存中读取处理当前交易时所需的目标数据(如图3中的1-1)。如图3所示,节点的处理线程在未能从第一缓存中读取到目标数据的情况下,从当前交易包单独对应的第二缓存中读取目标数据(如图3中的1-2);在未能从第二缓存中读取到目标数据的情况下,从账本数据库对应的第三缓存中读取目标数据(如图3中的1-3);在未能从第三缓存中读取到目标数据的情况下,从账本数据库中读取目标数据(如图3中的1-4);在读取到目标数据后,节点根据该目标数据处理当前交易。

    需要说明的是,上述具体实施方式中,通过利用第一缓存中的处理数据刷新第二缓存,再利用第二缓存中的处理数据刷新第三缓存,使得各缓存中记录的处理数据持续处于新的状态。并且通过逐级查询第一缓存、第二缓存、第三缓存、账本数据库的方式,直至读取到目标数据,可以有效缩短目标数据的读取耗时,从而进一步提升交易处理速度。

    可选地,在一些具体实施方式中,可以第三缓存中可以固定存放一些热点数据,例如热点账户的余额数据。所谓热点账户,是指经常参与交易的账户,例如一些流水比较频繁的企业用户的账户。需要说明的是,由于第三缓存中固定存放了热点数据,而在节点处理当前交易期间,大概率需要查询这些热点数据。如果节点没能从第一缓存和第二缓存读取到这些热点数据,则还可以从第三缓存中读取到这些热点数据。如此,可以进一步提升数据读取速度,从而进一步提升交易处理速度。

    可选地,在一些具体实施方式中,在节点处理当前交易期间,当节点读取到目标数据之后,节点会在不包含所述目标数据的缓存中备份该目标数据。为简化附图,图3中未示出该过程。

    为便于理解,示例地,假设节点通过逐级查询第一缓存、第二缓存、第三缓存、账本数据库的方式,直至查询账本数据库时,才从账本数据库中读取到目标数据。如此,节点需要在第一缓存、第二缓存以及第三缓存中备份该目标数据。

    或者示例地,假设节点通过逐级查询第一缓存、第二缓存、第三缓存、账本数据库的方式,直至查询第三缓存时,才从第三缓存中读取到目标数据。如此,节点需要在第一缓存和第二缓存中备份该目标数据。

    需要说明的是,执行当前交易期间所需的目标数据,通常是当前时间段内的热点数据,通过在不包含该目标数据的缓存中备份该目标数据,使得后续再次需要读取该目标数据时,可以在就近的缓存中读取到该目标数据。如此,可以进一步提升数据读取速度,从而进一步提升交易处理速度。

    基于同一发明构思,本发明实施例还提供一种交易处理装置。参考图4,图4是本发明一实施例提出的交易处理装置的示意图,该交易处理装置应用于区块链网络中的任一节点。如图4所示,该装置包括:

    交易处理模块41,用于获得当前交易,并处理当前交易;其中,在处理当前交易期间,从当前交易单独对应的第一缓存中读取处理当前交易时所需的目标数据,并将生成的处理数据写入所述第一缓存;

    数据持久化模块42,用于在当前交易处理成功的情况下,将所述第一缓存中的处理数据持久化至账本数据库,在当前交易处理失败的情况下,不将所述第一缓存中的处理数据持久化至所述账本数据库。

    可选地,在一些具体实施方式中,所述装置还包括:

    第一缓存清空模块,用于在所述交易处理模块处理当前交易之前,将所述当前交易的前一交易单独对应的第一缓存清空,并将清空后的第一缓存作为所述当前交易单独对应的第一缓存。

    或者可选地,在另一些具体实施方式中,所述装置还包括:

    第一缓存创建模块,用于在所述交易处理模块处理当前交易之前,为所述当前交易单独创建一个第一缓存,并将该第一缓存作为所述当前交易单独对应的第一缓存。

    可选地,在一些具体实施方式中,所述交易处理模块具体用于:从当前交易包中读取待处理的交易,并将当前读取的一个交易作为当前交易,其中,一个交易包对应将来生成的一个区块;

    所述数据持久化模块具体用于:在当前交易处理成功的情况下,利用所述第一缓存中的处理数据,刷新当前交易包单独对应的第二缓存,以更新所述第二缓存中的处理数据;在当前交易包中的最后一个交易被处理后,将所述第二缓存中的处理数据持久化至所述账本数据库;

    所述数据持久化模块还具体用于:在当前交易处理失败的情况下,不利用所述第一缓存中的处理数据,刷新当前交易包单独对应的第二缓存。

    可选地,在一些具体实施方式中,所述数据持久化模块还具体用于:在当前交易包处理失败的情况下,不将所述第二缓存中的处理数据持久化至所述账本数据库。

    可选地,在一些具体实施方式中,所述装置还包括:

    第二缓存清空模块,用于在所述交易处理模块从当前交易包中读取待处理的交易之前,将当前交易包的前一交易包单独对应的第二缓存清空,并将清空后的第二缓存作为当前交易包单独对应的第二缓存;

    或者可选地,在另一些具体实施方式中,所述装置还包括:

    第二缓存创建模块,用于在所述交易处理模块从当前交易包中读取待处理的交易之前,为当前交易包单独创建一个第二缓存,并将该第二缓存作为当前交易包单独对应的第二缓存。

    可选地,在一些具体实施方式中,所述装置还包括:

    第三缓存刷新模块,用于在当前交易包中的最后一个交易被处理后,利用所述第二缓存中的处理数据,刷新所述账本数据库对应的第三缓存;

    所述交易处理模块还具体用于:在未能从所述第一缓存中读取到所述目标数据的情况下,从当前交易包单独对应的第二缓存中读取所述目标数据;在未能从所述第二缓存中读取到所述目标数据的情况下,从所述账本数据库对应的第三缓存中读取所述目标数据;在未能从所述第三缓存中读取到所述目标数据的情况下,从所述账本数据库中读取所述目标数据;在读取到所述目标数据后,根据该目标数据处理当前交易。

    可选地,在一些具体实施方式中,所述装置还包括:

    数据备份模块,用于在所述交易处理模块读取到所述目标数据后,在不包含所述目标数据的缓存中备份所述目标数据。

    对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

    基于同一发明构思,本发明实施例还提供了一种电子设备,如图5所示,包括处理器501、通信接口502、存储器503和通信总线504,其中,处理器501,通信接口502,存储器503通过通信总线504完成相互间的通信。

    所述存储器503,用于存放计算机程序;

    所述处理器501,用于在执行存储器503上所存放的程序时,实现如下步骤:

    获得当前交易,并处理当前交易;其中,在处理当前交易期间,从当前交易单独对应的第一缓存中读取处理当前交易时所需的目标数据,并将生成的处理数据写入所述第一缓存;

    在当前交易处理成功的情况下,将所述第一缓存中的处理数据持久化至账本数据库;

    在当前交易处理失败的情况下,不将所述第一缓存中的处理数据持久化至所述账本数据库。

    或者,处理器501用于在执行存储器503上所存放的程序时,实现本发明以上其他方法实施例所提供的交易处理方法步骤。

    上述电子设备提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,简称pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,简称eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

    通信接口用于上述电子设备与其他设备之间的通信。

    存储器可以包括随机存取存储器(randomaccessmemory,简称ram),也可以包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

    上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等;还可以是数字信号处理器(digitalsignalprocessing,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)、现场可编程门阵列(field-programmablegatearray,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

    在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的交易处理方法。

    在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。

    需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

    本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

    以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。


    技术特征:

    1.一种交易处理方法,其特征在于,应用于区块链网络中的任一节点,所述方法包括:

    获得当前交易,并处理当前交易;其中,在处理当前交易期间,从当前交易单独对应的第一缓存中读取处理当前交易时所需的目标数据,并将生成的处理数据写入所述第一缓存;

    在当前交易处理成功的情况下,将所述第一缓存中的处理数据持久化至账本数据库;

    在当前交易处理失败的情况下,不将所述第一缓存中的处理数据持久化至所述账本数据库。

    2.根据权利要求1所述的方法,其特征在于,在处理当前交易之前,所述方法还包括:

    将所述当前交易的前一交易单独对应的第一缓存清空,并将清空后的第一缓存作为所述当前交易单独对应的第一缓存;

    或者,

    为所述当前交易单独创建一个第一缓存,并将该第一缓存作为所述当前交易单独对应的第一缓存。

    3.根据权利要求1所述的方法,其特征在于,所述获得当前交易,包括:

    从当前交易包中读取待处理的交易,并将当前读取的一个交易作为当前交易,其中,一个交易包对应将来生成的一个区块;

    所述在当前交易处理成功的情况下,将所述第一缓存中的处理数据持久化至账本数据库,包括:

    在当前交易处理成功的情况下,利用所述第一缓存中的处理数据,刷新当前交易包单独对应的第二缓存,以更新所述第二缓存中的处理数据;

    在当前交易包中的最后一个交易被处理后,将所述第二缓存中的处理数据持久化至所述账本数据库;

    所述在当前交易处理失败的情况下,不将所述第一缓存中的处理数据持久化至所述账本数据库,包括:

    在当前交易处理失败的情况下,不利用所述第一缓存中的处理数据,刷新当前交易包单独对应的第二缓存。

    4.根据权利要求3所述的方法,其特征在于,所述方法还包括:

    在当前交易包处理失败的情况下,不将所述第二缓存中的处理数据持久化至所述账本数据库。

    5.根据权利要求3所述的方法,其特征在于,在从当前交易包中读取待处理的交易之前,所述方法还包括:

    将当前交易包的前一交易包单独对应的第二缓存清空,并将清空后的第二缓存作为当前交易包单独对应的第二缓存;

    或者,

    为当前交易包单独创建一个第二缓存,并将该第二缓存作为当前交易包单独对应的第二缓存。

    6.根据权利要求3所述的方法,其特征在于,在当前交易包中的最后一个交易被处理后,所述方法还包括:

    利用所述第二缓存中的处理数据,刷新所述账本数据库对应的第三缓存;

    在处理当前交易期间,所述方法还包括:

    在未能从所述第一缓存中读取到所述目标数据的情况下,从当前交易包单独对应的第二缓存中读取所述目标数据;

    在未能从所述第二缓存中读取到所述目标数据的情况下,从所述账本数据库对应的第三缓存中读取所述目标数据;

    在未能从所述第三缓存中读取到所述目标数据的情况下,从所述账本数据库中读取所述目标数据;

    在读取到所述目标数据后,根据该目标数据处理当前交易。

    7.根据权利要求6所述的方法,其特征在于,在读取到所述目标数据后,所述方法还包括:

    在不包含所述目标数据的缓存中备份所述目标数据。

    8.一种交易处理装置,其特征在于,应用于区块链网络中的任一节点,所述装置包括:

    交易处理模块,用于获得当前交易,并处理当前交易;其中,在处理当前交易期间,从当前交易单独对应的第一缓存中读取处理当前交易时所需的目标数据,并将生成的处理数据写入所述第一缓存;

    数据持久化模块,用于在当前交易处理成功的情况下,将所述第一缓存中的处理数据持久化至账本数据库,在当前交易处理失败的情况下,不将所述第一缓存中的处理数据持久化至所述账本数据库。

    9.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

    所述存储器,用于存放计算机程序;

    所述处理器,用于在执行存储器上所存放的程序时,实现权利要求1-7任一所述的方法步骤。

    10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时,实现权利要求1-7任一所述的方法步骤。

    技术总结
    本发明实施例提供一种交易处理方法、装置、电子设备及可读存储介质,旨在提升交易处理速度。其中,所述方法应用于区块链网络中的任一节点,所述方法包括:获得当前交易,并处理当前交易;其中,在处理当前交易期间,从当前交易单独对应的第一缓存中读取处理当前交易时所需的目标数据,并将生成的处理数据写入所述第一缓存;如果当前交易处理成功,则将所述第一缓存中的处理数据持久化至账本数据库;如果当前交易处理失败,则不将所述第一缓存中的处理数据持久化至所述账本数据库。本发明中,在当前交易执行失败的情况下,需要作废的处理数据的范围较小,因此可以从整体上确保处理数据被高效地记录至账本数据库,从而提升交易处理速度。

    技术研发人员:唐坤;邓柯
    受保护的技术使用者:成都质数斯达克科技有限公司
    技术研发日:2020.11.24
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-24346.html

    最新回复(0)