一种基于区块链的数据存储以及查询的方法及装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种基于区块链的数据存储以及查询的方法及装置。
背景技术
随着计算机技术的不断发展,区块链技术(又可以称之为分布式账本技术)作为一种新的分布式数据存储技术,由于其具备不可篡改的特性,使得存储至区块链中的数据具备公证、公信力等特点,进而使得区块链技术使用的领域越来越广泛。
具体地,区块链的数据存储原理可以这样理解:用户通过以太坊客户端(即一种支持区块链技术的客户端,又可以称之为区块链客户端)发起一个业务请求。该以太坊客户端可将该业务请求发送至共识网络中,由共识网络中的各区块链节点对这该业务请求进行共识。在共识网络中各区块链节点对该业务请求达成共识后,将该业务请求的数据摘要存储在各区块链节点对应的区块链中。与此同时,以太坊客户端可通过预设的智能合约中规定的数据存储格式,将该业务请求中的业务数据按照规定的数据存储格式存储在自身所对应的存储器中。
然而,为了方便后续查询该存储器中存储的数据,通常按照设定方式建立索引,以便于用户利用索引对该存储器中存储的业务数据执行查询操作。
但是,在实际应用中,一旦查询业务数据所使用的查询条件与建立的索引不同(即查询条件与智能合约所规定的索引不相匹配),导致数据查询的效率较低或者查询失败。
发明内容
本申请实施例提供一种数据存储的方法,用以解决现有技术中对区块链中存储的数据进行查询时存在的查询效率低或者查询失败的问题。
本申请实施例提供了一种数据存储的方法,包括:
区块链节点接收业务请求;
从所述业务请求中解析出各数据类别以及各数据类别对应的业务数据;
将解析出的业务数据按照数据类别与业务数据的对应关系存储在所述区块链节点对应的数据库中。
本申请实施例提供一种数据存储的装置,用以解决现有技术中对区块链中存储的数据进行查询时存在的查询效率低或者查询失败的问题。
本申请实施例提供了一种数据存储的装置,包括:
接收模块,接收业务请求;
数据解析模块,从所述业务请求中解析出各数据类别以及各数据类别对应的业务数据;
存储模块,将解析出的业务数据按照数据类别与业务数据的对应关系存储在所述区块链节点对应的数据库中。
本申请实施例提供一种数据查询的方法,用以解决现有技术中对区块链中存储的数据进行查询时存在的查询效率低或者查询失败的问题。
本申请实施例提供了一种数据存储的方法,包括:
区块链节点接收业务数据查询请求;
根据所述业务数据查询请求,确定待查询的业务数据所对应的数据类别;
从所述区块链节点对应的数据库中,查询与所述数据类别相匹配的业务数据,所述数据库中包含有数据类别与业务数据的对应关系。
本申请实施例提供一种数据存储的装置,用以解决现有技术中对区块链中存储的数据进行查询时存在的查询效率低或者查询失败的问题。
本申请实施例提供了一种数据存储的装置,包括:
请求接收模块,接收业务数据查询请求;
类别确定模块,根据所述业务数据查询请求,确定待查询的业务数据所对应的数据类别;
数据查询模块,从所述装置对应的数据库中,查询与所述数据类别相匹配的业务数据,所述数据库中包含有数据类别与业务数据的对应关系。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:
在本申请实施例中,区块链节点在接收到用户发送的业务请求后,可从该业务请求中解析出各数据类别以及各数据类别对应的业务数据,并将解析出的业务数据按照数据类别与业务数据的对应关系存储在该区块链节点对应的数据库中。通过对业务数据的解析,可以按照数据类别与业务数据之间的对应关系,将业务数据存储至区块链节点对应的数据库中,这样,在用户查询业务数据时,可以基于数据库中的这种对应关系实现查询,避免了现有区块链中基于索引进行查询存在的问题,增加了区块链中数据查询的灵活性,有效提升数据查询效率。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例提供的数据存储过程的示意图;
图2为本申请实施例提供的数据表的示意图;
图3为本申请实施例提供的数据存储的详细过程;
图4为本申请实施例提供的一种数据存储的装置示意图;
图5为本申请实施例提供的一种数据查询的装置示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
图1为本申请实施例提供的数据存储过程的示意图,具体包括以下步骤:
S101:区块链节点接收业务请求。
在实际应用中,用户在进行业务处理的过程中,可向区块链节点发送业务请求。其中,这里提到的区块链节点可以是终端设备或是服务器。例如,当该区块链节点为服务器时,用户可在自己所持有的终端设备中填写业务信息,并在该终端设备上执行指定操作后,由该终端设备将用户填写的业务信息以业务请求的形式发送至该服务器中,而该服务器则可相应的接收该业务请求。
当区块链节点为终端设备时,用户则可在该终端设备上填写业务信息,而当该终端设备点确定用户执行了指定操作时(如用户进行了点击操作等),可根据该业务信息生成相应的业务请求,这就相当于接收到用户发送的业务请求。
当然,上述提到的区块链节点也可以是区块链客户端(是指能够处理基于区块链技术的相关业务的客户端,如以太坊客户端等)。相应的,用户通过区块链共识网络进行业务处理时,可通过终端设备启动该区块链客户端,并在该区块链客户端所展示的界面中填写业务信息,而该区块链客户端监测到用户执行了指定操作时,则可根据用户填写的业务信息生成相应的业务请求,这就相当于接收到用户发送的业务请求。除此之外,区块链节点接收到的业务请求也可以是其他区块链节点通过广播的形式发送过来的。
S102:将所述业务请求按照预设的数据格式进行转化,得到数据序列。
区块链节点接收到上述业务请求后,可将该业务请求按照预设的数据格式进行转化,从而得到相应的数据序列。
其中,在本申请实施例中,预设的数据格式包含但不限于以下几个字段:
标识信息字段,该标识信息字段用于将各业务数据在用户层面进行区分,例如:上述业务请求中携带的用户公钥或用户身份标识号码(Identity,ID)等能够唯一标识用户的信息,便于后续能够以用户为维度进行业务数据的查询;
业务类型字段,该业务类型字段用于对用户的各类业务的业务数据进行区分,从而使得用户后续在进行业务数据查询的过程中,能够进一步的以业务为维度实现业务数据的查询。
除此之外,上述预设的数据格式中还规定了data字段,该data字段用于表示业务请求中的各数据类别与各业务数据的对应关系,例如,假设在一个业务请求中包含有以下data字段:姓名-小明,年龄-18,体重-130斤这些信息,在这些信息中,实际的业务数据是小明、18、130斤,而姓名、年龄、体重则是各业务数据的所述数据类别,换句话说,在本申请实施例中,该数据类别相当于key,而业务数据则相当于是value,而data字段则是key-value的数据映射集合。
基于上述说明的预设的数据格式,区块链节点在接收到用户发送的业务请求后,可根据该预设的数据格式,从该业务请求中解析出该业务请求所包含的标识信息、业务类别、data字段中的各数据类别以及各数据类别所对应的业务数据等数据内容,而后,区块链节点可将解析出的这些数据按照一定的形式进行序列化,从而得到数据序列。
例如,假设区块链节点在接收到用户发送的业务请求后,通过预设的数据格式,从该业务请求中解析出的业务类型字段为:commodity,标识信息字段为:PublicKey,data字段为name:umbrella和cost:46,区块链节点将解析出的这些字段按照一定的形式进行序列化,得到数据序列:
{“PublicKey.schema”:“DEFAULT”,“data”:“name:umbrella,cost:46”}。
其中,将上述业务请求按照预设的数据格式转化为数据序列的目的在于,由于在本申请实施例中,区块链节点需要将业务请求写入到区块链中,以备后续进行业务数据的验证所使用。其中,在实际应用中,区块链节点通常需要将业务请求按照一定的数据格式写入到区块链中,为此,区块链节点在接收到用户发送的业务请求后,需要将该业务请求按照预设的数据格式,转化为能够在后续过程中支持该业务请求写入到区块链中的数据格式,即数据序列,进而以数据序列的形式将该业务请求写入到区块链中,以保证后续能够根据区块链中存储的业务请求,实现对业务数据的有效验证。
需要说明的是,在本申请实施例中,区块链节点还可以从上述业务请求中解析出各数据类别以及各数据类别对应的业务数据,之后,按照预设的数据格式,将解析出的各数据类别以及各数据类别对应的业务数据进行转化,得到上述数据序列。区块链节点也可以在解析出各数据类别以及各数据类别对应的业务数据后,先将解析出的业务数据按照数据类别与业务数据的对应关系存储在该区块链节点对应的数据库(即执行步骤S103)后,而后在按照预设的数据格式,将上述业务请求中包含的各数据类别以及各数据类别对应的业务数据进行转化,得到数据序列。
换句话说,在本申请实施例中,将所述业务请求按照预设的数据格式进行转化,得到数据序列这一步骤并不是一个必要的步骤。
而对于步骤S102而言,将所述业务请求按照预设的数据格式进行转化,得到数据序列中所涉及的具体实施过程并不一定是指将上述业务请求进行解析,得到各数据类别以及各数据类别对应业务数据,而后再按照预设的数据格式,将解析出的各数据类别以及各数据类别对应的业务数据进行转化,得到数据序列,数据序列的生成除了需要从业务请求中解析出的各数据类别以及各数据类别对应的业务数据外,还可通过该业务请求中的其他字段来生成,具体需要哪些字段来生成则取决于实际所要求的能够支持业务请求写入到区块链中的数据格式。
S103:从所述业务请求中解析出各数据类别以及各数据类别对应的业务数据。
在本申请实施例中,区块链节点在接收到上述业务请求后,可先将该业务请求通过广播的方式发送至共识网络中的其他区块链节点,以通过共识网络中的各区块链节点对该业务请求进行共识,一旦确定出该业务请求通过共识网络中各区块链节点的共识后,则各区块链节点可将该业务请求存储到自身对应的区块链中。
不仅如此,在本申请实施例中,区块链节点在接收到上述业务请求后,可对该业务请求进行解析,从该业务请求中解析出该业务请求中所包含的各数据类型以及各数据类型的业务数据,并在后续过程中,将解析出的各业务数据按照各数据类型与业务数据的对应关系,存储在该区块链节点所对应的数据库中。
其中,本申请实施例中所提到的数据库可以是关系型数据库,这种数据存储方式不但能够实现数据的快速查找,而且不受查询条件的影响,换句话说,即使索引字段发送了变化,该数据库中存储的业务数据依然能够适应新的索引字段,而不会由于查询业务数据所使用的索引字段发生改变而对用户的业务数据查询带来影响。
在本申请实施例中,区块链节点在进行业务数据存储时,可将存储的业务数据按照业务类别或是标识信息进行区分,以将不同业务类型或标识信息的业务数据存储在不同的数据库中,这里便于后续用户在业务数据查询的过程中,能够以业务类别或标识信息的维度进行业务数据的精确查询。
基于此,区块链节点除了需要从上述业务请求中解析出各数据类别以及各数据类别所对应的业务数据外,还可解析出该业务请求中所包含的业务数据对应的业务类别以及标识信息,继而按照预设的语句格式,将解析出的各数据类别、各数据类别对应的业务数据、业务类别以及标识信息进行转化,得到数据存储语句,并在后续过程中通过执行该数据存储语句,将解析出的业务数据存储在区块链节点对应的数据库中。
例如,区块链节点通过解析上述业务请求,确定出待存储的业务数据为shoes#12xew,158,待存储的业务数据所对应的业务类型为commodity,待存储的业务数据所对应的标识信息为PublicKey1,业务数据shoes#12xew,158分别对应的数据类别为name和cost,区块链节点可按照预设的语句格式,将解析出的业务类别、标识信息、各数据类别以及各数据类别对应的业务数据进行转换,得到相应的数据存储语句,具体形式如下:
insert into“PublicKey1.schema:commodity”(name,cost)value(‘shoes#12xew’,‘158’)。
区块链节点可在后续过程中通过执行该数据存储语句,将该业务数据存储在区块链节点所对应的数据库中。
其中,区块链节点在解析上述业务请求的过程中,可通过预设的解析程序来实现,该解析程序中规定了所要解析的数据格式以及字段,区块链节点通过运行该解析程序,实现对上述业务请求的解析,而这里提到的解析程序可以通过区块链节点运维人员根据需要进行编译。
需要说明的是,区块链节点除了可将上述业务数据按照业务类别以及标识信息的维度存储在数据库中外,若区块链节点对应单一的数据库,则可在该数据库中设置不同的数据表,每个业务类型以及标识信息都可对应有一个数据表,这样,区块链节点可将上述业务数据按照业务类别以及标识信息的划分存储在该数据库中的各数据表中。当然,数据库中除了以数据表的形式区分该业务类别以及标识信息的业务数据外,还可通过其他的形式来进行区分,在此就不进行详细举例说明了。
需要说明的是,在本申请实施例中,区块链节点可以先执行步骤S103,再执行步骤S102;也可以是先执行步骤S102,而后执行步骤S103;还可以先执行步骤S102,再按照S103的步骤所示的方法从步骤S102得到的数据序列中解析出各数据类别以及各数据类别对应的业务数据;步骤S102与步骤S103在本申请实施例中还可以同时实施,这里不做具体限定。
S104:将解析出的业务数据按照数据类别与业务数据的对应关系存储在所述区块链节点对应的数据库中。
在本申请实施例中,区块链节点从上述业务请求中解析出各数据类别以及各数据类别对应的业务数据后,可将解析出的业务数据存储在该数据库中的各数据类别中。
而对于不同业务类型以及标识信息对应的业务数据来说,区块链节点可根据解析出的业务类别以及标识信息,确定出与该业务类别以及标识信息对应的数据库,而后,区块链节点可将解析出的各业务数据分别存储在该数据库的各数据类别中。
具体的,区块链节点通过上述步骤S103得到数据存储语句后,可对该数据存储语句进行执行,以确定出待存储的业务数据所对应的业务类别以及标识信息,而后,区块链节点可进一步的确定出该区块链节点是否对应有该业务类型以及标识信息所对应的数据库,若是,则区块链节点可进一步的将解析出的业务数据分别存储该数据库的各数据类别中,若否,该区块链节点则需要根据确定出的业务类型、标识信息,构建与该业务类型以及标识信息相对应的数据库,以使区块链节点将该业务数据存储在该数据库中。
当然,在本申请实施例中,若区块链节点对应单一的数据库,则可从该数据库中确定是否包含有与上述业务类别以及标识信息相对应的数据表,若是,则将解析出的各业务数据分别存储在该数据表的各数据类别中,若否,则通过预设的建表方式,构建出该业务类别以及标识信息所对应的数据表,继而将解析出的各业务数据存储在该数据表中。
例如,假设区块链节点通过执行上述数据存储语句,确定出待存储的业务数据所对应的业务类型的字段为commodity,以及用于表示标识信息的用户公钥PublicKey1(由于实际的用户公钥可能较为复杂,所以这里仅用PublicKey1进行简单的表示)。区块链节点可进一步的从自身对应的数据库中确定是否包含有标识信息为PublicKey1以及业务类型为commodity的数据表,并在确定出不存在该数据表时,根据确定出的业务类型commodity、标识信息PublicKey1以及预设的建表方式,在该数据库中构建业务类型commodity以及标识信息P ublicKey1所对应的数据表,具体的执行语句如下:
create table“PublicKey1.schema:commodity”if“PublicKey1.schema:commodity”not exist。
区块链节点通过执行上述数据存储语句从自身对应的数据库中确定(或构建)出上述业务数据所对应的数据表后,可针对该业务数据中包含的每个数据类别,确定该数据类别是否存在于该数据表中,若是,则在该数据表中构建该数据类别所对应的行或列,若否,则可根据该数据类别以及预设的建行/列方式,在该数据表中增添该数据类别所对应的行/列。
继续沿用上来,区块链节点从上述数据序列中确定出的data字段为:“na me:shoes#12xew,cost:158”,其中,在该data字段中,name和cost为数据类别即,相对于key,而name和cost后面对应的业务数据则相当于value。区块链节点可针对该data字段中的每个数据类别,确定上述根据业务类型comm odity以及标识信息PublicKey1确定出的数据表中是否包含有该数据类别,若是,则不在该数据库中构建该数据类别所对应的列,若否,则可根据该数据类别以及预设的建列方式(如数据表是以行为维度构建的,则也可以使用建行方式),在该数据表中增添该数据类别对应的列,具体的执行语句如下:
create colume“name”if“PublicKey1.schema:commodity”.“name”not exist;
create colume“cost”if“PublicKey1.schema:commodity”.“cost”not e xist。
当区块链节点通过执行上述数据存储语句,在上述数据库中确定出待存储的业务数据所对应的数据类别(该数据类别可以是先前就存在于该数据库中,也可以是区块链节点通过执行上述数据存储语句后构建出的)后,可将该业务数据存储在该数据库的数据类别中。当然,若确定出待存储的业务数据所对应的数据类别存在于数据库的某一个数据表(即与上述业务类别以及标识信息相匹配的数据表)中,则区块链节点可将解析出的该业务数据存储在该数据表的数据类别中,如图2所示。
图2为本申请实施例提供的数据表的示意图。
在图2中,name和cost为业务数据的数据类别,PublicKey1为业务数据对应的标识信息,commodity为业务数据对应的业务类别,在每个数据类别下均记录有属于该数据类别的业务数据,这样一来,用户后续在业务数据查询的过程中,区块链节点可接收用户发送的业务数据查询请求,并进一步从该数据库中查找与该业务数据查询请求匹配的业务数据,具体查询过程可以是:区块链节点接收到该业务数据查询请求后,可先确定出该业务数据查询请求中所包含的业务类型以及标识信息,而后,区块链节点可从该数据库中确定出与该业务类型以及标识信息相匹配的数据表,继而根据该数据表中记录的数据类别与业务数据的对应关系,从该数据表中查找该业务数据查询请求中所要查询的业务数据。
例如,假设区块链节点接收到的业务数据查询请求中包含有以下几个字段:PublicKey:PublicKey1、schema:commodity、name:blouse#4212v,区块链节点可从中确定出该业务数据查询请求所对应的业务类型为commodity,标识信息为PublicKey1,继而从自身对应的数据库中查找到与业务类型commodity以及标识信息PublicKey1相匹配的数据表,并根据索引字段blouse#4212v,从该数据表中查找到索引字段blouse#4212v与之对应的业务数据为211。
当然,若是各业务数据仅通过数据类别来进行区分,则区块链节点在接收到用户发送的业务数据查询请求后,可根据该业务数据查询请求,确定出待查询的业务数据所对应的数据类别,进而从该区块链节点所对应的数据库中查询与该数据类别相匹配的业务数据。其中,对于数据类别的确定方式来说,区块链节点在接收到用户发送的业务数据查询请求后,可确定出该业务数据查询请求中包含的索引字段key,并将该索引字段key确定为待查询业务数据所对应的数据类别。
上述数据表不仅支持以key为索引字段查询业务数据的方式,也支持用户自建索引来查询业务数据,例如,在上述示例中,若用户需要以价格范围来进行业务数据的查询时,则可将价格范围输入到区块链节点中,而区块链节点则可根据用户输入的价格范围,从上述数据库的数据表中查询符合该价格范围的业务数据,进而将符合条件的业务数据返回给用户进行查看。
在现有技术中,区块链节点存储业务数据时,需要按照智能合约所规定的数据存储格式将该业务数据写入到区块链中,与此同时,区块链节点通常默认按照这种数据存储格式将该业务数据存储在自身对应的存储器中,所以,在编写智能合约的过程中,通常需要规定区块链节点按照这种规定的数据存储格式将该业务数据存储在自身对应的存储器中,相应的,用户利用该智能合约通过区块链节点进行业务数据查询时,也需要按照固定的查询方式(如需要通过固定形式的索引字段)来从区块链节点对应的存储器中查询相应的业务数据。
然而,在实际应用中,用户在进行业务数据查询的过程中所使用的索引字段并不唯一,这就导致了用户查询业务数据时所使用的索引字段可能并不是智能合约所规定的索引字段,而用户一旦使用了与智能合约不相符的索引字段,则区块链节点无法通过该智能合约在该区块链节点中查询到以往的业务数据。
例如,区块链节点通过智能合约将该业务请求按照上述预设的数据存储格式存储在自身对应的存储器中时,用户后续通常只能以key为索引字段,从该存储器中进行业务数据的查询。而由于区块链节点通常是通过智能合约将各业务数据按照智能合约所规定的设定数据格式逐条进行存储的,即,并不是按照类似关系型数据库中数据表的形式存储各业务数据的,所以,当用户需要以value中记录的内容进行业务数据的查询时,该智能合约将无法有效的支持用户在区块链节点所输入的查询字段,这就导致了用户可能无法通过该智能合约,从该区块链节点对应的存储器中查询到以往的业务数据(因为以往的业务数据仅支持以key为索引字段的查询),或是需要使区块链节点按照用户所输入的查询字段,通过较长时间的遍历,才能从该区块链节点对应的存储器中查找到相应的业务数据,从而给用户带来了不便。
而在本申请实施例中,区块链节点在接收到用户发送的业务请求后,可通过对该业务请求进行解析,确定出该业务请求中所包含的各数据类别以及各数据类别对应的业务数据,并最终将解析出的业务数据按照数据类型与业务数据的对应关系存储在该区块链节点对应的数据库中。这样一来,在用户查询业务数据时,可以基于数据库中的这种对应关系实现查询,避免了现有区块链中基于索引进行查询存在的问题,增加了区块链中数据查询的灵活性,有效提升数据查询效率。
需要说明的是,在本申请实施例中,数据库中也可仅以标识信息来区分各用户之间的业务数据,而不对每个用户进行业务类型上的分类,所以,在上述过程中,区块链节点无论是构建数据库还是构建数据库中的数据表,抑或是从数据库中确定数据表,则均可通过标识信息来实现。当然,上述数据库也可仅通过业务类型对业务数据进行区分,而具体使用哪种方式来对业务数据进行区分,则取决于业务需要而定。
为了能够进一步的说明上述实施例所提供的数据存储的过程,在本申请实施例中,将按照具体的执行过程对本申请所提供的数据存储方法进行进一步说明,如图3所示。
图3为本申请实施例提供的数据存储的详细过程,具体包括以下步骤:
S301:区块链节点接收业务请求。
区块链节点可接收用户通过终端设备发送的业务请求,其中,区块链节点可以是一个终端设备,也可以是一个服务器,抑或是能够处理基于区块链技术的相关业务的客户端。
S302:对所述业务请求进行解析,确定所述业务请求中包含的各数据类别以及各数据类别对应的业务数据。
区块链节点在接收到上述业务请求后,可对该业务请求进行解析,以确定出该业务请求中所包含的各数据类别以及各数据类别所对应的业务数据,其中,区块链节点可以通过预设的解析程序,对该业务请求实施解析,而这里提到的解析程序可以是区块链节点运维人员根据实际需求设置的。
S303:按照预设的数据格式,将解析出的各数据类别以及各数据类别对应的业务数据进行转化,得到数据序列。
区块链节点从上述业务请求解析出该业务请求所包含的各数据类别以及各数据类别所对应的业务数据后,可按照预设的数据格式,将解析出的各数据类别以及各数据类别对应的业务数据进行转化,得到数据序列。其中,得到数据序列的具体过程可以是:区块链节点可将解析出的这些数据按照一定的形式进行序列化,从而得到相应的数据序列。
S304:将所述业务请求发送至共识网络中进行共识,并当确定所述业务请求通过所述共识后,将所述数据序列存储在所述区块链节点的区块链中。
区块链节点在接收到业务请求的同时,可将该业务请求发送至共识网络中,以使共识网络中的其他区块链节点对该业务请求进行共识,当确定该业务请求通过其他区块链节点的共识后,则可将该业务请求按照上述数据序列的形式存储在自身保存的区块链中,以备后续对业务数据进行数据验证所使用。
其中,在本申请实施例中,区块链节点可以每接收到一个业务请求,即将该业务请求发送至共识网络中进行共识,也可以先接收各用户发送的各业务请求,当确定到达共识阶段时,将接收到的各业务请求打包成一个预处理块,并将该预处理块发送至共识网络中进行共识,相应的,区块链节点在接收到各用户发送的每个业务请求后,可对每个业务请求进行逐一解析,以确定出每个业务请求所包含的数据类别以及数据类别对应的业务数据,而后按照预设的数据格式,分别对每个业务请求所包含的数据类别以及数据类别对应的业务数据进行转化,得到各数据序列。
一旦确定出发送至共识网络中的预处理块通过共识网络中其他区块链节点的共识,则可将该预处理块中包含的各业务请求以各业务请求对应的各数据序列的形式存储在自身包含的区块链中。
S305:将解析出的业务数据按照数据类别与业务数据的对应关系存储在所述区块链节点对应的数据库中。
区块链节点在对解析出的各数据类别以及业务数据进行转化的同时,还可将解析出的业务数据按照数据类别与业务数据的对应关系存储在该区块链节点对应的数据库中,以保证用户后续能够在该数据库中按照数据类别与业务数据的对应关系,查找到相应的业务数据。
其中,区块链节点可以并行的执行上述步骤S303以及步骤S305,即,区块链节点在将解析出的各数据类别以及各数据类别对应的业务数据进行转化得到数据序列的过程中,并不影响区块链节点执行将解析出的业务数据按照数据类别与业务数据的对应关系存储在自身对应数据库中这一步骤。
当然,区块链节点也可以在确定上述业务请求通过共识网络中其他区块链节点的共识后,则将解析出的业务数据按照数据类别与业务数据的对应关系存储在自身对应的数据库中。
以上为本申请实施例提供的数据存储以及查询方法,基于同样的思路,本申请实施例还分别提供数据存储以及查询的装置,如图4、5所示。
图4为本申请实施例提供的一种数据存储的装置示意图,具体包括:
接收模块401,接收业务请求;
数据解析模块402,从所述业务请求中解析出各数据类别以及各数据类别对应的业务数据;
存储模块403,将解析出的业务数据按照数据类别与业务数据的对应关系存储在所述区块链节点对应的数据库中。
所述装置还包括:
共识模块404,按照预设的数据格式,将所述业务请求中包含的各数据类别以及各数据类别对应的业务数据进行转化,得到数据序列;利用共识网络对所述业务请求进行共识;在所述业务请求通过所述共识后,将所述数据序列存储到所述装置的区块链中。
所述数据解析模块402,确定所述业务请求对应的业务类型和/或标识信息;
所述存储模块403,按照预设的语句格式,将解析出的各数据类别、各数据类别对应的业务数据、业务类型和/或标识信息进行转换,得到数据存储语句;通过执行所述数据存储语句,将解析出的业务数据存储在所述数据库中。
所述存储模块403,通过执行所述数据存储语句,当确定尚未查找到与所述业务类型和/或标识信息相匹配的数据库时,根据所述业务类型和/或标识信息,构建与所述业务类型和/或所述标识信息对应的数据库;将解析出的业务数据存储在构建的所述数据库中。
所述存储模块403,针对从所述数据序列解析出的每个数据类别,当确定数据库中不包含该数据类别时,在所述数据库中创建该数据类别;将该数据类别对应业务数据存储至所述数据库中。
图5为本申请实施例提供的一种数据查询的装置示意图,具体包括:
请求接收模块501,接收业务数据查询请求;
类别确定模块502,根据所述业务数据查询请求,确定待查询的业务数据所对应的数据类别;
数据查询模块503,从所述装置对应的数据库中,查询与所述数据类别相匹配的业务数据,所述数据库中包含有数据类别与业务数据的对应关系。
在本申请实施例中,区块链节点在接收到用户发送的业务请求后,可从该业务请求中解析出各数据类别以及各数据类别对应的业务数据,并将解析出的业务数据按照数据类别与业务数据的对应关系存储在该区块链节点对应的数据库中。通过对业务数据的解析,可以按照数据类别与业务数据之间的对应关系,将业务数据存储至区块链节点对应的数据库中,这样,在用户查询业务数据时,可以基于数据库中的这种对应关系实现查询,避免了现有区块链中基于索引进行查询存在的问题,增加了区块链中数据查询的灵活性,有效提升数据查询效率。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。