一种数字对象的存证副本的管理方法与装置转让专利

申请号 : CN202211107317.6

文献号 : CN115185972B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 蔡华谦黄罡李影郭京申

申请人 : 北京大学

摘要 :

本发明实施例提供了一种数字对象的存证副本的管理方法及装置,所述方法通过在图式账本系统中发生节点变更的情况下,获取图式账本系统更新后的全局节点列表;获取图式账本中指定区块的区块哈希,并基于区块哈希和全局节点列表,确定指定区块对应的备份节点列表;在节点属于备份节点列表且本地未存储指定区块的情况下,获取指定区块并对指定区块进行备份。这样,在节点发生变更的情况下,动态的重新计算备份节点列表,基于备份节点列表以及节点本地的存储情况进行备份,动态调整区块的存证副本的数量,可以确保图式账本系统中区块始终保持适量数目的存证副本,避免存证副本减少导致数据丢失的安全隐患,一定程度上也保障了系统的安全性。

权利要求 :

1.一种数字对象的存证副本的管理方法,其特征在于,应用于图式账本系统中的任一节点,所述方法包括:在所述图式账本系统中发生节点变更的情况下,获取所述图式账本系统更新后的全局节点列表,以对所述全局节点列表达成共识;

获取图式账本中指定区块的区块哈希,并基于所述区块哈希和所述全局节点列表,确定所述指定区块对应的备份节点列表;所述备份节点列表是基于计算当前在线的各节点与所述指定区块之间的距离得到的多个节点确定的;

其中,在所述图式账本系统中发生节点退出的情况下,所述指定区块的区块哈希包括由退出节点之前所备份的区块的区块哈希,在所述图式账本系统中发生节点加入的情况下,所述指定区块的区块哈希包括所述图式账本中所有区块的区块哈希;

若所述节点属于所述备份节点列表且本地未存储所述指定区块,获取所述指定区块并对所述指定区块进行备份,以在本地存储所述指定区块中数字对象的存证副本;

若所述节点不属于所述指定区块的备份节点列表且本地存储有所述指定区块,删除所述指定区块,以删除所述指定区块中数字对象的存证副本。

2.根据权利要求1所述的方法,其特征在于,所述获取图式账本中指定区块的区块哈希,并基于所述区块哈希和所述全局节点列表,确定所述指定区块对应的备份节点列表,包括:基于所述图式账本的区块哈希流,获取所述指定区块的区块哈希;所述区块哈希流包括所述节点已知的所有区块哈希;

根据所述全局节点列表,获取所述图式账本系统中当前在线的各节点的节点ID;

基于所述区块哈希以及所述节点ID,计算所述图式账本系统中当前在线的各节点与所述指定区块之间的距离;

将所述图式账本系统中距离最小的K个节点作为备份节点,生成所述指定区块对应的备份节点列表;所述K为不小于2的整数。

3.根据权利要求2所述的方法,其特征在于,所述基于所述图式账本的区块哈希流,获取所述指定区块的区块哈希,包括:在所述图式账本系统中发生节点退出的情况下,基于所述图式账本的区块哈希流,获取由退出节点之前所备份的区块的区块哈希;

在所述图式账本系统中发生节点加入的情况下,基于所述图式账本的区块哈希流,获取图式账本中所有区块的区块哈希。

4.根据权利要求1所述的方法,其特征在于,所述删除所述指定区块中数字对象的存证副本,包括:获取所述节点的节点版本号以及所述指定区块的区块哈希;

将所述指定区块的区块哈希以及所述节点版本号,以键值对的形式存储至预设数据库中,以为本地存储的所述指定区块创建删除标记;所述删除标记用于指示在达到预设删除条件的情况下,对本地存储的所述指定区块进行删除。

5.根据权利要求4所述的方法,其特征在于,所述键值对的键名中包括所述指定区块的区块哈希,所述键值对的键值中包括所述节点版本号;所述方法还包括:在接收到区块删除请求的情况下,获取当前的节点版本号;

在所述当前的节点版本号与所述键值中的节点版本号相等的情况下,基于所述键名中包括的所述指定区块的区块哈希删除所述指定区块;

在所述当前的节点版本号与所述键值中的节点版本号不相等的情况下,计算所述指定区块对应的备份节点列表,若所述节点不属于所述备份节点列表,基于所述键名中包括的所述指定区块的区块哈希删除所述指定区块。

6.根据权利要求1所述的方法,其特征在于,所述获取所述指定区块并对所述指定区块进行备份,包括:获取所述指定区块的区块哈希以及所述指定区块对应的候选节点列表;

从所述候选节点列表中选择目标节点,并向所述目标节点发送区块请求消息;所述区块请求消息携带所述指定区块的区块哈希;

接收所述目标节点返回的所述指定区块并对所述指定区块中所述数字对象的相关信息进行备份。

7.根据权利要求6所述的方法,其特征在于,所述从所述候选节点列表中选择目标节点,包括:在所述候选节点列表的候选节点中包括邻居节点的情况下,若所述邻居节点已接收到的区块请求消息数量小于预设数量阈值,则将所述邻居节点确定为所述目标节点;

在所述候选节点列表的候选节点中不包括邻居节点的情况下或在所述邻居节点已接收到的区块请求消息数量大于预设数量阈值的情况下,从所述候选节点列表的候选节点中选择与本节点已建立连接的节点,作为所述目标节点。

8.一种数字对象的存证副本的管理装置,其特征在于,应用于图式账本系统中的任一节点,所述装置包括:第一获取模块,用于在所述图式账本系统中发生节点变更的情况下,获取所述图式账本系统更新后的全局节点列表,以对所述全局节点列表达成共识;

第一确定模块,用于获取图式账本中指定区块的区块哈希,并基于所述区块哈希和所述全局节点列表,确定所述指定区块对应的备份节点列表;所述备份节点列表是基于计算当前在线的各节点与所述指定区块之间的距离得到的多个节点确定的;

其中,在所述图式账本系统中发生节点退出的情况下,所述指定区块的区块哈希包括由退出节点之前所备份的区块的区块哈希,在所述图式账本系统中发生节点加入的情况下,所述指定区块的区块哈希包括所述图式账本中所有区块的区块哈希;

