一种基于联盟链存储族谱数据的方法及系统与流程

文档序号:19350646发布日期:2019-12-06 21:21阅读:414来源:国知局
一种基于联盟链存储族谱数据的方法及系统与流程

本发明涉及区块链技术领域,并且具体地涉及一种基于联盟链存储族谱数据的方法及系统。



背景技术:

族谱,又称家谱、宗谱等,是一种以表谱形式记载一个家族的世系繁衍及重要人物事迹的书。族谱通常以表谱的形式存储和呈现。目前,常见的族谱数据的存储方式有三种常见的方案:纸质族谱的存储、中心化的数据库存储以及基于公开区块链的存储。其中,纸质族谱的存储方法是最传统的一种方案。这个方案的缺点在于:纸质族谱制作工作量大,易损坏且易丢失。中心化的数据库存储方案,是利用计算机技术将族谱数据存储到中心化的数据库中。这种存储方法虽然减轻了族谱制作过程的工作量,但是还不能避免被恶意篡改的问题。再者,如果用于存储族谱数据的数据库出现数据丢失等故障,会造成难以弥补的损失。随着区块链技术的出现,开始出现基于公开区块链存储族谱数据的方案。区块链技术天生具有安全可靠和防止篡改的特点,但是对于族谱数据的私密性却无法保证,在区块链上的任意节点都能获取到完整的族谱数据。

现有技术中对族谱数据的存储方法无法同时满足数据存储的高效性和私密性要求,亦无法兼顾数据存储和修改的不同使用者的权限分离,因此无法保证族谱数据的安全可靠并且无法防止篡改。

此外,由于信息网络的发展完善,全国各地的族谱数据网络发展壮大,数据量庞大,且经常出现一个姓氏的家族在全国各地有很多的分支的情形。对于一个姓氏的家族在全国各地的各个分支而言,每个分支都有自己独立的管理委员会。每个分支的族谱修订需要通过各自的管理委员会来完成。这对族谱数据的存储提出了新的要求:即各个分支只能对自己的数据进行管理,而对其他分支的数据仅具有查看权限。



技术实现要素:

有鉴于此,本发明的目的在解决现有技术中所具有的缺点和局限性,提出了一种基于联盟链存储族谱数据的方法及系统。

本发明提供了一种基于联盟链存储族谱数据的方法,所述方法包括:

当本地服务器接收到希望被存储到联盟链中的族谱数据后,对所述族谱数据进行内容校验;

在本地服务器确定所述族谱数据通过内容校验后,将所述族谱数据发送给联盟链中的主节点;

主节点基于所述族谱数据向所述联盟链中的所有非主节点发送预准备消息,所述预准备消息包括请求存储族谱数据的存储请求和族谱数据;

每个非主节点对所述存储请求进行合法性验证,在确定所述存储请求通过合法性验证的情况下,在所述联盟链中广播准备消息;

任意的非主节点在预定时间内接收到预定数量的准备消息时,在所述联盟链中广播提交消息;以及

任意的非主节点的接收到预定数量的提交消息后对所述预准备消息中的族谱数据进行存储。

当与本地服务器连接的客户端需要查询联盟链中的族谱数据时,向本地服务器发送查询请求,以促使本地服务器通过所连接的节点向联盟链发送查询请求。

在本地服务器确定所述族谱数据通过内容校验后,确定所连接的节点是否为联盟链中的主节点,如果是,则所连接的节点基于所述族谱数据向所述联盟链中的所有非主节点发送预准备消息;如果否,则经由所连接的节点将所述族谱数据发送给联盟链中的主节点。

所述族谱数据包括一个或多个数据项,每个数据项包括族谱人员的多个属性,其中属性包括以下内容中的至少一个:序列号、姓名、父亲编号、性别、生日、字号、地址和字排名。

对所述族谱数据进行内容校验包括确定族谱数据的每个数据项中的每个属性的属性值是否符合各自的取值范围。

每个非主节点对所述存储请求进行合法性验证包括:每个非主节点获取所述存储请求中的数据项,确定存储请求中的版本号和序列号是否与之前的存储请求的版本号和序列号相同,如果不相同,则确定所述存储请求通过合法性验证;如果相同,则确定所述存储请求中的数据项与之前的具有相同版本号和序列号的存储请求中的数据项是否相同;如果不相同,则确定所述存储请求通过合法性验证;如果相同,则确定所述存储请求未通过合法性验证。

