首页 / 专利库 / 银行与财务事项 / 分布式账本技术 / 区块链 / 数据处理方法、装置、节点设备及存储介质

数据处理方法、装置、节点设备及存储介质

阅读:1047发布:2020-06-16

专利汇可以提供数据处理方法、装置、节点设备及存储介质专利检索,专利查询,专利分析的服务。并且本 发明 实施例 公开了一种 数据处理 方法、装置、 节点 设备及介质;方法由 区 块 链 网络中的节点设备执行,节点设备包括第一数据结构和第二数据结构;第一数据结构用于执行并发的读操作,第二数据结构用于执行读写操作;第一数据结构的读操作的优先级高于第二数据结构的读操作的优先级;方法包括:响应于将目标交易数据上传至区块链网络的触发事件,按照优先级从高到低的顺序从第一数据结构中读取目标交易数据的目标 指针 ;若从第一数据结构中读取失败,则从第二数据结构中读取目标指针;从目标指针所指向的存储地址处获取目标交易数据,并将目标交易数据上传至区块链网络。本发明实施例可实现交易数据的读写分离,有效解决读写冲突的问题,提高处理效率。,下面是数据处理方法、装置、节点设备及存储介质专利的具体信息内容。

1.一种数据处理方法,其特征在于,所述方法由链网络中的任一节点设备执行,所述节点设备包括第一数据结构和第二数据结构,所述第一数据结构和所述第二数据结构均用于存储所述节点设备的内存池中的交易数据的指针;所述第一数据结构用于执行并发的读操作,所述第二数据结构用于执行读写操作;且所述第一数据结构的读操作的优先级高于所述第二数据结构的读操作的优先级;所述方法包括:
响应于将目标交易数据上传至所述区块链网络的触发事件,按照优先级从高到低的顺序从所述第一数据结构中读取所述目标交易数据的目标指针;
若从所述第一数据结构中读取失败,则从所述第二数据结构中读取所述目标交易数据的目标指针;所述目标指针是在存储所述目标交易数据时,根据所述目标交易数据在所述内存池中的存储地址写入至所述第二数据结构中的;
从所述目标指针所指向的存储地址处获取所述目标交易数据,并将所述目标交易数据上传至所述区块链网络。
2.如权利要求1所述的方法,其特征在于,所述从所述第一数据结构中读取失败的情况包括:所述第一数据结构为空,或者所述第一数据结构包括至少一个历史指针,各个历史指针均与所述目标指针不相同;
其中,所述各个历史指针是在历史对所述第二数据结构进行动态升级时,从所述第二数据结构中复制得到的。
3.如权利要求2所述的方法,其特征在于,所述从所述第二数据结构中读取所述目标交易数据的目标指针之前,还包括:
对所述第二数据结构进行加,并对未命中数进行加一操作,所述未命中数是指从所述第一数据结构中读取指针失败的次数,所述未命中数用于确定对所述第二数据结构进行动态升级的时刻;
再次从所述第一数据结构中读取所述目标交易数据的目标指针;
若从所述第一数据结构中再次读取失败,则执行从所述第二数据结构中读取所述目标交易数据的目标指针的步骤。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:
获取次数阈值,所述次数阈值包括:预设数值或者根据所述第二数据结构中的指针的数量所确定的数值;
若加一操作后的未命中数大于或等于所述次数阈值,则对所述第二数据结构进行动态升级,以将所述第二数据结构中的各个指针复制至所述第一数据结构中,所述各个指针中包括所述目标指针。
5.如权利要求4所述的方法,其特征在于,所述若加一操作后的未命中数大于所述次数阈值,则对所述第二数据结构进行动态升级,包括:
若加一操作后的未命中数大于所述次数阈值,则将所述第二数据结构中的各个指针复制到所述第一数据结构中;
在成功复制到所述第一数据结构中后,删除所述第二数据结构中的各个指针,并将所述未命中数设置为零。
6.如权利要求2所述的方法,其特征在于,所述方法还包括:
若接收到目标交易数据,则将所述目标交易数据存储至所述内存池中,并确定所述目标交易数据在所述内存池中的存储地址;
对所述目标交易数据的存储地址进行封装,得到所述目标交易数据的目标指针;
对所述第二数据结构进行加锁,并将所述目标指针写入所述第二数据结构。
7.如权利要求6所述的方法,其特征在于,所述将所述目标指针写入所述第二数据结构之前,还包括:
若所述第二数据结构存在升级历史且所述第二数据结构为空,则将所述第一数据结构中的历史指针复制到所述第二数据结构中;
在成功复制到所述第二数据结构中后,执行所述将所述目标指针写入所述第二数据结构的步骤。
8.如权利要求1所述的方法,其特征在于,所述方法还包括:
若从所述第一数据结构中读取成功,则执行从所述目标指针所指向的存储地址处获取所述目标交易数据的步骤;
其中,所述第一数据结构中的目标指针是在历史对所述第二数据结构进行动态升级时,从所述第二数据结构中复制得到的。
9.如权利要求8所述的方法,其特征在于,所述方法还包括:
响应于针对所述目标交易数据的修改请求,获取修改后的目标交易数据;
若所述第一数据结构中包括所述目标指针,则从所述第一数据结构中读取所述目标指针,并在所述目标指针所指向的存储地址处,采用所述修改后的目标交易数据替换所述目标交易数据;
若所述第一数据结构中不包括所述目标指针,则对所述第二数据结构进行加锁,并从所述第二数据结构中读取所述目标指针;在所述目标指针所指向的存储地址处,采用所述修改后的目标交易数据替换所述目标交易数据。
10.如权利要求8所述的方法,其特征在于,所述方法还包括:
若检测到删除所述目标交易数据的删除触发事件,则从所述内存池中删除所述目标交易数据;
从所述第一数据结构和/或所述第二数据结构中,删除所述目标交易数据的目标指针。
11.如权利要求10所述的方法,其特征在于,所述从所述第一数据结构和/或所述第二数据结构中,删除所述目标交易数据的目标指针,包括:
若所述目标指针只存在于所述第一数据结构中,则在所述第一数据结构中为所述目标指针添加延迟删除标记,以在下次对所述第二数据结构进行动态升级时,从所述第一数据结构中删除所述目标指针;
若所述目标指针只存在于所述第二数据结构中,则对所述第二数据结构进行加锁,并从所述第二数据结构中删除所述目标指针;
若所述目标指针存在于所述第一数据结构和所述第二数据结构中,则分别在所述第一数据结构和所述第二数据结构中为所述目标指针添加延迟删除标记,以在下次对所述第二数据结构进行动态升级时,从所述第一数据结构和所述第二数据结构中删除所述目标指针。
12.一种数据处理装置,其特征在于,所述装置运行于区块链网络中的任一节点设备,所述节点设备包括第一数据结构和第二数据结构,所述第一数据结构和所述第二数据结构均用于存储所述节点设备的内存池中的交易数据的指针;所述第一数据结构用于执行并发的读操作,所述第二数据结构用于执行读写操作;且所述第一数据结构的读操作的优先级高于所述第二数据结构的读操作的优先级;所述装置包括:
读取单元,用于响应于将目标交易数据上传至所述区块链网络的触发事件,按照优先级从高到低的顺序从所述第一数据结构中读取所述目标交易数据的目标指针;
所述读取单元,还用于若从所述第一数据结构中读取失败,则从所述第二数据结构中读取所述目标交易数据的目标指针;所述目标指针是在存储所述目标交易数据时,根据所述目标交易数据在所述内存池中的存储地址写入至所述第二数据结构中的;
处理单元,用于从所述目标指针所指向的存储地址处获取所述目标交易数据,并将所述目标交易数据上传至所述区块链网络。
13.一种节点设备,包括输入接口和输出接口,其特征在于,所述节点设备还包括:第一数据结构和第二数据结构,所述第一数据结构和所述第二数据结构均用于存储所述节点设备的内存池中的交易数据的指针;所述第一数据结构用于执行并发的读操作,所述第二数据结构用于执行读写操作;且所述第一数据结构的读操作的优先级高于所述第二数据结构的读操作的优先级;
以及处理器,适于实现一条或多条指令;和计算机存储介质,所述计算机存储介质存储有一条或多条指令,所述一条或多条指令适于由所述处理器加载并执行如权利要求1-11任一项所述的数据处理方法。
14.一种计算机存储介质,其特征在于,所述计算机存储介质存储有一条或多条指令,所述一条或多条指令适于由处理器加载并执行如权利要求1-11任一项所述的数据处理方法。