第一备份模块,用于若所述节点属于所述备份节点列表且本地未存储所述指定区块,获取所述指定区块并对所述指定区块进行备份,以在本地存储所述指定区块中数字对象的存证副本;

第一删除模块,用于若所述节点不属于所述指定区块的备份节点列表且本地存储有所述指定区块,删除所述指定区块,以删除所述指定区块中数字对象的存证副本。

9.根据权利要求8所述的装置,其特征在于,所述第一确定模块包括:第一获取子模块,用于基于所述图式账本的区块哈希流,获取所述指定区块的区块哈希;所述区块哈希流包括所述节点已知的所有区块哈希;

第二获取子模块,用于根据所述全局节点列表,获取所述图式账本系统中当前在线的各节点的节点ID;

第一计算模块,用于基于所述区块哈希以及所述节点ID,计算所述图式账本系统中当前在线的各节点与所述指定区块之间的距离;

第一生成模块,用于将所述图式账本系统中距离最小的K个节点作为备份节点,生成所述指定区块对应的备份节点列表;所述K为不小于2的整数。

说明书 :

一种数字对象的存证副本的管理方法与装置

技术领域

[0001] 本发明属于计算机技术领域,特别是涉及一种数字对象的存证副本的管理方法与装置。

背景技术

[0002] 图式账本是以有向无环图为数据组织形式的分布式账本技术,避免了单链式结构串行写入的限制,从而提高系统吞吐量。BDLedger是一种可信图式账本,用户可通过调用接口将待存证的数据写入BDLedger账本,完成数据“上链”后得到一个哈希值,之后可使用这个哈希值查询到原数据。
[0003] 在BDLedger当前的随机见证共识机制中,备份节点的选择只发生在创建区块的时候,是一次性的,区块备份被创建后没有后续的维护和管理,无法应对节点发生变更的情况,例如,节点动态加入或退出联盟的情况。如果节点发生永久故障,或者退出联盟而永久离开了网络,在极端情况下,如果一个区块的所有备份节点都已经离开了网络,所有的区块的存证副本在网络中丢失,则会导致区块存证副本数量减少甚至区块数据丢失,存在数据丢失的安全隐患。如果有新节点接入联盟,由于没有后续的维护和管理,可能会导致新节点闲置。
[0004] 因此,如何在节点发生变更时,对区块的存证副本进行动态调整成为亟需解决的问题。

发明内容

[0005] 为克服相关技术中存在的问题,本发明提供一种数字对象的存证副本的管理方法与装置。
[0006] 第一方面,本发明提供了一种数字对象的存证副本的管理方法,应用于图式账本系统中的任一节点,所述方法包括:
[0007] 在所述图式账本系统中发生节点变更的情况下,获取所述图式账本系统更新后的全局节点列表,以对所述全局节点列表达成共识;
[0008] 获取图式账本中指定区块的区块哈希,并基于所述区块哈希和所述全局节点列表,确定所述指定区块对应的备份节点列表;
[0009] 若所述节点属于所述备份节点列表且本地未存储所述指定区块,获取所述指定区块并对所述指定区块进行备份,以在本地存储所述指定区块中数字对象的存证副本。
[0010] 可选的,所述获取图式账本中指定区块的区块哈希,并基于所述区块哈希和所述全局节点列表,确定所述指定区块对应的备份节点列表,包括:
[0011] 基于所述图式账本的区块哈希流,获取所述指定区块的区块哈希;所述区块哈希流包括所述节点已知的所有区块哈希;
[0012] 根据所述全局节点列表,获取所述图式账本系统中当前在线的各节点的节点ID;
[0013] 基于所述区块哈希以及所述节点ID,计算所述图式账本系统中当前在线的各节点与所述指定区块之间的距离;
[0014] 将所述图式账本系统中所述距离最小的K个节点作为备份节点,生成所述指定区块对应的备份节点列表;所述K为不小于2的整数。
[0015] 可选的,所述基于所述图式账本的区块哈希流,获取所述指定区块的区块哈希,包括:
[0016] 在所述图式账本系统中发生节点退出的情况下,基于所述图式账本的区块哈希流,获取由退出节点之前所备份的区块的区块哈希;
[0017] 在所述图式账本系统中发生节点加入的情况下,基于所述图式账本的区块哈希流,获取图式账本中所有区块的区块哈希。
[0018] 可选的,所述删除所述指定区块中数字对象的存证副本,包括:
[0019] 获取所述节点的节点版本号以及所述指定区块的区块哈希;
[0020] 将所述指定区块的区块哈希以及所述节点版本号,以键值对的形式存储至预设数据库中,以为本地存储的所述指定区块创建删除标记;所述删除标记用于指示在达到预设删除条件的情况下,对本地存储的所述指定区块进行删除。
[0021] 可选的,所述键值对的键名中包括所述指定区块的区块哈希,所述键值对的键值中包括所述节点版本号;所述方法还包括:
[0022] 在接收到区块删除请求的情况下,获取当前的节点版本号;
[0023] 在所述当前的节点版本号与所述键值中的节点版本号相等的情况下,基于所述键名中包括的所述指定区块的区块哈希删除所述指定区块;
[0024] 在所述当前的节点版本号与所述键值中的节点版本号不相等的情况下,计算所述指定区块对应的备份节点列表,若所述节点不属于所述备份节点列表,基于所述键名中包括的所述指定区块的区块哈希删除所述指定区块。
[0025] 可选的,所述获取所述指定区块并对所述指定区块进行备份,包括:
[0026] 获取所述指定区块的区块哈希以及所述指定区块对应的候选节点列表;
[0027] 从所述候选节点列表中选择目标节点,并向所述目标节点发送区块请求消息;所述区块请求消息携带所述指定区块的区块哈希;
[0028] 接收所述目标节点返回的所述指定区块并对所述指定区块中所述数字对象的相关信息进行备份。
[0029] 可选的,所述从所述候选节点列表中选择目标节点,包括:
[0030] 在所述候选节点列表的候选节点中包括邻居节点的情况下,若所述邻居节点已接收到的区块请求消息数量小于预设数量阈值,则将所述邻居节点确定为所述目标节点;
[0031] 在所述候选节点列表的候选节点中不包括邻居节点的情况下或在所述邻居节点已接收到的区块请求消息数量大于预设数量阈值的情况下,从所述候选节点列表的候选节点中选择与本节点已建立连接的节点,作为所述目标节点。
[0032] 第二方面,本发明提供了一种数字对象的存证副本的管理装置,应用于图式账本系统中的任一节点,所述装置包括:
[0033] 第一获取模块,用于在所述图式账本系统中发生节点变更的情况下,获取所述图式账本系统更新后的全局节点列表,以对所述全局节点列表达成共识;
[0034] 第一确定模块,用于获取图式账本中指定区块的区块哈希,并基于所述区块哈希和所述全局节点列表,确定所述指定区块对应的备份节点列表;
[0035] 第一备份模块,用于若所述节点属于所述备份节点列表且本地未存储所述指定区块,获取所述指定区块并对所述指定区块进行备份,以在本地存储所述指定区块中数字对象的存证副本;
[0036] 第一删除模块,用于若所述节点不属于所述指定区块的备份节点列表且本地存储有所述指定区块,删除所述指定区块,以删除所述指定区块中数字对象的存证副本。
[0037] 可选的,所述第一确定模块包括:
[0038] 第一获取子模块,用于基于所述图式账本的区块哈希流,获取所述指定区块的区块哈希;所述区块哈希流包括所述节点已知的所有区块哈希;
[0039] 第二获取子模块,用于根据所述全局节点列表,获取所述图式账本系统中当前在线的各节点的节点ID;
[0040] 第一计算模块,用于基于所述区块哈希以及所述节点ID,计算所述图式账本系统中当前在线的各节点与所述指定区块之间的距离;
[0041] 第一生成模块,用于将所述图式账本系统中所述距离最小的K个节点作为备份节点,生成所述指定区块对应的备份节点列表;所述K为不小于2的整数。
[0042] 本发明实施例提供了一种数字对象的存证副本的管理方法及装置,所述方法通过在图式账本系统中发生节点变更的情况下,获取图式账本系统更新后的全局节点列表,以对全局节点列表达成共识;获取图式账本中指定区块的区块哈希,并基于区块哈希和全局节点列表,确定指定区块对应的备份节点列表;在节点属于备份节点列表且本地未存储指定区块的情况下,获取指定区块并对指定区块进行备份,以在本地存储数字对象的存证副本,所述指定区块中包括所述数字对象的相关信息。这样,在节点发生变更的情况下,图式账本系统中的各个节点均根据图式账本中指定区块的区块哈希以及全局节点列表,重新确定指定区块对应的备份节点列表,在节点自身属于备份节点列表且本地未存储指定区块,即,该节点本次被选中为指定区块对应的备份节点的情况下,对指定区块进行备份,以在本地存储数字对象的存证副本,进而实现在节点发生变更时,对区块的存证副本进行动态调整。且在图式账本系统中节点发生变更的情况下,动态的重新计算备份节点列表,基于备份节点列表以及节点本地的存储情况进行备份,动态调整区块的存证副本的数量,可以确保图式账本系统中区块始终保持适量数目的存证副本,避免存证副本减少导致数据丢失的安全隐患,一定程度上也保障了系统的安全性。