在任意的非主节点的接收到预定数量的提交消息,对所述预准备消息中的族谱数据进行存储之后,联盟链经由与本地服务器连接的节点向本地服务器发送用于指示族谱数据已经被存储在联盟链中的响应消息。

本地服务器接收到与特定族谱成员相关联的新的数据项时,确定所述特定族谱成员的原始数据项的原始编号和当前版本号,将新的数据项的编号修改为所述原始编号并基于当前版本号确定所述新的数据项的版本号,以生成经过修改的数据项,在所述联盟链中增加所述经过修改的数据项。

联盟链中的每个服务器定期通过所连接的节点从联盟链中获取所有的当前族谱数据,并将所有的当前族谱数据存储在本地数据库中;

当多个服务器中的任意服务器接收到来自用户的查询请求时,所述任意服务器基于查询请求在自身的本地数据库中进行查询,如果在本地数据库中查询到匹配的查询结果,则将查询结果发送给用户;

如果在本地数据库中查询不到匹配的查询结果,则所述任意服务器通过所连接的节点向联盟链发送查询请求,并将联盟链返回的查询结果发送给用户。

本发明还提供一种基于联盟链存储族谱数据的系统,所述系统包括:

本地服务器,接收到希望被存储到联盟链中的族谱数据后,对所述族谱数据进行内容校验,在确定所述族谱数据通过内容校验后,将所述族谱数据发送给联盟链中的主节点;

主节点,基于所述族谱数据向所述联盟链中的所有非主节点发送预准备消息,所述预准备消息包括请求存储族谱数据的存储请求和族谱数据;

多个非主节点,每个非主节点对所述存储请求进行合法性验证,在确定所述存储请求通过合法性验证的情况下,在所述联盟链中广播准备消息;其中,任意的非主节点在预定时间内接收到预定数量的准备消息时,在所述联盟链中广播提交消息;以及任意的非主节点的接收到预定数量的提交消息后对所述预准备消息中的族谱数据进行存储。

当与本地服务器连接的客户端需要查询联盟链中的族谱数据时,向本地服务器发送查询请求,以促使本地服务器通过所连接的节点向联盟链发送查询请求。

在本地服务器确定所述族谱数据通过内容校验后,确定所连接的节点是否为联盟链中的主节点,如果是,则所连接的节点基于所述族谱数据向所述联盟链中的所有非主节点发送预准备消息;如果否,则经由所连接的节点将所述族谱数据发送给联盟链中的主节点。

所述族谱数据包括一个或多个数据项,每个数据项包括族谱人员的多个属性,其中属性包括以下内容中的至少一个:序列号、姓名、父亲编号、性别、生日、字号、地址和字排名。

对所述族谱数据进行内容校验包括确定族谱数据的每个数据项中的每个属性的属性值是否符合各自的取值范围。

每个非主节点对所述存储请求进行合法性验证包括:每个非主节点获取所述存储请求中的数据项,确定存储请求中的版本号和序列号是否与之前的存储请求的版本号和序列号相同,如果不相同,则确定所述存储请求通过合法性验证;如果相同,则确定所述存储请求中的数据项与之前的具有相同版本号和序列号的存储请求中的数据项是否相同;如果不相同,则确定所述存储请求通过合法性验证;如果相同,则确定所述存储请求未通过合法性验证。

在任意的非主节点的接收到预定数量的提交消息,对所述预准备消息中的族谱数据进行存储之后,联盟链经由与本地服务器连接的节点向本地服务器发送用于指示族谱数据已经被存储在联盟链中的响应消息。

本地服务器接收到与特定族谱成员相关联的新的数据项时,确定所述特定族谱成员的原始数据项的原始编号和当前版本号,将新的数据项的编号修改为所述原始编号并基于当前版本号确定所述新的数据项的版本号,以生成经过修改的数据项,在所述联盟链中增加所述经过修改的数据项。

联盟链中的每个服务器定期通过所连接的节点从联盟链中获取所有的当前族谱数据,并将所有的当前族谱数据存储在本地数据库中;

当多个服务器中的任意服务器接收到来自用户的查询请求时,所述任意服务器基于查询请求在自身的本地数据库中进行查询,如果在本地数据库中查询到匹配的查询结果,则将查询结果发送给用户;