说明书全文

数据处理方法、装置、节点设备及存储介质

技术领域

[0001] 本发明涉及互联网技术领域,具体涉及计算机技术领域,尤其涉及一种数据处理方法、一种数据处理装置、一种节点设备及一种计算机存储介质。

背景技术

[0002] 内存池(或称为交易池),是链网络中的各节点设备中的用于暂时存放尚未加入到区块中的交易数据的池子。目前,区块链网络中的各节点设备通常是采用总表管理方式对内存池中的交易数据执行读写操作的;其中,写操作是指在接收到交易数据时,将该交易数据写入内存池中的操作;读操作是指在将交易数据上传至区块链网络中时,从内存池中读取出该交易数据的操作。经研究表明,通过总表管理方式对任一交易数据进行读操作或写操作之前,均需要对总表进行加以避免因其他交易数据的写操作而破环总表的数据完整性和数据一致性。然而,一旦对总表进行加锁,则会导致节点设备无法再同步执行除当前操作以外的其他操作;例如,当前操作为读操作,则对总表加锁后,便无法再同步执行写操作;又如,当前操作为写操作,则对总表加锁后,便无法再同步执行读操作。由此可见,现有的总表管理的方式很容易导致读写冲突的问题,影响处理效率。

发明内容

[0003] 本发明实施例提供了一种数据处理方法、装置、节点设备及存储介质,可实现交易数据的读写分离,有效解决读写冲突的问题,提高处理效率。
[0004] 一方面,本发明实施例提供了一种数据处理方法,所述方法由区块链网络中的任一节点设备执行,所述节点设备包括第一数据结构和第二数据结构,所述第一数据结构和所述第二数据结构均用于存储所述节点设备的内存池中的交易数据的指针;所述第一数据结构用于执行并发的读操作,所述第二数据结构用于执行读写操作;且所述第一数据结构的读操作的优先级高于所述第二数据结构的读操作的优先级;所述方法包括:
[0005] 响应于将目标交易数据上传至所述区块链网络的触发事件,按照优先级从高到低的顺序从所述第一数据结构中读取所述目标交易数据的目标指针;
[0006] 若从所述第一数据结构中读取失败,则从所述第二数据结构中读取所述目标交易数据的目标指针;所述目标指针是在存储所述目标交易数据时,根据所述目标交易数据在所述内存池中的存储地址写入至所述第二数据结构中的;
[0007] 从所述目标指针所指向的存储地址处获取所述目标交易数据,并将所述目标交易数据上传至所述区块链网络。
[0008] 一方面,本发明实施例提供了一种数据处理装置,所述装置运行于区块链网络中的任一节点设备,所述节点设备包括第一数据结构和第二数据结构,所述第一数据结构和所述第二数据结构均用于存储所述节点设备的内存池中的交易数据的指针;所述第一数据结构用于执行并发的读操作,所述第二数据结构用于执行读写操作;且所述第一数据结构的读操作的优先级高于所述第二数据结构的读操作的优先级;所述装置包括:
[0009] 读取单元,用于响应于将目标交易数据上传至所述区块链网络的触发事件,按照优先级从高到低的顺序从所述第一数据结构中读取所述目标交易数据的目标指针;
[0010] 所述读取单元,还用于若从所述第一数据结构中读取失败,则从所述第二数据结构中读取所述目标交易数据的目标指针;所述目标指针是在存储所述目标交易数据时,根据所述目标交易数据在所述内存池中的存储地址写入至所述第二数据结构中的;
[0011] 处理单元,用于从所述目标指针所指向的存储地址处获取所述目标交易数据,并将所述目标交易数据上传至所述区块链网络。
[0012] 一方面,本发明实施例提供了一种节点设备,所述节点设备包括输入接口和输出接口,所述节点设备还包括:第一数据结构和第二数据结构,所述第一数据结构和所述第二数据结构均用于存储所述节点设备的内存池中的交易数据的指针;所述第一数据结构用于执行并发的读操作,所述第二数据结构用于执行读写操作;且所述第一数据结构的读操作的优先级高于所述第二数据结构的读操作的优先级;
[0013] 以及处理器,适于实现一条或多条指令;和计算机存储介质,所述计算机存储介质存储有一条或多条指令,所述一条或多条指令适于由所述处理器加载并执行如下步骤:
[0014] 响应于将目标交易数据上传至所述区块链网络的触发事件,按照优先级从高到低的顺序从所述第一数据结构中读取所述目标交易数据的目标指针;
[0015] 若从所述第一数据结构中读取失败,则从所述第二数据结构中读取所述目标交易数据的目标指针;所述目标指针是在存储所述目标交易数据时,根据所述目标交易数据在所述内存池中的存储地址写入至所述第二数据结构中的;
[0016] 从所述目标指针所指向的存储地址处获取所述目标交易数据,并将所述目标交易数据上传至所述区块链网络。
[0017] 一方面,本发明实施例提供了一种计算机存储介质,所述计算机存储介质存储有一条或多条指令,所述一条或多条指令适于由处理器加载并执行如下步骤:
[0018] 响应于将目标交易数据上传至所述区块链网络的触发事件,按照优先级从高到低的顺序从所述第一数据结构中读取所述目标交易数据的目标指针;
[0019] 若从所述第一数据结构中读取失败,则从所述第二数据结构中读取所述目标交易数据的目标指针;所述目标指针是在存储所述目标交易数据时,根据所述目标交易数据在所述内存池中的存储地址写入至所述第二数据结构中的;
[0020] 从所述目标指针所指向的存储地址处获取所述目标交易数据,并将所述目标交易数据上传至所述区块链网络。
[0021] 本发明实施例通过为节点设备分别设置:用于执行并发的读操作的第一数据结构以及用于执行读写操作的第二数据结构;可实现交易数据的读写分离,有效解决读写冲突的问题,从而提高处理效率。并且,由于第一数据结构的读操作的优先级高于第二数据结构的读操作的优先级;因此,在需要将目标交易数据上传至区块链网络时,可先按照优先级从高到低的顺序从第一数据结构中读取目标交易数据的目标指针。若从第一数据结构中读取成功,则可直接从目标指针所指向的存储地址处获取并上传目标交易数据至区块链网络。若从第一数据结构中读取失败,则可再从第二数据结构中读取目标交易数据的目标指针,并从目标指针所指向的存储地址处获取并上传目标交易数据至区块链网络;此处的目标指针是在存储目标交易数据时,根据目标交易数据在内存池中的存储地址写入至第二数据结构中的。在上述的数据处理过程中,由于第一数据结构不涉及写操作,因此在从第一数据结构中读取目标指针时,无需对第一数据结构进行加锁,可减少加锁对性能的影响,从而进一步提高数据读取效率。
附图说明
[0022] 为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0023] 图1a是本发明实施例提供的一种区块链网络的架构示意图;
[0024] 图1b是本发明实施例提供的一种写入交易数据的指针的示意图;
[0025] 图1c是本发明实施例提供的一种对第二数据结构进行动态升级的示意图;
[0026] 图1d是本发明实施例提供的一种读取交易数据的方法示意图;
[0027] 图2是本发明实施例提供的一种数据处理方法的流程示意图;
[0028] 图3是本发明实施例提供的一种数据处理方法的流程示意图;
[0029] 图4a是本发明一实施例提供的一种写入目标指针的示意图;
[0030] 图4b是本发明一实施例提供的一种对第二数据结构进行动态升级的示意图;
[0031] 图4c是本发明一实施例提供的一种写入目标指针的示意图;
[0032] 图4d是本发明一实施例提供的一种对第二数据结构进行动态升级的示意图;
[0033] 图4e是本发明实施例提供的一种删除目标指针的示意图;
[0034] 图4f是本发明实施例提供的一种删除目标指针的示意图;
[0035] 图4g是本发明实施例提供的一种删除目标指针的示意图;
[0036] 图5是本发明实施例提供的一种数据处理装置的结构示意图;
[0037] 图6是本发明实施例提供的一种节点设备的结构示意图。