附图说明

[0043] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0044] 图1是本发明实施例提供的一种数字对象的存证副本的管理方法的步骤流程图;
[0045] 图2是本发明实施例提供的一种候选节点选择的流程图;
[0046] 图3是本发明实施例提供的一种区块获取模块获取区块的步骤流程图;
[0047] 图4是本发明实施例提供的一种数字对象的存证副本的管理装置的结构图。

具体实施方式

[0048] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0049] 图1是本发明实施例提供的一种数字对象的存证副本的管理方法,应用于图式账本系统中的任一节点。
[0050] 本发明实施例中,图式账本系统中的任一节点包括全局节点列表计算模块、区块哈希流模块、引擎、区块获取模块以及区块删除模块。
[0051] 如图1所示,该方法可以包括:
[0052] 步骤101、在所述图式账本系统中发生节点变更的情况下,获取所述图式账本系统更新后的全局节点列表,以对所述全局节点列表达成共识。
[0053] 其中,图式账本可以是BDLedger账本,BDLedger是面向大数据存证场景的图式账本,采用了DAG账本结构和nRW随机见证共识机制,实现了系统交易吞吐量的高可扩展。用户可通过调用接口将待存证的数据写入BDLedger账本,完成数据“上链”后得到一个哈希值,之后可使用这个哈希值查询到原数据。在BDLedger账本中,一个区块被创建后,仅随机选择出的固定数量的备份节点去存储该区块,相比于每个全节点都进行存储备份,减少了存储开销。
[0054] 本发明实施例中,节点变更包括节点退出和节点加入,图式账本系统中发生节点变更的情况即图式账本系统中出现节点退出的情况或节点加入的情况。在有节点退出的情况下,图式账本系统中的节点减少;在有节点加入的情况下,图式账本系统中的节点增加。每当发生联盟中节点列表变动,比如新增或减少节点,则称为对图式账本系统的版本更新,且进入一个新的节点版本,每个版本有一个整数类型的版本号,随着版本更新而单调递增,可用于比较版本的新旧。
[0055] 全局节点列表包括图式账本中全部节点,在实际应用中,该全局节点列表中可以指联盟中近期在线的全部节点,无需与实际在线节点严格保持一致。在一种可行的实施方式中,BDLedger账本中包括系统链,全局节点列表可以基于系统链实现,全局节点列表在系统链状态中具体表示为一个从节点ID到存活时间(TTL,Time To Live)的映射,将TTL值大于0的节点确认为全局节点列表的一员。具体的,当节点加入联盟并上线后,会定期向系统链发送心跳交易,设置自己的TTL值,从而保持自己在全局节点列表中。系统链会周期性地生成区块,每当生成一个新区块时,会将当前列表中所有节点对应的TTL值减一,如果有节点的TTL值减为0,说明此节点长期没有发送心跳交易,很可能已经不在网络中,则从列表中移除节点。
[0056] 当节点启动后,节点通过全局节点列表计算模块同步到系统链的最新状态。通过按顺序执行各个交易更新本地已知的系统链状态,系统链状态改变过程中可以观察到节点版本的变化。节点通过获得系统链当前状态,得到当前全局节点列表,以对全局节点列表达成共识。其中,全局节点列表包括节点ID以及节点版本号。
[0057] 步骤102、获取图式账本中指定区块的区块哈希,并基于所述区块哈希和所述全局节点列表,确定所述指定区块对应的备份节点列表。
[0058] 其中,指定区块可以是图式账本中的部分区块,也可以是图式账本中的所有区块,部分区块可以是推出的节点所备份的区块。
[0059] 本发明实施例中,基于指定区块的区块哈希和全局节点列表,通过引擎计算需要存储该区块的多个备份节点,生成指定区块对应的备份节点列表,该备份节点列表中包含多个备份节点。
[0060] 步骤103、若所述节点属于所述备份节点列表且本地未存储所述指定区块,获取所述指定区块并对所述指定区块进行备份,以在本地存储数字对象的存证副本,所述指定区块中包括所述数字对象的相关信息。
[0061] 本发明实施例中,区块是由多个交易组成,数字对象的调用、交互以及记录等被称为交易,一组数字对象的调用、交互以及记录就会形成一个区块,也即区块中包含数字对象以及数字对象的相关信息,该相关信息可以是数字对象所执行的操作表征的相关行为信息。
[0062] 本发明实施例中,当前节点属于指定区块对应的备份节点列表,即表明当前节点为指定区块对应的备份节点,需要对该指定区块进行存储备份。在当前节点本地未存储指定区块的情况下,引擎需要获取指定区块并对指定区块进行存储备份,以在本地存储指定区块中数字对象的存证副本。可以理解的是,存储指定区块可以是存储指定区块中的所有数据,也可以是存储指定区块中数字对象的相关信息。对数字对象的相关信息进行备份即为数字对象的相关信息创建数字对象的存证副本,也就是说,存储指定区块中数字对象的相关信息即在本地存储指定区块中数字对象的存证副本。
[0063] 步骤104、若所述节点不属于所述指定区块的备份节点列表且本地存储有所述指定区块,删除所述指定区块,以删除所述指定区块中数字对象的存证副本。
[0064] 本发明实施例中,当前节点不属于指定区块对应的备份节点列表,即表明当前节点不是指定区块对应的备份节点,也就可以不用作为指定区块的备份节点存储本分该指定区块,因此,在存储资源紧张时,可以对指定区块进行删除,从而也删除了指定区块中数字对象的存证副本。
[0065] 综上所述,本发明实施例提供了一种数字对象的存证副本的管理方法,所述方法通过在图式账本系统中发生节点变更的情况下,获取图式账本系统更新后的全局节点列表,以对全局节点列表达成共识;获取图式账本中指定区块的区块哈希,并基于区块哈希和述全局节点列表,确定指定区块对应的备份节点列表;在节点属于备份节点列表且本地未存储指定区块的情况下,获取指定区块并对指定区块进行备份,以在本地存储数字对象的存证副本,所述指定区块中包括所述数字对象的相关信息。这样,在节点发生变更的情况下,图式账本系统中的各个节点均根据图式账本中指定区块的区块哈希以及全局节点列表,重新确定指定区块对应的备份节点列表,在节点自身属于备份节点列表且本地未存储指定区块,即,该节点本次被选中为指定区块对应的备份节点的情况下,对指定区块指定区块进行备份,以在本地存储数字对象的存证副本,进而实现在节点发生变更时,对区块的存证副本进行动态调整。且在图式账本系统中节点发生变更的情况下,动态的重新计算备份节点列表,基于备份节点列表以及节点本地的存储情况进行备份,动态调整区块的存证副本的数量,可以确保图式账本系统中区块始终保持适量数目的存证副本,避免存证副本减少导致数据丢失的安全隐患,一定程度上也保障了系统的安全性。
[0066] 可选的,步骤102可以包括以下步骤:
[0067] 步骤1021、基于所述图式账本的区块哈希流,获取所述指定区块的区块哈希;所述区块哈希流包括所述节点已知的所有区块哈希。
[0068] 本发明实施例中,由于区块头全网同步,本节点可以知道全网存在哪些区块。为了方便进行区块哈希的扫描,通过区块哈希流以流式结构维护本节点已知的所有区块哈希。区块哈希流由一系列连续的区块哈希构成,每个哈希有一个编号,从1开始连续单调递增,写者可以将哈希写入流的末尾,读者可以从流中的某个位置开始,不断向后读取。因此,节点可以通过区块哈希流模块从0开始读取节点已知的所有区块哈希。其中,获取指定区块的区块哈希可以是获取所有区块的哈希,也可以是获取部分区块的区块哈希。
[0069] 可选的,区块哈希流允许用户从任意位置开始,按顺序向后扫描所有区块哈希,然后计算自己缺失的区块并恢复。用户可以记录下已扫描到的偏移量,即最近一个被扫描过的哈希的编号,以及当前的版本号,当节点重启后,可以从上次的偏移量继续往后扫描,从而避免了重复处理造成的浪费。为了提高性能,可以一次性从流中读出多个区块哈希,统一处理完毕后,再持久化扫描的偏移量,以避免每处理一个区块哈希,就要持久化一次扫描偏移量。具体的,引擎可以从全局节点列表模块中读取当前版本号,并从区块哈希流中读出扫描偏移量offset 和对应的节点版本号version,将version 与当前版本号对比,如果version 更小,说明当前已进入了新的节点版本,区块的备份节点选择可能发生变化,之前的扫描结果已过时,因此需要从0 开始重新扫描;如果version 等于当前版本号,则可以利用之前的扫描偏移量,从偏移量+ 1 的位置继续开始扫描。
[0070] 步骤1022、根据所述全局节点列表,获取所述图式账本系统中当前在线的各节点的节点ID。
[0071] 本发明实施例中,在节点定期向系统链发送心跳交易时,会携带自身的节点ID,节点ID为每个节点均具有的一个全局唯一的标识。每个节点有自己的密钥对,节点ID由节点的公钥经过哈希计算得到。在当前节点同步系统链的最新状态时,引擎根据得到的全局节点列表即可获取图式账本系统中当前在线的各节点对应的节点ID。
[0072] 步骤1023、基于所述区块哈希以及所述节点ID,计算所述图式账本系统中当前在线的各节点与所述指定区块之间的距离。
[0073] 本发明实施例中,引擎以区块哈希和节点ID做为输入计算哈希,得到一个哈希值,定义这个哈希值为图式账本系统中当前在线的各节点与指定区块的距离。基于各节点与指定区块之间的距离,选择需要备份指定区块的备份节点。具体的,可以使用xxHash计算哈希,xxHash为一个非加密性哈希函数,支持输入任意字节串生成32位或64位哈希值。
[0074] 步骤1024、将所述图式账本系统中所述距离最小的K个节点作为备份节点,生成所述指定区块对应的备份节点列表;所述K为不小于2的整数。
[0075] 其中,备份节点列表包括K个节点,K为不小于2的整数。
[0076] 本发明实施例中,假设要选择一个区块对应的K个备份节点,则计算全局节点列表中的每个节点与该区块的距离,最终选择距离最小的K个节点作为备份节点。基于得到的K个备份节点,生成指定区块对应的备份节点列表。也就是说,在本发明实施例中,任何节点在已知全网节点列表,区块哈希,备份数后,均能独立计算出相同的备份节点列表。
[0077] 本发明实施例中,每个节点都可以通过区块哈希和节点ID计算区块对应的备份节点列表,这样,可以避免区块的备份节点选择被单一节点或合谋的节点集合控制,同时对备份节点的选择也具有一定的随机性,实现了去中心化的备份节点选择,同时由于选择备份节点的过程去中心化,并非由单一节点决定备份节点的选择,避免恶意节点将自己控制下的节点做为备份节点,一定程度上保障了系统的安全性。并且,每个节点都是选择距离最小的K个节点作为备份节点,也就是说,备份节点列表中有K个备份节点,该备份节点选择方法使区块的存证副本数目不低于一个预设值,即使有节点退出造成区块备份的丢失,也能创建新的备份进行恢复,个别节点的短期离线不会影响其它节点的备份管理的运行,维护了区块的可用性。
[0078] 可选的,本发明实施例中,步骤1021可以包括以下步骤:
[0079] 步骤S11、在所述图式账本系统中发生节点退出的情况下,基于所述图式账本的区块哈希流,获取由退出节点之前所备份的区块的区块哈希。
[0080] 本发明实施例中,当节点退出时,表明该节点退出之前所负责备份的区块的存证副本减少,为了尽快恢复区块的存证副本数量,要安排其它节点来存储这个退出的节点负责备份的区块,以保证这些区块保持一定数量的存证副本,该过程相当于将退出节点的存储责任迁移到剩余节点上。因此,在节点退出的情况下,引擎可以获取由退出节点之前所备份的区块的区块哈希,并根据该区块哈希和节点ID计算待备份区块的备份节点列表,同时也可以获取图式账本中所有区块的区块哈希,并根据该区块哈希和节点ID计算所有区块的备份节点列表。
[0081] 步骤S12、在所述图式账本系统中发生节点加入的情况下,基于所述图式账本的区块哈希流,获取图式账本中所有区块的区块哈希。
[0082] 本发明实施例中,当节点加入时,表明要从旧节点向新节点迁移一部分区块数据,以平衡各节点的存储负载。因此,在节点加入的情况下,引擎获取图式账本中所有区块的区块哈希,并根据该区块哈希和节点ID重新计算所有区块的备份节点列表。可以理解的是,当一个节点加入后,对于部分的区块,该节点与区块之间的距离大于所有原来的备份节点,所以区块对应的备份节点的选择完全不变;对于剩下的区块,该节点与区块之间的距离小于至少一个原来的备份节点,从而造成原来距离最大的一个备份节点被这个新节点取代。也就是说,新加入的节点会替代旧节点,对该区块进行备份。
[0083] 本发明实施例中,在节点退出时,获取图式账本中由退出节点之前所备份的区块的区块哈希,由于只获取存证副本小于K的区块的区块哈希并进行备份节点选择,在保证网络中区块的副本数量不小于预设值的基础上,进一步提高了备份节点选择的效率。在节点加入时,获取图式账本中所有区块的区块哈希并进行备份节点选择,通过重新对区块进行备份节点选择的计算,可以从旧节点向新节点迁移一部分区块数据,以平衡各节点的存储负载。同时,在总区块数相同的情况下,节点数的增加将使得各个节点分配到的负载减少,且不会有个别节点负载过高成为瓶颈,总的存储空间增加,因此,平衡了各节点的存储负载,一定程度上的提高了图式账本存储空间的可扩展性。
[0084] 可选的,步骤104可以包括以下步骤:
[0085] 步骤201、获取所述节点的节点版本号以及所述指定区块的区块哈希。
[0086] 本发明实施例中,在当前节点不属于指定区块的备份节点列表且本地存储有指定区块的情况下,允许这个节点删除此区块以节省空间。但如果采取立刻删除的策略,会占用一定的IO资源,而且此时该区块在网络中的备份数可能大于预设值,这一定程度上增加了区块的可用性,只是稍微多占了一些存储资源。因此可以采用延迟删除的策略,先对允许删除的区块进行标记,当存储资源紧张时,用户可以手动请求回收资源,此时再将被标记的指定区块删除。具体的,从全局节点列表中获取当前节点版本号以及通过扫描区块哈希流获取指定区块的区块哈希。在一种可能的实现方式中,当图式账本系统中发生节点加入的情况,原来与区块距离最大的一个备份节点被新加入节点取代,此时原来存储该区块的旧节点已经不属于该区块当前对应的备份节点列表,且在节点中仍存储有该区块,此时可以认为旧节点中的该区块为多余的区块,当存储资源紧张时,为了节省节点的存储空间,可以对该指定区块进行删除,为该区块进行标记以便删除该区块。
[0087] 步骤202、将所述指定区块的区块哈希以及所述节点版本号,以键值对的形式存储至预设数据库中,以为本地存储的所述指定区块创建删除标记;所述删除标记用于指示在达到预设删除条件的情况下,对本地存储的所述指定区块进行删除。
[0088] 本发明实施例中,所述节点中包括区块删除模块,可以通过BlockDeleter类对指定区块进行标记。进行标记时,传入的参数为被标记的区块哈希,和做出标记决定时对应的节点版本号。标记功能主要通过一个键值数据库Datastore实现,每个被标记的区块对应一个键值对,键值对包括键名和键值,其中,键名由一个固定前缀PREFIX 与区块哈希拼接而成,键值是序列化后的节点版本号,键值对存入Datastore中,以为节点中存储的该指定区块创建删除标记。
[0089] 本发明实施例中,通过在先对允许删除的区块进行标记,可以在资源紧张需要进行删除区块的操作时,便于找到该允许删除的区块进行删除,一定程度上提高了删除区块的效率。
[0090] 可选的,所述键值对的键名中包括所述指定区块的区块哈希,所述键值对的键值中包括所述节点版本号。
[0091] 相应的,本发明实施例还可以包括以下步骤:
[0092] 步骤301、在接收到区块删除请求的情况下,获取当前的节点版本号。
[0093] 本发明实施例中,当存储资源紧张时,区块删除请求可以通过用户手动请求回收资源,发送区块删除请求,以将已被创建删除标记的区块删除。在接收到区块删除请求的情况下,从全局节点列表中获取当前节点版本号。
[0094] 步骤302、在所述当前的节点版本号与所述键值中的节点版本号相等的情况下,基于所述键名中包括的所述指定区块的区块哈希删除所述指定区块。
[0095] 本发明实施例中,在用户手动请求删除区块时,当前的节点版本相比于标记时的节点版本可能已经发生变动,之前的备份节点列表的计算结果可能失效。因此,当用户手动请求回收资源时,遍历所有以PREFIX为前缀的键值对,如果其键值与当前版本号相等,则说明当前区块仍为可以删除的区块,直接从账本存储DagRepo中基于区块哈希删除对应的区块。
[0096] 步骤303、在所述当前的节点版本号与所述键值中的节点版本号不相等的情况下,计算所述指定区块对应的备份节点列表,若所述节点不属于所述备份节点列表,基于所述键名中包括的所述指定区块的区块哈希删除所述指定区块。
[0097] 本发明实施例中,如果其键值与当前版本号不相等,表明当前节点版本与标记时的节点版本并不相同,由于节点版本不同,区块对应的备份节点列表也可能不同,之前根据备份节点列表得到的允许删除的区块可能已经发生变化。因此,在真正对区块进行删除前,需要再根据当前区块的备份节点列表进行一次计算,判断当前区块是否允许删除。可以理解的是,对备份节点列表的计算与步骤1021‑1024中对备份节点列表的计算过程相似,在此不再赘述。
[0098] 在确定已做删除标记的区块可以进行删除的情况下,则说明当前区块仍为可以删除的区块,直接从账本存储DagRepo中基于区块哈希删除对应的区块。
[0099] 本发明实施例中,通过接收区块删除请求,对区块进行删除,可以在节点存储资源紧张时,删除节点本地多余区块以节省存储空间。同时,通过对指定区块的进一步判断,可以确保不会出现对区块的存证副本进行误删而导致区块的存证副本数量不足的情况发生。
[0100] 可选的,步骤103可以包括以下步骤:
[0101] 步骤401、获取所述指定区块的区块哈希以及所述指定区块对应的候选节点列表。
[0102] 本发明实施例中,引擎可以通过扫描区块哈希流获取区块的区块哈希,指定区块对应的候选节点列表,引擎模块还需要向区块获取模块提供一个候选节点列表,提示区块获取模块可以向哪些节点请求区块,候选节点列表由多个候选节点组成。区块获取模块主要有两个功能,一是可以向其提供区块哈希和一个候选节点列表,让其从网络中获取区块,二是服务其它节点的获取区块请求,回复对应的区块或者告知对方自己没有这个区块。
[0103] 具体的,引擎模块可以调用AddTask方法将获取区块的任务异步发给区块获取模块中的BlockFetcher类,任务中包括要获取的区块的哈希以及候选节点列表。候选节点的选取主要参考指定区块在当前节点版本以及上一节点版本(即最近的相邻两个节点版本)下计算得到的备份节点列表。对于上个版本中的备份节点,如果上个版本持续得足够久,这些节点会计算出自己需要负责备份此区块,并成功进行区块同步,因此,向它们获取区块很有可能成功。而对于当前版本中的备份节点,由于各个备份节点均需要备份此区块,所以可能持有区块备份,因此可以作为发送区块请求的目标节点。
[0104] 候选节点的选择标准可以如图2所示,图2中的两个圆圈表示两个节点集合,候选节点由这两个集合的并集构成。左边的圆圈区域表示上个版本备份节点列表中当前仍在线的节点,即上个版本的备份节点列表与当前版本全局节点列表的交集(如果某个节点已不在网络,那么也没必要向它发送请求),右边的圆圈区域表示当前版本中的备份节点列表。区域2表示两个集合的交集,区域1和区域3分别表示两个集合各自独有的部分。获取区块时,应优先从区域1和区域2选取,因为它们在联盟中存在的时间较长,存有目标区块的可能性更大,向区域1和区域2中的节点请求到区块的概率大,即请求效率也相对高。
[0105] 区块获取模块要获取区块,需要接收到引擎提供的区块的区块哈希以及指定区块对应的候选节点列表,才可以对该区块进行存储备份。
[0106] 步骤402、从所述候选节点列表中选择目标节点,并向所述目标节点发送区块请求消息;所述区块请求消息携带所述指定区块的区块哈希。
[0107] 本发明实施例中,区块获取模块从候选节点列表中选择目标节点,向目标节点发送区块请求消息以请求目标区块中存储备份的指定区块,等待目标节点回复。其中,不同节点之间通过p2p.Service 接口的SetStreamHandler和NewStream方法进行通信。NewStream用于创建通往对端节点的执行指定协议的流,在区块获取模块中,使用的协议为ProtocolFetchBlock。为了处理其它节点发来的请求,每个节点会调用SetStreamHandler(ProtocolFetchBlock, handleIncomingStream),注册该协议的处理函数。当接收到区块获取协议的流,handleIncomingStream方法会被调用,在一个循环中,从流中不断读取请求消息,根据请求中的区块哈希从账本存储层DagRepo中读取区块,并向流中发送相应的回复消息。
[0108] 步骤403、接收所述目标节点返回的所述指定区块并对所述指定区块中所述数字对象的相关信息进行备份。
[0109] 本发明实施例中,在目标节点接收到区块请求消息后,若本地存有指定区块的存证副本,根据区块消息请求携带的区块哈希读取本地存储的区块,并向区块获取模块发送相应的回复消息以及区块获取模块请求的指定区块;若本地未存有指定区块的存证副本,向区块获取模块发送相应的回复消息。
[0110] 区块获取模块在接收到目标节点返回的区块获取模块请求的指定区块后,写去本地账本进行存储,并通知调用者,具体的,区块获取模块收到回复消息后,会根据消息里的区块哈希找到对应的任务taskProgress,并通知worker。如果回复消息内有对应的区块,则任务成功完成,worker 通知BlockFetcher。之后,节点可以根据区块获取模块中存储的指定区块对其中的数字对象的相关信息进行备份。
[0111] 区块获取模块在接收到目标节点告知没有此区块的消息,或者请求超时的情况下,则表明请求失败,选择候选节点列表中的其他节点作为目标节点作为目标节点再次进行获取区块的操作。具体的,如果目标节点的回复中没有区块,或者从TimeoutManager接收到请求超时的信号,那么worker 更新候选节点的状态,并重新选择目标节点,重复以上步骤。
[0112] 若候选节点列表中的所有节点均无法提供指定区块,则发起广播查询,以向全网节点广播查询指定区块的请求。
[0113] 本发明实施例中,通过向目标节点发送请求消息并对指定区块中数字对象的相关信息进行备份,可以提高区块获取的效率,并且可以对区块中数字对象的相关信息进行备份,提高了图式账本的访问性能,提高了数据的可用性。
[0114] 示例性的,图3示出了本发明实施例提供的一种区块获取模块获取区块的步骤流程图,如图3所示,(1)区块获取模块在接收到区块哈希以及候选节点列表后,从候选节点列表中的选择一个候选节点作为目标节点;(2)向目标节点发送请求(区块请求消息);(3)如果接收到目标节点发送的包含区块的回复,则认为本次请求成功,通知调用者(节点);如果未接收到目标节点发送的包含区块的回复,则认为本次请求失败,重新返回步骤(1)重新选择目标节点。如果从候选节点列表中不能选择合适的候选节点作为目标节点的话,发起广播查询,向全网节点广播查询指定区块的请求。
[0115] 可选的,向目标节点发送区块请求消息后,如果一段时间后没收到对应的区块回复,可认为此次请求失败,并及时选择下一个节点发起请求。具体的,可以使用指数加权移动平均(Exponentially Weighted Moving Average,EWMA)来根据观察值预测响应时间。计算EWMA 时,各观察值的加权随时间而指数式递减,近期的观察值对预测值的影响更大。EWMA 公式如下:
[0116]
[0117] 上式中 是时刻t的观察值, 和 是对应时刻的EWMA值,做为设置超时时间的依据,加权的程度由常数α决定,α处于0到1之间,它的值越小,加权随时间下降越快。通过使用指数加权移动平均,更能反映近期变化的趋势,而且需要维护的信息量少,计算简单。
[0118] 对于一个区块获取消息请求,它的响应时间约等于通信延迟(一个RTT)加上对端节点的处理时间。在刚与一个节点建立连接时,还没有进行过请求,为了初步估计超时间隔,可以先进行一次Ping得到延迟,用于设置初始的超时间隔,计算公式为:
[0119] timeout=maxExpectedWantProcessTime+pingLatencyMultiplier×latency[0120] 其中,latency表示Ping的结果,maxExpectedProcessTime表示预期一个节点最多要花多少时间处理请求并发送回复。系数pingLatencyMultiplier是一个正整数,用于适应网络延迟的波动。在进行过请求后,可以直接通过请求的响应时间来设置超时间隔,计算公式为:
[0121] timeout=messageLatency×messageLatencyMultiplier
[0122] 其中,messageLatency表示响应时间的EWMA值,系数messageLatencyMultiplier同样是为了适应响应时间的波动。另外,存在一个最大的超时间隔maxTimeout,表示最大能接受返回消息的时间,上面两种计算方式得到的timeout 如果超过了这个最大值,则只取这个最大值。
[0123] 本发明实施例中,通过设置超时机制,可以在长时间获取不到区块时,及时更换目标节点,降低了获取区块消耗的时间,提高了区块获取的效率。
[0124] 可选的,所述从所述候选节点列表中选择目标节点,可以包括以下步骤:
[0125] 步骤501、在所述候选节点列表的候选节点中包括邻居节点的情况下,若所述邻居节点已接收到的区块请求消息数量小于预设数量阈值,则将所述邻居节点确定为所述目标节点。
[0126] 本发明实施例中,邻居节点指的是与本节点已经建立好特定的libp2p通信流的节点。因此,从候选节点列表中选择目标节点时,可以优先考虑已建立流的节点,从而降低请求时延。
[0127] 但即使存在一个已建立好流的邻居节点,也不能将请求全都发往此节点,一方面,如果将请求都发送到一个节点上,可能造成该节点负载过高,另一方面,如果一个节点接收了多个区块获取消息,则需要顺序处理区块获取消息,但如果存在多个节点在同时处理区块获取请求,那么效率相对会更高。因此,在优先考虑邻居节点的原则下,也要考虑本节点已经向该邻居节点发送了多少进行中的请求,如果数量超过了一个预设数量阈值,则转向选择其它候选节点作为目标节点。其中预设数量阈值可以根据需要自行设置,本发明实施例对此不做限制。
[0128] 步骤502、在所述候选节点列表的候选节点中不包括邻居节点的情况下或在所述邻居节点已接收到的区块请求消息数量大于预设数量阈值的情况下,从所述候选节点列表的候选节点中选择与本节点已建立连接的节点,作为所述目标节点。
[0129] 本发明实施例中,在候选节点列表中不存在邻居节点,或是候选节点列表中的邻居节点收到的区块请求消息大于预设数量阈值的情况下,表明邻居节点无法作为目标节点接收区块请求消息,则可以优先考虑与本节点已建立连接的节点,以减少创建连接的开销。具体的,可以通过Host.Connectness方法检查节点与候选节点列表中的除邻居节点的候选节点的连通性,如果存在一个已与本节点建立连接的候选节点,则调用NewStream方法建立通信流,并建立PeerMessageSender结构,选中该候选节点作为目标节点。
[0130] 可选的,在候选节点列表中不存在可以可请求区块的邻居节点或与本节点已建立连接的节点,则从候选节点列表中的剩余节点中选择任一个候选节点,先与其建立连接,再调用NewStream方法建立通信流,选中该候选节点作为目标节点。
[0131] 本发明实施例中,通过在候选节点列表中优先选择邻居节点或是与本节点已建立连接的节点作为目标节点发送区块请求消息,可以省略在与目标节点发送请求之前建立连接并建立通信流的步骤,从而可以缩短节点与目标节点通信的响应时间,提高了请求效率。
[0132] 可选的,节点在通过区块头全网同步机制得知了新的区块头的情况下,这些区块头可能来自最近新产生的区块,也可能是之前同步遗漏的区块头,它们的区块哈希还未检查过,需要引擎读取区块进行检查。因此,在有新的哈希可读的情况下,则引擎从区块哈希流中读出一批区块哈希,对这批哈希逐个进行检查。对每个区块哈希,计算出在当前节点版本下的备份节点列表,如果本节点在备份节点列表内,即自己需要负责这个区块,且本地没有存储这个区块,则分发对应的区块获取工作给区块获取模块;如果本节点不需要负责这个区块,且本地存储了这个区块,则将删除工作分发给区块删除模块。当这一批次的区块哈希都处理完,持久化扫描偏移量以及当前的版本号,再继续扫描。这样,可以对全网的区块均进行存储备份,以达到备份管理的目标,提高数据的可用性。
[0133] 图4是本发明实施例提供的一种数字对象的存证副本的管理装置,应用于图式账本系统中的任一节点,如图4所示,所述装置包括:
[0134] 第一获取模块601,用于在所述图式账本系统中发生节点变更的情况下,获取所述图式账本系统更新后的全局节点列表,以对所述全局节点列表达成共识。
[0135] 第一确定模块602,用于获取图式账本中指定区块的区块哈希,并基于所述区块哈希和所述全局节点列表,确定所述指定区块对应的备份节点列表。
[0136] 第一备份模块603,用于若所述节点属于所述备份节点列表且本地未存储所述指定区块,获取所述指定区块并对所述指定区块进行备份,以在本地存储所述指定区块中数字对象的存证副本。
[0137] 第一删除模块604,用于若所述节点不属于所述指定区块的备份节点列表且本地存储有所述指定区块,删除所述指定区块,以删除所述指定区块中数字对象的存证副本。
[0138] 可选的,所述第一确定模块602包括:
[0139] 第一获取子模块,用于基于所述图式账本的区块哈希流,获取所述指定区块的区块哈希;所述区块哈希流包括所述节点已知的所有区块哈希。
[0140] 第二获取子模块,用于根据所述全局节点列表,获取所述图式账本系统中当前在线的各节点的节点ID。
[0141] 第一计算模块,用于基于所述区块哈希以及所述节点ID,计算所述图式账本系统中当前在线的各节点与所述指定区块之间的距离。
[0142] 第一生成模块,用于将所述图式账本系统中所述距离最小的K个节点作为备份节点,生成所述指定区块对应的备份节点列表;所述K为不小于2的整数。
[0143] 可选的,所述第一获取子模块包括:
[0144] 第二获取子模块,用于在所述图式账本系统中发生节点退出的情况下,基于所述图式账本的区块哈希流,获取由退出节点之前所备份的区块的区块哈希。
[0145] 第三获取子模块,用于在所述图式账本系统中发生节点加入的情况下,基于所述图式账本的区块哈希流,获取图式账本中所有区块的区块哈希。
[0146] 可选的,所述第一删除模块604包括:
[0147] 第二获取模块,用于获取所述节点的节点版本号以及所述指定区块的区块哈希。
[0148] 第一标记模块,用于将所述指定区块的区块哈希以及所述节点版本号,以键值对的形式存储至预设数据库中,以为本地存储的所述指定区块创建删除标记;所述删除标记用于指示在达到预设删除条件的情况下,对本地存储的所述指定区块进行删除。
[0149] 可选的,所述键值对的键名中包括所述指定区块的区块哈希,所述键值对的键值中包括所述节点版本号;所述装置还包括:
[0150] 第三获取模块,用于在接收到区块删除请求的情况下,获取当前的节点版本号。
[0151] 第二删除模块,用于在所述当前的节点版本号与所述键值中的节点版本号相等的情况下,基于所述键名中包括的所述指定区块的区块哈希删除所述指定区块。
[0152] 第二计算模块,用于在所述当前的节点版本号与所述键值中的节点版本号不相等的情况下,计算所述指定区块对应的备份节点列表,若所述节点不属于所述备份节点列表,基于所述键名中包括的所述指定区块的区块哈希删除所述指定区块。
[0153] 可选的,所述第一备份模块603包括:
[0154] 第四获取模块,用于获取所述指定区块的区块哈希以及所述指定区块对应的候选节点列表。
[0155] 第一请求模块,用于从所述候选节点列表中选择目标节点,并向所述目标节点发送区块请求消息;所述区块请求消息携带所述指定区块的区块哈希;
[0156] 第二备份模块,用于接收所述目标节点返回的所述指定区块并对所述指定区块中所述数字对象的相关信息进行备份。
[0157] 可选的,所述第一请求模块包括:
[0158] 第一确定子模块,用于在所述候选节点列表的候选节点中包括邻居节点的情况下,若所述邻居节点已接收到的区块请求消息数量小于预设数量阈值,则将所述邻居节点确定为所述目标节点。
[0159] 第二确定子模块,用于在所述候选节点列表的候选节点中不包括邻居节点的情况下或在所述邻居节点已接收到的区块请求消息数量大于预设数量阈值的情况下,从所述候选节点列表的候选节点中选择与本节点已建立连接的节点,作为所述目标节点。
[0160] 对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0161] 在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
[0162] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0163] 类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
[0164] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0165] 本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明的排序设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
[0166] 应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
[0167] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0168] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
[0169] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。