如果在本地数据库中查询不到匹配的查询结果,则所述任意服务器通过所连接的节点向联盟链发送查询请求,并将联盟链返回的查询结果发送给用户。

本发明提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序能够被执行以进行:

当本地服务器接收到希望被存储到联盟链中的族谱数据后,对所述族谱数据进行内容校验;

在本地服务器确定所述族谱数据通过内容校验后,将所述族谱数据发送给联盟链中的主节点;

主节点基于所述族谱数据向所述联盟链中的所有非主节点发送预准备消息,所述预准备消息包括请求存储族谱数据的存储请求和族谱数据;

每个非主节点对所述存储请求进行合法性验证,在确定所述存储请求通过合法性验证的情况下,在所述联盟链中广播准备消息;

任意的非主节点在预定时间内接收到预定数量的准备消息时,在所述联盟链中广播提交消息;以及

任意的非主节点的接收到预定数量的提交消息后对所述预准备消息中的族谱数据进行存储。

本发明所提供的基于联盟链存储族谱数据的方法及系统。本申请的技术方案相对于传统的纸质方案,具有数据不易丢失、不可篡改、并且在修改和传播时效率高等优点。相对于中心化数据库的方案,本申请的技术方案具有数据不易丢失,不可篡改等优点。相对于公开的区块链存储的方案,本申请的技术方案具有效率高,私密性更好以及权限分离等优点。

附图说明

通过以下参照附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:

图1是根据本发明实施例的基于联盟链存储家谱数据的系统架构的结构示意图;

图2是根据本发明实施例的使用图1所示的系统存储家谱数据的时序图;以及

图3是根据本发明实施例的基于联盟链存储家谱数据的方法的流程图。

具体实施方式

以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。

以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

本发明提供一种基于联盟链存储族谱数据的方法和系统。与公开的区块链不同,联盟链是指其共识过程受到预选节点控制的区块链。也就是说,一次记录的发生不需要全世界所有的节点中的大部分的认同,只需要联盟中预定成员的大部分节点认同即可。

在本发明中,节点指的是一台或多台接入到联盟链的服务器。联盟链的每个成员是一个姓氏下的不同分支。分支的管理委员会作为该分支的管理员参与到联盟链的管理中。下面还会提到用户的概念,因为用户不参与联盟链的建设,因此不会在这里说明。

本发明的场景很符合族谱的现实含义。例如,赵氏族谱的修订只需所有赵氏分支中的大部分分支认同(例如,投票机制,少数服从多数等)即可,而不需要经过孙氏、李氏等其他姓氏的认同。所有的赵氏分支组成了联盟链,并且每个分支都是联盟链中的成员。

使用联盟链来存储族谱数据,主要是使用联盟链的去中心化性质所带来的数据存储的安全性和可靠性。此外,联盟链相对于公有链来说,其具有更高的隐私性和权限可控性。联盟链中所有的节点都有权限访问或读取联盟链中所有的数据,这对多个分支的姓氏维护同一套族谱的现实需求是天然吻合的。因此可以说,联盟链非常适用于一个姓氏下多个分支维护一个姓氏族谱的技术方案。下面,会简要地介绍本发明如何利用联盟链来存储和管理族谱数据,然后会举例进行详细说明。

每个赵氏的分支管理委员会都负责管理自己在联盟链中的节点,例如,通过这个节点上传族谱数据、更新自己分支下的数据等。每次进行数据增加、删除或修改等操作,节点都会在联盟链上发起一次交易。然后,联盟链中的其他节点会对该次交易进行投票。一旦交易被大多数节点确定有效,则此次交易以及数据增加、删除或修改等操作的结果就会同步到联盟链上的所有分支节点中。这种特点既保证了数据不会被篡改(所有的数据修改都有记录),也保证了同一份数据在所有的分支中都有备份,绝对不会丢失。如果某个节点被破坏,可以使用新的服务器作为新的节点加入联盟链,并将所有的族谱数据自动同步给新的节点。本发明的技术方案使用联盟链用来保证存储的族谱数据时的安全性和可靠性。

在联盟链中,每个分支管理委员会有权限管理自己的数据,并且有权限去查询其他分支的数据。这也很好地解决了族谱数据管理中的权限的问题,使得族谱数据可以方便地互通有无。此外,因为联盟链的机制特点是未经允许的节点无法加入到联盟链中,自然也无法查询以及修改联盟链的数据。这是使用联盟链来存储族谱数据的隐私性、权限可控性等性能的保证。