具体实施方式

[0038] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
[0039] 区块链网络是一种由区块链和点对点网络(P2P网络)所构成的网络;所谓的区块链是一种分布式数据存储、点对点传输(P2P传输)、共识机制、加密算法等计算机技术的新型应用模式,其本质上是一个去中心化的数据库。区块链网络中可包括至少两个节点设备11,任意两个节点设备11之间采用P2P(Peer To Peer,点对点)协议进行网络通信,如图1a所示;其中,P2P协议是一个运行在传输控制协议(Transmission Control Protocol,TCP)之上的应用层协议;节点设备11是指区块链网络中进行数据处理的基本设备,其具体可包括但不限于:移动终端(如智能手机、平板电脑等)、矿机、台式计算机以及服务器,等等。为了可以更好地对区块链网络中的各个节点设备的内存池进行交易数据的读写操作,本发明实施例提出了一种数据处理方案;该数据处理方案可应用于图1a所示的区块链网络中的任一节点设备中,该数据处理方案的基本原理如下:
[0040] 首先,可为节点设备设置两个独立的map(数据结构):一个是可用于执行并发的读操作的第一数据结构,另一个则是可用于执行读写操作的第二数据结构。在具体实现中,可将通过atomic.Value(一种golang语言)保存的read-only map(read)作为第一数据结构;将通过sync.mutex(一种golang语言)控制的read-write map(dirty)作为第二数据结构。
由于第一数据结构不涉及交易数据的写操作,因此在通过第一数据结构对内存池进行交易数据的读操作时,可以无需对第一数据结构进行加锁;而由于第二数据结构涉及交易数据的写操作,因此在通过第二数据结构对内存池进行交易数据的写操作或读操作时,均需要对第二数据结构进行加锁。基于此,为了减少加锁对性能的影响,本发明实施例可设置第一数据结构的读操作的优先级高于第二数据结构的读操作的优先级,并为第一数据结构设置miss(未命中数)来记录从第一数据结构中读取指针失败的次数。当miss的值达到次数阈值时,则可将第二数据结构动态升级成第一数据结构,以将第二数据结构当前所包含的指针复制到第一数据结构中。
[0041] 需要说明的是,上述两个map中保存的均不是实际的交易数据,而是交易数据的指针;所谓的指针是编程语言中的一个对象,是通过对存储地址进行封装后的值;即第一数据结构和第二数据结构均用于存储节点设备的内存池中的交易数据的指针。其中,第二数据结构中的指针是在将交易数据存储至内存池时,根据交易数据的存储地址写入至第二数据结构中的;例如,设节点设备将交易数据X、交易数据Y以及交易数据Z存储至内存池时,可分别根据各交易数据的存储地址将相应的指针(X=1、Y=3、Z=8)写入第二数据结构,如图1b所示。第一数据结构中的指针则是在对第二数据结构进行动态升级时,从第二数据结构中复制得到的;此处的动态升级可包括如下内容:将第二数据结构当前所包含的指针复制到第一数据结构中,清空第二数据结构并将miss置为0;例如,设对图1b中的第二数据结构进行动态升级,则可将第二数据结构中的三个指针(X=1、Y=3、Z=8)复制到第一数据结构,并对第二数据结构进行清空,如图1c所示。
[0042] 在具体应用中,当节点设备接收到一个新的交易数据时,由于只有第二数据结构具有写操作的能,因此可通过第二数据结构将该新的交易数据写入内存池中。当节点设备需要对内存池中的某目标交易数据执行读取、更新或删除操作时,可优先从第一数据结构中读取该目标交易数据的指针,从而根据从第一数据结构中读取到的指针从内存池中读取、更新或删除该目标交易数据。若从第一数据结构中读取失败,则可累加miss(未命中数),并从第二数据结构读取目标交易数据的指针;然后根据从第二数据结构中读取到的指针从内存池中读取、更新或删除该目标交易数据。例如,参见图1d所示:设内存池中包括:交易数据1、交易数据2和交易数据3;其对应的指针分别为:指针1、指针2以及指针3;第一数据结构包括指针1和指针2,第二数据结构包括指针1、指针2以及指针3。当需要从内存池中读取交易数据1时,可先从第一数据结构中读取指针1;由于第一数据结构中包括指针1,因此可从第一数据结构中成功读取到指针1;然后可根据该指针1从内存池中读取交易数据1。当需要从内存池中读取交易数据3时,先从第一数据结构中读取指针3;由于第一数据结构中不包括指针3,因此从第一数据结构中无法读取到指针3。在此情况下,可对第二数据结构进行加锁,并累加未命中数;然后,从第二数据结构中读取指针3,并根据指针3从内存池中读取交易数据3。
[0043] 由此可见,本发明实施例通过为节点设备设置两个独立的数据结构,可实现交易数据的读写分离;从而可有效地避免读写冲突的问题,提高处理效率。并且,由于对第一数据结构执行读操作时,无需对第一数据结构进行加锁;因此可减少加锁对性能的影响,提高交易数据的获取速度。
[0044] 基于上述的描述,本发明实施例提出一种数据处理方法,该数据处理方法可以由上述所提及的区块链网络中的任一节点设备执行;该节点设备可包括第一数据结构和第二数据结构,第一数据结构和第二数据结构均用于存储节点设备的内存池中的交易数据的指针;第一数据结构用于执行并发的读操作,第二数据结构用于执行读写操作;且第一数据结构的读操作的优先级高于第二数据结构的读操作的优先级。请参见图2,该数据处理方法可包括以下步骤S201-S203:
[0045] S201,响应于将目标交易数据上传至区块链网络的触发事件,按照优先级从高到低的顺序从第一数据结构中读取目标交易数据的目标指针。
[0046] 由前述可知,内存池中所存储的交易数据均是待上传至区块链网络中的交易数据;在实际应用中,节点设备可先对内存池中的各个交易数据进行排序,然后按照排列顺序依次将各个交易数据依次上传至区块链网络。在本发明实施例中,目标交易数据是指内存池中所存储的任一交易数据;将目标交易数据上传至区块链网络的触发事件可以包括:按照排列顺序检测到目标交易数据之前不存在待上传的交易数据的事件。节点设备可实时检测是否存在将目标交易数据上传至区块链网络的触发事件;若检测该触发事件,则可先读取目标交易数据的目标指针,以便于后续可根据该目标指针获取目标交易数据,从而实现将目标交易数据上传至区块链网络中。其中,目标交易数据的目标指针是对目标交易数据在内存池中的存储地址进行封装得到的。
[0047] 在具体实现中,由于第一数据结构的读操作的优先级高于第二数据结构的读操作的优先级,因此在读取目标交易数据的目标指针时,可按照优先级从高到低的顺序从第一数据结构中读取目标交易数据的目标指针。经实践表明,在从第一数据结构中读取目标交易数据的目标指针时,可能存在以下三种情况:①第一数据结构为空,即第一数据结构中不包括任何指针;此情况是由于从未对第二数据结构进行动态升级所导致的。②第一数据结构包括至少一个历史指针,各个历史指针均与目标指针不同;各个历史指针是在历史对第二数据结构进行动态升级时,从第二数据结构中复制得到的;此情况是由于对第二数据结构进行动态升级时,第二数据结构中还未写入目标交易数据的目标指针所导致的。③第一数据结构包括目标指针,第一数据结构中的目标指针是在历史对第二数据结构进行动态升级时,从第二数据结构中复制得到的;此情况是由于对第二数据结构进行动态升级时,第二数据结构中已经成功写入目标交易数据的目标指针所导致的。当存在上述情况①或②时,则会导致节点设备无法成功从第一数据结构中读取到目标指针;此情况下,可执行步骤S202-S203。当存在上述情况③时,则节点设备可成功从第一数据结构中读取到目标指针;此情况下,可直接执行步骤S203。
[0048] S202,若从第一数据结构中读取失败,则从第二数据结构中读取目标交易数据的目标指针。
[0049] 此处的目标指针是在存储目标交易数据时,根据目标交易数据在内存池中的存储地址写入至第二数据结构中的。由前述可知,若从第一数据结构中读取目标交易数据的目标指针失败,则表明节点设备在第二数据结构中写入目标交易数据的目标指针后,还未对第二数据结构进行过动态升级,即目标交易数据的目标指针还未从第二数据结构中复制到第一数据结构中。因此,若从第一数据结构中读取失败,则节点设备可从第二数据结构中读取目标交易数据的目标指针。
[0050] 一种实施方式中,若从第一数据结构中读取失败,则可对第二数据结构进行加锁,然后直接从第二数据结构中读取该目标交易数据的目标指针。一种实施方式中,若从第一数据结构中读取失败,则节点设备在对第二数据结构进行加锁的过程中,还可异步地对未命中数进行加一操作。由前述可知,未命中数是指从第一数据结构中读取指针失败的次数,该未命中数可用于确定对第二数据结构进行动态升级的时刻;当未命中数达到次数阈值时,则可确定对第二数据结构进行动态升级的时刻到达,此时可对第二数据结构进行动态升级。经研究表明,在对第二数据结构进行加锁的过程中,可能会因对未命中数进行加一操作而使得加一操作后的未命中数达到次数阈值,从而触发节点设备对第二数据结构进行动态升级。而由于动态升级会将目标指针复制到第一数据结构,并清空第二数据结构中的指针以使得第二数据结构变为空数据结构;在此情况下,若直接从第二数据结构中读取目标指针,则会导致从空的第二数据结构中无法读取到该目标指针。因此,为避免在对第二数据结构进行加锁的过程中,因第二数据结构的动态升级而导致从第二数据结构读取目标指针失败的情况;本发明实施例在对第二数据结构进行加锁后,可基于双重检测(double-checking)原则进行目标交易数据的指针读取,以提高指针读取的成功率。其中,此处的双重检测原则包括:在对第二数据结构进行加锁后,再次从第一数据结构中读取目标交易数据的目标指针;若仍从第一数据结构中读取失败,则再从第二数据结构中读取该目标交易数据的目标指针。
[0051] S203,从目标指针所指向的存储地址处获取目标交易数据,并将目标交易数据上传至区块链网络。
[0052] 由前述可知,目标指针是对目标交易数据在内存池中的存储地址进行封装得到的;因此,在读取出目标指针之后,可从目标指针所指向的存储地址处获取目标交易数据。然后,可将目标交易数据上传至区块链网络。在具体实现中,将目标交易数据上传至区块链网络的一种实施方式可以是:可先将目标交易数据广播给区块链网络中的共识节点,以使得各个共识节点采用共识机制对该目标交易数据进行共识;在共识通过后,再将该目标交易数据打包成区块,并将包含该目标交易数据的区块添加至区块链网络中的区块链上。或者,将目标交易数据上传至区块链网络的另一种实施方式可以是:可先将目标交易数据打包成区块;然后将区块广播给区块链网络中的共识节点,以使得各个共识节点采用共识机制对该区块进行共识;在共识通过后,将包含该目标交易数据的区块添加至区块链网络中的区块链上。其中,共识节点是指区块链网络中参与共识的各个节点设备;共识机制是指区块链网络中实现不同节点设备之间建立信任、获取权益的数学算法。
[0053] 本发明实施例通过为节点设备分别设置:用于执行并发的读操作的第一数据结构以及用于执行读写操作的第二数据结构;可实现交易数据的读写分离,有效解决读写冲突的问题,从而提高处理效率。并且,由于第一数据结构的读操作的优先级高于第二数据结构的读操作的优先级;因此,在需要将目标交易数据上传至区块链网络时,可先按照优先级从高到低的顺序从第一数据结构中读取目标交易数据的目标指针。若从第一数据结构中读取成功,则可直接从目标指针所指向的存储地址处获取并上传目标交易数据至区块链网络。若从第一数据结构中读取失败,则可再从第二数据结构中读取目标交易数据的目标指针,并从目标指针所指向的存储地址处获取并上传目标交易数据至区块链网络;此处的目标指针是在存储目标交易数据时,根据目标交易数据在内存池中的存储地址写入至第二数据结构中的。在上述的数据处理过程中,由于第一数据结构不涉及写操作,因此在从第一数据结构中读取目标指针时,无需对第一数据结构进行加锁,可减少加锁对性能的影响,从而进一步提高数据读取效率。
[0054] 请参见图3,是本发明实施例提供的另一种数据处理方法的流程示意图。该数据处理方法可以由上述所提及的区块链网络中的任一节点设备执行。请参见图3,该数据处理方法可包括以下步骤S301-S305:
[0055] S301,响应于将目标交易数据上传至区块链网络的触发事件,按照优先级从高到低的顺序从第一数据结构中读取目标交易数据的目标指针。
[0056] 在执行步骤S301之前,节点设备可预先接收目标交易数据,并将目标交易数据存储至内存池中,以便于后续将目标交易数据上传至区块链网络中。在实际应用中,节点设备若接收到目标交易数据,则可将目标交易数据存储至内存池中,并确定目标交易数据在内存池中的存储地址。其次,可对目标交易数据的存储地址进行封装,得到目标交易数据的目标指针;具体的,可采用entry(一种封装工具)对目标交易数据的存储地址进行封装,得到目标指针。由于只有第二数据结构具有写操作的能力,因此在得到目标指针后,可对第二数据结构进行加锁;具体的,可采用加锁工具(如Mutex工具)对第二数据结构进行加锁。在对第二数据结构进行加锁后,可将目标指针写入第二数据结构。一种实施方式,在对第二数据结构进行加锁后,可直接将目标指针写入第二数据结构中。举例来说,如图4a所示:设接收到目标交易数据K,目标交易数据K的目标指针为:K=10;那么,在对第二数据结构进行加锁后,可直接将目标指针写入第二数据结构中。需要说明的是,图4a只是示例性地表示目标指针的写入过程,其并不对目标指针的具体写入过程进行限定;例如,虽然图4a所示的写入过程中,第一数据结构为空;但实际写入目标指针的过程中,第一数据结构也可以包括一个或多个指针。
[0057] 一种实施方式中,在将目标指针写入第二数据结构中之前,可能存在因第二数据结构进行了动态升级,而导致第二数据结构为空的情况。在此情况下,若直接将目标指针写入第二数据结构,则会导致第二数据结构中只包括目标指针,而不包括在目标指针之前所写入的历史指针;那么在后续对第二数据结构进行动态升级以将目标指针复制到第一数据结构中,可能会导致第一数据结构中在目标指针之前的历史指针被覆盖,从而导致历史指针的丢失。例如,参见图4b所示:在将目标指针写入第二数据结构中之前,第二数据结构进行了动态升级;此时的第一数据结构包括历史指针:X=1、Y=3以及Z=8,第二数据结构为空。若直接将目标指针K=10写入第二数据结构,则在后续对第二数据结构进行动态升级时,会导致动态升级后的第一数据结构中的历史指针均丢失。基于此,节点设备在将目标指针写入第二数据结构之前,可检测第二数据结构是否存在升级历史且第二数据结构是否为空;
若第二数据结构存在升级历史且第二数据结构为空,则可先将第一数据结构中的历史指针复制到第二数据结构中;在成功复制到第二数据结构中后,再执行将目标指针写入第二数据结构的步骤。例如,参见图4c所示:在将目标指针K=10写入第二数据结构之前,可将第一数据结构中的历史指针(X=1、Y=3以及Z=8)复制到第二数据结构,然后再将目标指针K=10写入第二数据结构。这样可使得在后续对第二数据结构进行动态升级时,不会导致第一数据结构中的历史指针丢失,如图4d所示。
[0058] 节点设备在将目标交易数据存储至内存池中之后,可实时或周期性检测是否存在将目标交易数据上传至区块链网络的触发事件;若检测到该触发事件,则可在步骤S301中响应于将目标交易数据上传至区块链网络的触发事件,按照优先级从高到低的顺序从第一数据结构中读取目标交易数据的目标指针。若从第一数据结构中读取成功,则可执行从目标指针所指向的存储地址处获取目标交易数据的步骤,即可直接执行步骤S305。若从第一数据结构中读取失败,则执行步骤S302-S305。
[0059] S302,若从第一数据结构中读取失败,则对第二数据结构进行加锁,并对未命中数进行加一操作。
[0060] S303,再次从第一数据结构中读取目标交易数据的目标指针。
[0061] S304,若从第一数据结构中再次读取失败,则执行从第二数据结构中读取目标交易数据的目标指针的步骤。
[0062] 在步骤S302-S305中,由前述可知,在对第二数据进行加锁的过程中,可能会由于加一操作后的未命中数达到次数阈值,从而触发第二数据结构进行动态升级,导致从第二数据结构中读取目标指针失败的情况。因此在通过步骤S302对第二数据结构进行加锁,并对未命中数进行加一操作后,可通过步骤S303再次从第一数据结构中读取目标交易数据的目标指针。若再次读取失败,则再通过步骤S304从第二数据结构中读取目标交易数据的目标指针。若通过步骤S303成功读取到目标指针,则可执行步骤S305。
[0063] 相应的,在对未命中数进行加一操作后,可获取次数阈值,该次数阈值可包括:预设数值或者根据第二数据结构中的指针的数量所确定的数值;例如,第二数据结构中当前包括了三个指针,则次数阈值可为3。若加一操作后的未命中数大于或等于次数阈值(即加一操作后的未命中数达到次数阈值),则对第二数据结构进行动态升级,以将第二数据结构中的各个指针复制至第一数据结构中,此处的各个指针中包括目标指针。其中,若加一操作后的未命中数大于次数阈值,则对第二数据结构进行动态升级的具体实施方式可以是:若加一操作后的未命中数大于次数阈值,则将第二数据结构中的各个指针复制到第一数据结构中;在成功复制到第一数据结构中后,删除第二数据结构中的各个指针,并将未命中数设置为零。
[0064] S305,从目标指针所指向的存储地址处获取目标交易数据,并将目标交易数据上传至区块链网络。
[0065] 在实际应用中,可能存在对内存池中的某交易数据进行修改的业务需求;在此情况下,可先从第一数据结构或者第二数据结构中读取该交易数据的指针,然后在该指针所指向的存储地址处对该交易数据进行修改。下面以目标交易数据为例,对修改交易数据的具体实施方式进行阐述:响应于针对目标交易数据的修改请求,获取修改后的目标交易数据。由前述可知,目标交易数据的目标指针可能存在第一数据结构中和/或第二数据结构中;若第一数据结构中包括目标指针,则从第一数据结构中读取目标指针,并在目标指针所指向的存储地址处,采用修改后的目标交易数据替换目标交易数据;若第一数据结构中不包括目标指针,则对第二数据结构进行加锁,并从第二数据结构中读取目标指针;在目标指针所指向的存储地址处,采用修改后的目标交易数据替换目标交易数据。本发明实施例在第一数据结构中包括目标指针的情况下,通过直接从第一数据结构中读取目标指针,并对其指向的存储地址进行CAS(比较和交换),无需对第一数据结构进行加锁,可有效提高修改效率。
[0066] 在实际应用中,还可能存在删除内存池中的某交易数据的业务需求;在此情况下,可直接将该交易数据从内存池中删除,以及删除该交易数据在第一数据结构或者第二数据结构中的指针。下面以目标交易数据为例,对删除交易数据的具体实施方式进行阐述:节点设备可实时检测是否存在删除目标交易数据的删除触发事件,此处的删除触发事件可包括但不限于:将目标交易数据成功上传至区块链网络中的事件、当前时刻已超过目标交易数据的有效期的事件、节点设备账户中的剩余电子资源小于该目标交易数据所需的电子资源的事件,等等。若检测到删除目标交易数据的删除触发事件,则可从内存池中删除目标交易数据;从第一数据结构和/或第二数据结构中,删除目标交易数据的目标指针。其中,从第一数据结构和/或第二数据结构中,删除目标交易数据的目标指针的具体实施方式可包括以下三种:
[0067] ①若目标指针只存在第一数据结构中,则在第一数据结构中为目标指针添加延迟删除标记,以在下次对第二数据结构进行动态升级时,从第一数据结构中删除目标指针。例如,参见图4e所示,目标指针(K=10)只存在第一数据结构中,因此可对该目标指针添加延迟删除标记(如nil标记),此时目标指针从“K=10”变成了“K=nil”;只有在对第二数据结构进行动态升级时,才会删除“nil”标记所对应的指针。②若目标指针只存在第二数据结构中,则对第二数据结构进行加锁,并从第二数据结构中删除目标指针。具体的,可直接调用golang内置的删除函数(delete函数)从第二数据结构中删除目标指针。例如,参见图4f所示,目标指针(K=10)只存在第二数据结构中,因此可对第二数据结构进行加锁,然后直接在第二数据结构删除该目标指针。③若目标指针存在第一数据结构和第二数据结构中,则可分别在第一数据结构和第二数据结构中为目标指针添加延迟删除标记,以在下次对第二数据结构进行动态升级时,从第一数据结构和第二数据结构中删除目标指针。例如,参见图4g所示,目标指针(K=10)存在第一数据结构和第二数据结构中,因此可分别在第一数据结构和第二数据结构中对该目标指针添加延迟删除标记,如nil标记。本发明实施例在第一数据结构包括目标交易数据的目标指针时,可通过为目标交易数据添加延迟删除标记,使得在对第二数据结构进行动态升级之前,若需要重新存储目标交易数据,则可直接通过第一数据结构中还未删除的目标指针,将目标交易数据存储至内存池中;无需通过第二数据结构重新写入目标指针,可有效提升处理效率。
[0068] 本发明实施例通过为节点设备分别设置:用于执行并发的读操作的第一数据结构以及用于执行读写操作的第二数据结构;可实现交易数据的读写分离,有效解决读写冲突的问题,从而提高处理效率。并且,由于第一数据结构的读操作的优先级高于第二数据结构的读操作的优先级;因此,在需要将目标交易数据上传至区块链网络时,可先按照优先级从高到低的顺序从第一数据结构中读取目标交易数据的目标指针。若从第一数据结构中读取成功,则可直接从目标指针所指向的存储地址处获取并上传目标交易数据至区块链网络。若从第一数据结构中读取失败,则可再从第二数据结构中读取目标交易数据的目标指针,并从目标指针所指向的存储地址处获取并上传目标交易数据至区块链网络;此处的目标指针是在存储目标交易数据时,根据目标交易数据在内存池中的存储地址写入至第二数据结构中的。在上述的数据处理过程中,由于第一数据结构不涉及写操作,因此在从第一数据结构中读取目标指针时,无需对第一数据结构进行加锁,可减少加锁对性能的影响,从而进一步提高数据读取效率。
[0069] 基于上述数据处理方法实施例的描述,本发明实施例还公开了一种数据处理装置,该数据处理装置可以是运行于节点设备中的一个计算机程序(包括程序代码);该节点设备包括第一数据结构和第二数据结构,第一数据结构和第二数据结构均用于存储该节点设备的内存池中的交易数据的指针;第一数据结构用于执行并发的读操作,第二数据结构用于执行读写操作;且第一数据结构的读操作的优先级高于第二数据结构的读操作的优先级。数据处理装置可以执行图1b至图4g所示的方法。请参见图5,该数据处理装置可以包括如下单元:
[0070] 读取单元501,用于响应于将目标交易数据上传至区块链网络的触发事件,按照优先级从高到低的顺序从第一数据结构中读取目标交易数据的目标指针;
[0071] 读取单元501,还用于若从第一数据结构中读取失败,则从第二数据结构中读取目标交易数据的目标指针;目标指针是在存储目标交易数据时,根据目标交易数据在内存池中的存储地址写入至第二数据结构中的;
[0072] 处理单元502,用于从目标指针所指向的存储地址处获取目标交易数据,并将目标交易数据上传至区块链网络。
[0073] 一种实施方式中,从第一数据结构中读取失败的情况包括:第一数据结构为空,或者第一数据结构包括至少一个历史指针,各个历史指针均与目标指针不相同;
[0074] 其中,各个历史指针是在历史对第二数据结构进行动态升级时,从第二数据结构中复制得到的。
[0075] 一种实施方式中,读取单元501在用于从第二数据结构中读取目标交易数据的目标指针之前,还可用于:
[0076] 对第二数据结构进行加锁,并对未命中数进行加一操作,该未命中数是指从第一数据结构中读取指针失败的次数,未命中数用于确定对第二数据结构进行动态升级的时刻;
[0077] 再次从第一数据结构中读取目标交易数据的目标指针;
[0078] 若从第一数据结构中再次读取失败,则执行从第二数据结构中读取目标交易数据的目标指针的步骤。
[0079] 一种实施方式中,处理单元502还可用于:
[0080] 获取次数阈值,次数阈值包括:预设数值或者根据第二数据结构中的指针的数量所确定的数值;
[0081] 若加一操作后的未命中数大于或等于次数阈值,则对第二数据结构进行动态升级,以将第二数据结构中的各个指针复制至第一数据结构中,各个指针中包括目标指针。
[0082] 一种实施方式中,处理单元502在用于若加一操作后的未命中数大于次数阈值,则对第二数据结构进行动态升级时,可具体用于:
[0083] 若加一操作后的未命中数大于次数阈值,则将第二数据结构中的各个指针复制到第一数据结构中;
[0084] 在成功复制到第一数据结构中后,删除第二数据结构中的各个指针,并将未命中数设置为零。
[0085] 一种实施方式中,处理单元502还可用于:
[0086] 若接收到目标交易数据,则将目标交易数据存储至内存池中,并确定目标交易数据在内存池中的存储地址;
[0087] 对目标交易数据的存储地址进行封装,得到目标交易数据的目标指针;
[0088] 对第二数据结构进行加锁,并将目标指针写入第二数据结构。
[0089] 一种实施方式中,处理单元502在用于将目标指针写入第二数据结构之前,还可用于:
[0090] 若第二数据结构存在升级历史且第二数据结构为空,则将第一数据结构中的历史指针复制到第二数据结构中;
[0091] 在成功复制到第二数据结构中后,执行将目标指针写入第二数据结构的步骤。
[0092] 一种实施方式中,处理单元502还可用于:
[0093] 若从第一数据结构中读取成功,则执行从目标指针所指向的存储地址处获取目标交易数据的步骤;
[0094] 其中,第一数据结构中的目标指针是在历史对第二数据结构进行动态升级时,从第二数据结构中复制得到的。
[0095] 一种实施方式中,处理单元502还可用于:
[0096] 响应于针对目标交易数据的修改请求,获取修改后的目标交易数据;
[0097] 若第一数据结构中包括目标指针,则从第一数据结构中读取目标指针,并在目标指针所指向的存储地址处,采用修改后的目标交易数据替换目标交易数据;
[0098] 若第一数据结构中不包括目标指针,则对第二数据结构进行加锁,并从第二数据结构中读取目标指针;在目标指针所指向的存储地址处,采用修改后的目标交易数据替换目标交易数据。
[0099] 一种实施方式中,处理单元502还可用于:
[0100] 若检测到删除目标交易数据的删除触发事件,则从内存池中删除目标交易数据;
[0101] 从第一数据结构和/或第二数据结构中,删除目标交易数据的目标指针。
[0102] 一种实施方式中,处理单元502在用于从第一数据结构和/或第二数据结构中,删除目标交易数据的目标指针,可具体用于:
[0103] 若目标指针只存在第一数据结构中,则在第一数据结构中为目标指针添加延迟删除标记,以在下次对第二数据结构进行动态升级时,从第一数据结构中删除目标指针;
[0104] 若目标指针只存在第二数据结构中,则对第二数据结构进行加锁,并从第二数据结构中删除目标指针;
[0105] 若目标指针存在第一数据结构和第二数据结构中,则分别在第一数据结构和第二数据结构中为目标指针添加延迟删除标记,以在下次对第二数据结构进行动态升级时,从第一数据结构和第二数据结构中删除目标指针。
[0106] 根据本发明的一个实施例,图1b至图4g所示的方法所涉及的各个步骤均可以是由图5所示的数据处理装置中的各个单元来执行的。例如,图2中所示的步骤S201和S202可由图5中所示的读取单元501来执行,步骤S203可由图5中所示的处理单元502来执行;又如,图3中所示的步骤S301-S304可由图5中所示的读取单元501来执行,步骤S305可由图5中所示的处理单元502来执行,等等。根据本发明的另一个实施例,图5所示的数据处理装置中的各个单元可以分别或全部合并为一个或若干个另外的单元来构成,或者其中的某个(些)单元还可以再拆分为功能上更小的多个单元来构成,这可以实现同样的操作,而不影响本发明的实施例的技术效果的实现。上述单元是基于逻辑功能划分的,在实际应用中,一个单元的功能也可以由多个单元来实现,或者多个单元的功能由一个单元实现。在本发明的其它实施例中,基于数据处理装置也可以包括其它单元,在实际应用中,这些功能也可以由其它单元协助实现,并且可以由多个单元协作实现。
[0107] 根据本发明的另一个实施例,可以通过在包括中央处理单元(CPU)、随机存取存储介质(RAM)、只读存储介质(ROM)等处理元件和存储元件的例如计算机的通用计算设备上运行能够执行如图1b至图4g中所示的相应方法所涉及的各步骤的计算机程序(包括程序代码),来构造如图5中所示的数据处理装置设备,以及来实现本发明实施例的数据处理方法。该计算机程序可以记载于例如计算机可读记录介质上,并通过计算机可读记录介质装载于上述计算设备中,并在其中运行。
[0108] 本发明实施例通过为节点设备分别设置:用于执行并发的读操作的第一数据结构以及用于执行读写操作的第二数据结构;可实现交易数据的读写分离,有效解决读写冲突的问题,从而提高处理效率。并且,由于第一数据结构的读操作的优先级高于第二数据结构的读操作的优先级;因此,在需要将目标交易数据上传至区块链网络时,可先按照优先级从高到低的顺序从第一数据结构中读取目标交易数据的目标指针。若从第一数据结构中读取成功,则可直接从目标指针所指向的存储地址处获取并上传目标交易数据至区块链网络。若从第一数据结构中读取失败,则可再从第二数据结构中读取目标交易数据的目标指针,并从目标指针所指向的存储地址处获取并上传目标交易数据至区块链网络;此处的目标指针是在存储目标交易数据时,根据目标交易数据在内存池中的存储地址写入至第二数据结构中的。在上述的数据处理过程中,由于第一数据结构不涉及写操作,因此在从第一数据结构中读取目标指针时,无需对第一数据结构进行加锁,可减少加锁对性能的影响,从而进一步提高数据读取效率。
[0109] 基于上述方法实施例以及装置实施例的描述,本发明实施例还提供一种节点设备;该节点设备包括:第一数据结构和第二数据结构,第一数据结构和第二数据结构均用于存储节点设备的内存池中的交易数据的指针;第一数据结构用于执行并发的读操作,第二数据结构用于执行读写操作;且第一数据结构的读操作的优先级高于第二数据结构的读操作的优先级。请参见图6,该节点设备还可包括处理器601、输入接口602、输出接口603以及计算机存储介质604。其中,节点设备内的处理器601、输入接口602、输出接口603以及计算机存储介质604可通过总线或其他方式连接。
[0110] 计算机存储介质604可以存储在节点设备的存储器中,该计算机存储介质604用于存储计算机程序;计算机程序可包括程序指令,处理器601用于执行该计算机存储介质604存储的程序指令。处理器601(或称CPU(Central Processing Unit,中央处理器))是节点设备的计算核心以及控制核心,其适于实现一条或多条指令,具体适于加载并执行一条或多条指令从而实现相应方法流程或相应功能;在一个实施例中,本发明实施例中的处理器601可以用于进行一系列的数据处理,包括:响应于将目标交易数据上传至区块链网络的触发事件,按照优先级从高到低的顺序从第一数据结构中读取目标交易数据的目标指针;若从第一数据结构中读取失败,则从第二数据结构中读取目标交易数据的目标指针;目标指针是在存储目标交易数据时,根据目标交易数据在内存池中的存储地址写入至第二数据结构中的;从目标指针所指向的存储地址处获取目标交易数据,并将目标交易数据上传至区块链网络,等等。
[0111] 本发明实施例还提供了一种计算机存储介质(Memory),该计算机存储介质是节点设备中的记忆设备,用于存放程序和数据。可以理解的是,此处的计算机存储介质既可以包括节点设备中的内置存储介质,当然也可以包括节点设备所支持的扩展存储介质。计算机存储介质提供存储空间,该存储空间存储了节点设备的操作系统。并且,在该存储空间中还存放了适于被处理器601加载并执行的一条或多条的指令,这些指令可以是一个或一个以上的计算机程序(包括程序代码)。需要说明的是,此处的计算机存储介质可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器;可选的还可以是至少一个位于远离前述处理器的计算机存储介质。
[0112] 在一个实施例中,可由处理器601加载并执行计算机存储介质中存放的一条或多条指令,以实现上述有关数据处理实施例中的方法的相应步骤;具体实现中,计算机存储介质中的一条或多条指令由处理器601加载并执行如下步骤:
[0113] 响应于将目标交易数据上传至区块链网络的触发事件,按照优先级从高到低的顺序从第一数据结构中读取目标交易数据的目标指针;
[0114] 若从第一数据结构中读取失败,则从第二数据结构中读取目标交易数据的目标指针;目标指针是在存储目标交易数据时,根据目标交易数据在内存池中的存储地址写入至第二数据结构中的;
[0115] 从目标指针所指向的存储地址处获取目标交易数据,并将目标交易数据上传至区块链网络
[0116] 一种实施方式中,从第一数据结构中读取失败的情况包括:第一数据结构为空,或者第一数据结构包括至少一个历史指针,各个历史指针均与目标指针不相同;
[0117] 其中,各个历史指针是在历史对第二数据结构进行动态升级时,从第二数据结构中复制得到的。
[0118] 一种实施方式中,在从第二数据结构中读取目标交易数据的目标指针之前,一条或多条指令还可由处理器601加载并具体执行:
[0119] 对第二数据结构进行加锁,并对未命中数进行加一操作,未命中数是指从第一数据结构中读取指针失败的次数,未命中数用于确定对第二数据结构进行动态升级的时刻;
[0120] 再次从第一数据结构中读取目标交易数据的目标指针;
[0121] 若从第一数据结构中再次读取失败,则执行从第二数据结构中读取目标交易数据的目标指针的步骤。
[0122] 一种实施方式中,一条或多条指令还可由处理器601加载并具体执行:
[0123] 获取次数阈值,次数阈值包括:预设数值或者根据第二数据结构中的指针的数量所确定的数值;
[0124] 若加一操作后的未命中数大于或等于次数阈值,则对第二数据结构进行动态升级,以将第二数据结构中的各个指针复制至第一数据结构中,各个指针中包括目标指针。
[0125] 一种实施方式中,在若加一操作后的未命中数大于次数阈值,则对第二数据结构进行动态升级时,一条或多条指令由处理器601加载并具体执行:
[0126] 若加一操作后的未命中数大于次数阈值,则将第二数据结构中的各个指针复制到第一数据结构中;
[0127] 在成功复制到第一数据结构中后,删除第二数据结构中的各个指针,并将未命中数设置为零。
[0128] 一种实施方式中,一条或多条指令还可由处理器601加载并具体执行:
[0129] 若接收到目标交易数据,则将目标交易数据存储至内存池中,并确定目标交易数据在内存池中的存储地址;
[0130] 对目标交易数据的存储地址进行封装,得到目标交易数据的目标指针;
[0131] 对第二数据结构进行加锁,并将目标指针写入第二数据结构。
[0132] 一种实施方式中,在将目标指针写入第二数据结构之前,一条或多条指令还可由处理器601加载并具体执行:
[0133] 若第二数据结构存在升级历史且第二数据结构为空,则将第一数据结构中的历史指针复制到第二数据结构中;
[0134] 在成功复制到第二数据结构中后,执行将目标指针写入第二数据结构的步骤。
[0135] 一种实施方式中,一条或多条指令还可由处理器601加载并具体执行:
[0136] 若从第一数据结构中读取成功,则执行从目标指针所指向的存储地址处获取目标交易数据的步骤;
[0137] 其中,第一数据结构中的目标指针是在历史对第二数据结构进行动态升级时,从第二数据结构中复制得到的。
[0138] 一种实施方式中,一条或多条指令还可由处理器601加载并具体执行:
[0139] 响应于针对目标交易数据的修改请求,获取修改后的目标交易数据;
[0140] 若第一数据结构中包括目标指针,则从第一数据结构中读取目标指针,并在目标指针所指向的存储地址处,采用修改后的目标交易数据替换目标交易数据;
[0141] 若第一数据结构中不包括目标指针,则对第二数据结构进行加锁,并从第二数据结构中读取目标指针;在目标指针所指向的存储地址处,采用修改后的目标交易数据替换目标交易数据。
[0142] 一种实施方式中,一条或多条指令还可由处理器601加载并具体执行:
[0143] 若检测到删除目标交易数据的删除触发事件,则从内存池中删除目标交易数据;
[0144] 从第一数据结构和/或第二数据结构中,删除目标交易数据的目标指针。
[0145] 一种实施方式中,在从第一数据结构和/或第二数据结构中,删除目标交易数据的目标指针时,一条或多条指令由处理器601加载并具体执行:
[0146] 若目标指针只存在第一数据结构中,则在第一数据结构中为目标指针添加延迟删除标记,以在下次对第二数据结构进行动态升级时,从第一数据结构中删除目标指针;
[0147] 若目标指针只存在第二数据结构中,则对第二数据结构进行加锁,并从第二数据结构中删除目标指针;
[0148] 若目标指针存在第一数据结构和第二数据结构中,则分别在第一数据结构和第二数据结构中为目标指针添加延迟删除标记,以在下次对第二数据结构进行动态升级时,从第一数据结构和第二数据结构中删除目标指针。
[0149] 本发明实施例通过为节点设备分别设置:用于执行并发的读操作的第一数据结构以及用于执行读写操作的第二数据结构;可实现交易数据的读写分离,有效解决读写冲突的问题,从而提高处理效率。并且,由于第一数据结构的读操作的优先级高于第二数据结构的读操作的优先级;因此,在需要将目标交易数据上传至区块链网络时,可先按照优先级从高到低的顺序从第一数据结构中读取目标交易数据的目标指针。若从第一数据结构中读取成功,则可直接从目标指针所指向的存储地址处获取并上传目标交易数据至区块链网络。若从第一数据结构中读取失败,则可再从第二数据结构中读取目标交易数据的目标指针,并从目标指针所指向的存储地址处获取并上传目标交易数据至区块链网络;此处的目标指针是在存储目标交易数据时,根据目标交易数据在内存池中的存储地址写入至第二数据结构中的。在上述的数据处理过程中,由于第一数据结构不涉及写操作,因此在从第一数据结构中读取目标指针时,无需对第一数据结构进行加锁,可减少加锁对性能的影响,从而进一步提高数据读取效率。
[0150] 以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