如果有新的赵氏分支要加入联盟链,只需要新增一个赵氏分支的节点。根据联盟链的技术特性,每个节点都会拥有整个联盟链的所有数据。因此,新加入的分支节点会自动同步整个姓氏的所有族谱数据集。

图1示出的是根据本发明实施例的基于联盟链存储家谱数据的系统架构的结构示意图。如图1所示,在由多个分支组成的联盟链中,每个分支都对应一个节点。在图1中示例为:分支1的节点、分支2的节点、分支3的节点、分支4的节点和分支5的节点。应当了解的是,实际的分支或节点的数量不限于此。多个分支的节点的每一个均加入到联盟链中,并且多个分支的节点的每一个均能够访问、读取、本地存储或拥有整个联盟链中所有分支的节点的所有数据。

每个分支的节点均通过与其连接的服务器(server)对该分支下的成员提供服务。如图1所示,分支1的节点与server1连接、分支2的节点与server2连接、分支3的节点与server3连接、分支4的节点与server4连接并且分支5的节点与server5连接。每个分支的节点通过与其连接的服务器对该分支下的成员所提供的服务包括且不限于录入数据、检索数据等服务。

每个分支的节点和与其连接的server可以位于同一个物理服务器内,或者也可以是位于通过各种类型的网络通信协议连接的不同物理服务器中。

每个分支的节点在整个联盟链中,都具有一个联盟链的账户。联盟链的账户由随机生成的私钥、由私钥生成的公钥和由公钥生成的地址构成。针对于联盟链所有数据的管理,例如数据的增加、删除、修改和检索等都是通过这个账户进行的。

优选地,本发明还提供族谱数据的控制软件。控制软件可以是在任何软件和/或硬件平台中运行的软件。例如,手机端运行的app使用本发明所提供的基于联盟链存储族谱数据的系统。访问族谱控制软件的用户归属于某一分支,并且用户不直接加入到联盟链中,而是由其所属的分支服务器来管理。

这里的用户指的是特定分支下的某个具体的人。比如图1所示的与server1相连的一个用户。可以看出,这个用户仅仅通过族谱控制软件和其所属的服务器进行通信。因此,用户无法直接参与到联盟链中。来自用户的所有的查询、数据修改等操作都需要将操作请求提交给分支服务器。

图2是根据本发明实施例的使用图1所示的系统存储家谱数据的时序图。用户使用基于联盟链存储家谱数据的系统的时序图,如图2所示。具体包括:

用户a(例如是非族谱管理分支机构管理人员的普通用户)通过操作族谱控制软件,例如app,进行录入族谱数据的操作。例如,录入的族谱数据可以是name(姓名):赵德华,fatherid(父亲标识符):17974,gender(性别):2,birthday(生日):1984-09-04。app将用户录入的族谱数据传输至其所属分支的节点所连接的服务器server1。

即,当本地服务器server1接收到希望被存储到联盟链中的族谱数据后,对所述族谱数据进行内容校验。由server1服务器对这条族谱数据进行校验,以校验确定这条族谱数据是否存在问题。在server1确定所述族谱数据通过内容校验时,向与其连接的分支1的节点发出发起一次交易的通知。这条通知用来指示分支1的节点该分支有一条数据需要记录。分支1的节点在接收到服务器发出的通知后,在联盟链内发起一次交易,并等待联盟链内其他节点达成共识。

具体地:联盟链中的共识机制有多种实现方式。通常地,共识机制是类似于拜占庭容错这样的共识算法,这是因为这种算法相比于公有链的工作量证明机制来说效率更高。以使用拜占庭容错来达成共识为例,在拜占庭容错算法中,事先设置一个由联盟链内超过预定数量的节点推选出来的主节点(这个推选过程可以采用现有技术中的任何合理方式,为此本申请在这里不展开叙述)。主节点基于所述族谱数据向所述联盟链中的所有非主节点发送预准备消息,所述预准备消息包括请求存储族谱数据的存储请求和族谱数据。具体地,如果和server1连接的分支1的节点不是主节点,则分支1的节点会将这次交易告知主节点。如果分支1的节点是主节点,则省略上面这一步。之后主节点向其它节点发送pre-prepare消息,其它节点在收到pre-prepare消息后,开始了三阶段的达成共识过程。

pre-prepare(预准备)阶段:联盟链中的节点收到pre-prepare消息后,存在两种选择,一种是接受,一种是拒绝。一种典型的情况是如果节点接受到了一条pre-prepare消息,确定pre-prepare消息里的v和n和在之前收到的pre-prepare消息中的v和n分别是相同的,但是d和m却和之前的pre-prepare消息中d和m不一致,或者pre-prepare消息的请求编号不在合理数值之内,这种情况下,节点就会拒绝pre-prepare消息中的请求。拒绝的逻辑就是主节点不会发送两条具有相同的v和n,但d和m却不同的pre-prepare消息。其中,v代表当前视图的编号。例如,当前主节点为a,则视图编号为1,那么如果当前主节点换成b,则视图编号就变为2。每次切换当前主节点时,视图编号都会增加。n代表请求的编号。本申请利用唯一的编号来标记每个请求。m代表消息的内容。d代表消息的摘要。

如果节点接受到了一条pre-prepare消息,确定pre-prepare消息里的v和n和在之前收到的pre-prepare消息中的v和n分别是不相同的,并且pre-prepare消息的请求编号在合理数值之内,这种情况下,节点就会接受pre-prepare消息中的请求。

prepare(准备)阶段:节点同意pre-prepare消息中的请求后会向联盟链中的其它节点发送prepare消息。这里要注意的是,同一时刻不是只有一个节点在进行这个过程,可能有多个节点也在进行这个过程。因此,任意节点有可能收到其它节点发送的prepare消息。在一定时间范围内,如果任意节点收到超过2f个不同节点的prepare消息,就代表prepare阶段已经完成。其中,f为联盟链集群中能够容忍的作恶节点的最大数量。

commit(提交)阶段:每个确认提交的节点向其它节点广播commit消息。同理,这个过程可能是有多个节点在进行的。因此,任意的节点可能会收到其它节点发过来的commit消息。当任意的节点收到2f+1个commit消息后(包括自己)或当任意的节点收到2f个commit消息后(不包括自己),代表大多数节点已经进入commit阶段,并且这一阶段已经达成共识。于是,确定进入commit阶段的节点就会执行族谱数据的存储请求,存储用户录入的族谱数据。由联盟链向初始发出通知的分支1的节点返回“已经达成共识,数据已存储”的通知,并由分支1的节点向与其连接的服务器server1返回“数据已存储”的通知,再由服务器server1返回给app“请求已完成”的通知,并由app向录入数据的普通用户返回“请求已完成”的通知。以上的过程是一条数据从用户到存储并反馈存储成功的全过程。

族谱数据中的每条数据都有随机号(也可以被成为序列号)和版本号。其中随机号或序列号是随机生成的标识或序号,并且通过设置随机生成算法来保证随机号或序列号不重复。版本号用于记录数据的不同版本,以便于历史记录的查询。

用户通过app录入族谱数据时,每个族谱数据还包括代表所录入的族谱中人物的基本信息的数据,具体可包括:父亲编号、姓名、字号、生日、地址、字排名等族谱中用于记录的必要数据。基于父亲编号确定族谱中的所有的人物关系。

如果要修改族谱系统中某个人物的族谱数据,需要先得到该族谱数据(例如,数据项)的编号。然后向联盟链中增加一条同样编号,但是版本号在之前的族谱数据的基础上增加1的族谱数据。在进行族谱数据的检索时,返回的检索结果都是以最新的版本号为准。

基于以上方案,通过数据记录的方式,保证数据修改存在痕迹,从而实现不可随意篡改的结果。通过联盟链的设置,在兼顾可靠性、安全性的同时,保证权限分离。

联盟链技术可以看被做是一个分布式的数据库,具有极高的可靠性和安全性。但是联盟链的检索却没有传统的关系型数据库效率高。为了提高用户体验,本发明可以使用关系型数据库作为缓存,定时对联盟链中的数据进行下载和整理。以父亲编号为枢纽构建出整个族谱。然后对族谱数据进行存储。用户查询时,可以通过缓存的关系数据库进行检索,以提高检索效率。以server1为例,这个过程具体可以描述成以下步骤:

多个服务器中的每个服务器,例如server1中存在一个定时任务,每隔预定时间(例如,1个小时、2个小时、1天等)通过与其相连的分支1的节点从联盟链中更新所有的族谱数据。从联盟链中下载族谱数据,其实就是遍历所有的联盟链的区块中的族谱数据,并将其存储在server1中。所有的族谱数据是由完整的家谱中所记录的所有人物的数据组成。每个人物的族谱数据(或族谱数据的数据项)类似于:id:18797,name(姓名):赵德华,fatherid(父亲编号):9876,gender(性别):1,birthday(生日):1987-09-08,address(地址):上海市闵行区浦江镇。本地下载的族谱数据的所有数据项存储在server1上的关系数据库c中,比如mysql。

用户a使用app发起一次查询。例如,用户a查询姓名为赵德华的人。server1收到查询请求后,先从关系数据库c中查找是否有名为赵德华的人。如果有,则直接返回给用户。

如果没有在关系数据库c中查询到,则由server1向分支1的节点发起查询请求。分支1的节点在联盟链的族谱数据中查询。如果查询到,则返回该人物的所有信息。如果没有,则返回空。最后,由server1告知用户此次的查询结果。

在本发明的方案中,数据的安全可靠和不可篡改由联盟链保证,数据的管理权限由节点保证,并且数据的检索效率由系统中额外的缓存层进行保证。

图3是根据本发明实施例的基于联盟链存储家谱数据的方法300的流程图。方法300从步骤301处开始。

在步骤301,当本地服务器接收到希望被存储到联盟链中的族谱数据后,对所述族谱数据进行内容校验。此外,当与本地服务器连接的客户端需要查询联盟链中的族谱数据时,向本地服务器发送查询请求,以促使本地服务器通过所连接的节点向联盟链发送查询请求。

在本地服务器确定所述族谱数据通过内容校验后,确定所连接的节点是否为联盟链中的主节点,如果是,则所连接的节点基于所述族谱数据向所述联盟链中的所有非主节点发送预准备消息;如果否,则经由所连接的节点将所述族谱数据发送给联盟链中的主节点。

族谱数据包括一个或多个数据项,每个数据项包括族谱人员的多个属性,其中属性包括以下内容中的至少一个:序列号、姓名、父亲编号、性别、生日、字号、地址和字排名。

在步骤302,在本地服务器确定所述族谱数据通过内容校验后,将所述族谱数据发送给联盟链中的主节点。对所述族谱数据进行内容校验包括确定族谱数据的每个数据项中的每个属性的属性值是否符合各自的取值范围。例如,父亲标识符是否在现有的族谱数据中没有匹配项。生日是否晚于当前日期。

在步骤303,主节点基于所述族谱数据向所述联盟链中的所有非主节点发送预准备消息,所述预准备消息包括请求存储族谱数据的存储请求和族谱数据。联盟链中的节点收到预准备消息后,存在两种选择,一种是接受,一种是拒绝。一种典型的情况是如果节点接受到了一条预准备消息,确定预准备消息里的序列号和版本号和在之前收到的预准备消息中的序列号和版本号分别是相同的,但是其它信息却不一致,或者预准备消息的请求编号不在合理数值之内,这种情况下,节点就会拒绝预准备消息中的请求。

在步骤304,每个非主节点对所述存储请求进行合法性验证,在确定所述存储请求通过合法性验证的情况下,在所述联盟链中广播准备消息。每个非主节点对所述存储请求进行合法性验证包括:每个非主节点获取所述存储请求中的数据项,确定存储请求中的版本号和序列号是否与之前的存储请求的版本号和序列号相同,如果不相同,则确定所述存储请求通过合法性验证;如果相同,则确定所述存储请求中的数据项与之前的具有相同版本号和序列号的存储请求中的数据项是否相同;如果不相同,则确定所述存储请求通过合法性验证;如果相同,则确定所述存储请求未通过合法性验证。

在步骤305,任意的非主节点在预定时间内接收到预定数量的准备消息时,在所述联盟链中广播提交消息。当任意的节点收到预定数量的提交消息后,代表大多数节点已经进入提交阶段,并且这一阶段已经达成共识。于是,确定进入提交阶段的节点就会执行族谱数据的存储请求,存储用户录入的族谱数据。

在步骤306,任意的非主节点的接收到预定数量的提交消息后对所述预准备消息中的族谱数据进行存储。在任意的非主节点的接收到预定数量的提交消息,对所述预准备消息中的族谱数据进行存储之后,联盟链经由与本地服务器连接的节点向本地服务器发送用于指示族谱数据已经被存储在联盟链中的响应消息。

本地服务器接收到与特定族谱成员相关联的新的数据项时,确定所述特定族谱成员的原始数据项的原始编号和当前版本号,将新的数据项的编号修改为所述原始编号并基于当前版本号确定所述新的数据项的版本号,以生成经过修改的数据项,在所述联盟链中增加所述经过修改的数据项。

联盟链中的每个服务器定期通过所连接的节点从联盟链中获取所有的当前族谱数据,并将所有的当前族谱数据存储在本地数据库中;当多个服务器中的任意服务器接收到来自用户的查询请求时,所述任意服务器基于查询请求在自身的本地数据库中进行查询,如果在本地数据库中查询到匹配的查询结果,则将查询结果发送给用户;如果在本地数据库中查询不到匹配的查询结果,则所述任意服务器通过所连接的节点向联盟链发送查询请求,并将联盟链返回的查询结果发送给用户。

根据本发明的另一方面,提供一种基于联盟链存储族谱数据的系统,所述系统包括:本地服务器、主节点和多个非主节点。

本地服务器,接收到希望被存储到联盟链中的族谱数据后,对所述族谱数据进行内容校验,在确定所述族谱数据通过内容校验后,将所述族谱数据发送给联盟链中的主节点。当与本地服务器连接的客户端需要查询联盟链中的族谱数据时,向本地服务器发送查询请求,以促使本地服务器通过所连接的节点向联盟链发送查询请求。在本地服务器确定所述族谱数据通过内容校验后,确定所连接的节点是否为联盟链中的主节点,如果是,则所连接的节点基于所述族谱数据向所述联盟链中的所有非主节点发送预准备消息;如果否,则经由所连接的节点将所述族谱数据发送给联盟链中的主节点。所述族谱数据包括一个或多个数据项,每个数据项包括族谱人员的多个属性,其中属性包括以下内容中的至少一个:序列号、姓名、父亲编号、性别、生日、字号、地址和字排名。对所述族谱数据进行内容校验包括确定族谱数据的每个数据项中的每个属性的属性值是否符合各自的取值范围。本地服务器接收到与特定族谱成员相关联的新的数据项时,确定所述特定族谱成员的原始数据项的原始编号和当前版本号,将新的数据项的编号修改为所述原始编号并基于当前版本号确定所述新的数据项的版本号,以生成经过修改的数据项,在所述联盟链中增加所述经过修改的数据项。

主节点,基于所述族谱数据向所述联盟链中的所有非主节点发送预准备消息,所述预准备消息包括请求存储族谱数据的存储请求和族谱数据。

多个非主节点,每个非主节点对所述存储请求进行合法性验证,在确定所述存储请求通过合法性验证的情况下,在所述联盟链中广播准备消息;其中,任意的非主节点在预定时间内接收到预定数量的准备消息时,在所述联盟链中广播提交消息;以及任意的非主节点的接收到预定数量的提交消息后对所述预准备消息中的族谱数据进行存储。每个非主节点对所述存储请求进行合法性验证包括:每个非主节点获取所述存储请求中的数据项,确定存储请求中的版本号和序列号是否与之前的存储请求的版本号和序列号相同,如果不相同,则确定所述存储请求通过合法性验证;如果相同,则确定所述存储请求中的数据项与之前的具有相同版本号和序列号的存储请求中的数据项是否相同;如果不相同,则确定所述存储请求通过合法性验证;如果相同,则确定所述存储请求未通过合法性验证。

在任意的非主节点的接收到预定数量的提交消息,对所述预准备消息中的族谱数据进行存储之后,联盟链经由与本地服务器连接的节点向本地服务器发送用于指示族谱数据已经被存储在联盟链中的响应消息。

联盟链中的每个服务器定期通过所连接的节点从联盟链中获取所有的当前族谱数据,并将所有的当前族谱数据存储在本地数据库中;

当多个服务器中的任意服务器接收到来自用户的查询请求时,所述任意服务器基于查询请求在自身的本地数据库中进行查询,如果在本地数据库中查询到匹配的查询结果,则将查询结果发送给用户;

如果在本地数据库中查询不到匹配的查询结果,则所述任意服务器通过所连接的节点向联盟链发送查询请求,并将联盟链返回的查询结果发送给用户。

以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1