具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
本发明所涉及的术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。在以下各实施例的描述中,“多个”的含义是两个以上,除非另有明确具体的限定。
本发明具体的应用于区块链系统,区块链系统中数据以采用Key-Value存储模型,以键值对的形式进行存储数据。本实施例中,采用关系型数据库存储数据,从数据库操作的API接口介入,将区块链系统的数据存储与关系型数据库联合在一起,当区块链系统中需要存储一条Key-Value数据时,将Key-Value数据进行整合并存储到关系型数据库中,且支持对关系型数据库中区块链数据的查询。
本实施例提供的区块链数据处理的方法,一种应用场景为:在区块链系统需要存储Key-Value数据时,解析Key-Value数据中的Value,确定Value的数据类别;根据数据类别信息表,确定与Value的数据类别对应的目标表;根据数据类别信息表,将Key-Value数据写入目标表。
另一种应用场景为:在区块链系统需要查询数据时,若采用指定Key,数据类别和业务字段进行数据查询时,获取待查询数据的Key,数据类别和业务字段;根据待查询数据的数据类别,查询数据类别信息表,确定与待查询数据的数据类别对应的第二目标表;根据待查询数据的Key数据和业务字段,查询第二目标表,得到查询结果。
另一种应用场景为:在区块链系统需要查询数据时,若采用输入查询语句(例如SQL语句等)进行数据查询时,解析查询语句,确定待查询数据的数据类别和业务字段;根据待查询数据的数据类别的存储信息,将查询语句中的数据类别替换为对应的表名称,将查询语句中的业务字段替换为对应的表字段,生成新的查询语句;执行新的查询语句,得到查询结果。
本实施例中的方法应用于对区块链系统中进行区块链数据处理的计算设备。
下面以具体地实施例对本发明的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明的实施例进行描述。
实施例一
图1为本发明实施例一提供的区块链数据处理的方法流程图。本发明实施例针对现有的区块链不支持对于部分特定条件的查询或者复杂逻辑的查询,查询效率低的问题,提供了区块链数据处理的方法。
如图1所示,该方法具体步骤如下:
步骤S101、在需要存储Key-Value数据时,解析Key-Value数据中的Value,确定Value的数据类别。
通常,区块链系统中可以采用如下两种方式将区块链数据写入Key-Value数据库中,一种方式为:Put(Key,Value),给定了Key和Value;另一种方式为:Write(Value),给定了Value,但是未定义Key。
本实施例中,为了能够将Key-Value结构的区块链数据存储到关系型数据库,预先定义区块链数据的Value的格式,要求区块链系统中生成的Key-Value数据中的Value包括数据类别、数据格式、字段数量和Value值。
其中,数据类别表示Value的业务分类,也就是Value对应交易信息的业务分类,可映射为关系型数据库的表名。
数据格式表示该数据类别的Value的样式,例如可以是JSON格式、或按照分隔符分类等。另外,同一数据类别对应有同一数据格式,对于同一数据类别而言,不允许其存储不同的数据格式,以降低整个系统的复杂度,保证系统稳定性。
字段数量表示该数据类别的字段数量,同一数据类别对应有同一字段数量,对于同一数据类别而言,不允许其设置多种字段数量。另外,数据类别的字段数量可以设置为不少于当前实际Value的字段数量。
本实施例中,在区块链系统中需要通过任意一种方式存储Key-Value数据时,根据Value格式解析Key-Value数据中的Value,可以确定Value的数据类别、数据格式、字段数量和Value值。
步骤S102、根据数据类别信息表,确定与Value的数据类别对应的目标表,其中数据类别信息表用于存储所有数据类别的存储信息,数据类别的存储信息包括:该数据类别对应的表,该数据类别的Value的业务字段与对应表中表字段的映射关系,以及该数据类别的Value的数据格式。
本实施例中,预先在关系型数据库中维护数据类别信息表,该数据类别信息表用于存储所有数据类别的存储信息。数据类别的存储信息包括:该数据类别对应的表,该数据类别的Value的业务字段与对应表中表字段的映射关系,以及该数据类别的Value的数据格式。其中某一数据类别对应的表可以有一个或者多个。
示例性的,数据类别信息表的表结构可以如下表1所示:
表1
ID |
数据类别 |
表名 |
表字段名 |
数据格式 |
业务字段标识 |
其中,业务字段标识可以为业务字段名或者业务字段顺序号等等。
例如,假设有两种数据类别:Person和Student。数据类别信息表可以包括如下表2所示的数据:
表2
ID |
数据类别 |
表名 |
表字段名 |
数据格式 |
业务字段标识 |
1 |
Person |
td_000 |
column1 |
JSON |
name |
2 |
Person |
td_000 |
column2 |
JSON |
age |
3 |
Student |
td_001 |
column1 |
SPLIT(,) |
0 |
4 |
Student |
td_001 |
column2 |
SPLIT(,) |
1 |
5 |
Student |
td_001 |
column3 |
SPLIT(,) |
2 |
如表2所示的数据,根据ID为1和2的两行数据可知,Person业务数据被存储在表td_000中,存储的数据格式为JSON,其JSON格式中的name属性为第一个业务字段(业务字段名为“name”),对应表字段:column1;age属性为第二个业务字段(业务字段名为“age”),对应表字段:column2。
根据ID为3-5的三行数据可知,Student业务数据被存储在表td_001中,存储的数据格式为“SPLIT(,)”,表示按照逗号分隔符分类。其第一段为第一个业务字段(顺序为0),对应表字段:column1;第二段为第二个业务字段(顺序为1)对应表字段:column2;以此类推。
另外,表字段column0可以被保留用于存放Key。
在确定Value的数据类别之后,该步骤中,根据Value的数据类别查询数据类别信息表,以确定与Value的数据类别对应的目标表。
步骤S103、根据数据类别信息表,将Key-Value数据写入目标表。
在确定将Key-Value数据写入的目标表之后,从数据类别信息表中获取该Value的数据类别的存储信息,根据该Value的数据类别的存储信息中该数据类别的Value的业务字段与对应表中表字段的映射关系,以及该数据类别的Value的数据格式,将Key值以及Value中各业务字段的值写入目标表的对应表字段中。
示例性的,数据类别对应的表中可以采用保留的指定字段来存储Key值。
本发明实施例通过预先在关系型数据库中存储数据类别信息表,数据类别信息表用于存储所有数据类别的存储信息,数据类别的存储信息包括:该数据类别对应的表,该数据类别的Value的业务字段与对应表中表字段的映射关系,以及该数据类别的Value的数据格式,从而实现关系型数据库中表与区块链中的业务数据的映射;在需要存储Key-Value数据时,解析Key-Value数据中的Value,确定Value的数据类别;根据数据类别信息表,确定与Value的数据类别对应的目标表;根据数据类别信息表,将Key-Value数据写入目标表,能够实现基于关系型数据库存储区块链数据,支持应用层业务系统基于关系型数据库的数据查询,提高了查询效率。
实施例二
图2为本发明实施例二提供的区块链数据处理的方法流程图。在上述实施例一的基础上,本实施例中,Value包括数据类别、数据格式、字段数量和Value值。根据数据类别信息表,确定与Value的数据类别对应的目标表,包括:判断数据类别信息表中是否已存在Value的数据类别;若数据类别信息表中已存在Value的数据类别,则从数据类别信息表中获取Value的数据类别的存储信息;根据Value的数据类别的存储信息,判断Value中的数据格式和字段数量与存储信息中的数据格式和字段数量是否一致;若一致,则从数据类别信息表中获取与Value的数据类别对应的目标表。若数据类别信息表中不存在Value的数据类别,或者Value的数据格式和字段数量与存储信息中的数据格式和字段数量不一致,则获取与存储信息中的数据格式和字段数量匹配的新表,作为目标表;根据新表更新数据类别信息表中Value的数据类别的存储信息。
如图2所示,该方法具体步骤如下:
步骤S201、在需要存储Key-Value数据时,解析Key-Value数据中的Value,确定Value的数据类别。
该步骤与上述步骤S101一致,本实施例此处不再赘述。
本实施例中,在确定Value的数据类别之后,通过步骤S202-S208,作为根据数据类别信息表确定与Value的数据类别对应的目标表的一种实施方式。
可选的,在解析Key-Value数据中的Value时,可以先判断Key-Value数据中的Value是否满足Value格式要求。如果Value不满足Value格式要求,则无法将Key-Value数据存储到关系型数据库中,可以进行数据写入异常提示。如果Value满足Value格式要求,则继续执行后续步骤。
步骤S202、判断数据类别信息表中是否已存在Value的数据类别。
其中,数据类别信息表用于存储所有数据类别的存储信息,数据类别的存储信息包括:该数据类别对应的表,该数据类别的Value的业务字段与对应表中表字段的映射关系,以及该数据类别的Value的数据格式。
另外,关于数据类别信息表的详细描述详见上述步骤S102,本实施例此处不再赘述。
本实施例中,首先判断数据类别信息表中是否已存在Value的数据类别。若数据类别信息表中已存在Value的数据类别,则执行步骤S203,直接从数据类别信息表中获取Value的数据类别的存储信息。
若数据类别信息表中不存在Value的数据类别,则执行步骤S207-S208,获取一个新表作为目标表,并根据新表更新数据类别信息表中Value的数据类别的存储信息。
步骤S203、若数据类别信息表中已存在Value的数据类别,则从数据类别信息表中获取Value的数据类别的存储信息。
步骤S204、根据Value的数据类别的存储信息,判断Value中的数据格式和字段数量与存储信息中的数据格式和字段数量是否一致。
本实施例中,在从数据类别信息表中获取到Value的数据类别的存储信息之后,根据存储信息中该数据类别的Value的业务字段与对应表中表字段的映射关系,以及该数据类别的Value的数据格式,判断Value中的数据格式与存储信息中的数据格式是否一致,以及Value中的字段数量与存储信息中的字段数量是否一致。
若Value中的数据格式和字段数量与存储信息中的数据格式和字段数量均一致,则执行步骤S205,从数据类别信息表中获取与Value的数据类别对应的目标表。
若Value的数据格式与存储信息中的数据格式不一致,或者若Value的字段数量与存储信息中的字段数量不一致,则执行步骤S207-S208,获取一个新表作为目标表,并根据新表更新数据类别信息表中Value的数据类别的存储信息。
步骤S205、若Value中的数据格式和字段数量与存储信息中的数据格式和字段数量均一致,则从数据类别信息表中获取与Value的数据类别对应的目标表。
步骤S206、判断目标表的当前状态是否为可写状态。
本实施例中,增加对各个数据类别对应的表的状态,用于描述表是否可写。其中,目标表的状态包括可写状态和不可写状态。
示例性的,可以在关系型数据库中维护状态信息表,用于存储各个表的状态。例如,状态信息表至少包括如下字段:表名和表状态;状态信息表还可以包括字段数量。
本实施例中,初始设置各数据类别对应的表为可写状态,后续实时地根据表中存储数据量的大小更新表的状态,可以防止单个表过大,提高查询效率。
示例性的,计算设备检测各个表的行数是否达到预设阈值;若某一表的行数达到预设阈值,则将该表的状态更新为不可写状态。其中,预设阈值可以由技术人员根据实际应用场景和需要进行设定,本实施例此处不做具体限定。
可选的,计算设备可以通过单独的线程按照预设策略更新各个表的状态,例如,每隔一段时间更新一次,定时更新,实时地更新等等,本实施例对于更新各个表的状态的预设策略不做具体限定。
另外,因为对各个表的数据量的要求并不是非常严格,因此不必增加锁等复杂逻辑处理。
从数据类别信息表中获取与Value的数据类别对应的目标表之后,该步骤中,确定目标表的当前状态,若目标表为不可写状态,则执行步骤S207-S208,获取一个新表作为目标表,并根据新表更新数据类别信息表中Value的数据类别的存储信息。
若目标表为可写状态,则执行步骤S209,根据数据类别信息表将Key-Value数据写入目标表。
步骤S207、获取与Value的数据类别的字段数量匹配的新表,作为目标表。
作为一种可能的实施方式,可以直接创建一个与Value的数据类别的字段数量匹配的新表,作为目标表。
作为另一种可能的实施方式,可以预先创建好具有指定字段数量的空表,其中指定字段数量可以是使用频率较高的一个或者多个字段数量。该步骤中,根据Value的数据类别的字段数量,直接获取一个与Value的数据类别的字段数量一致的预先建好的空表,作为目标表。这样,可以节省写入数据过程中的建表操作,可以提高数据写入效率。
示例性的,计算设备可以维护闲置表信息表,该闲置表信息表用于存储已创建空表的信息,至少包括表名及其对应字段数量,还可以包括表状态。根据Value的数据类别的字段数量,查询闲置表信息表,确定是否存在与Value的数据类别的字段数量一致的预先建好的空表;如果存在,则直接获取与Value的数据类别的字段数量一致的预先建好的空表,如果不存在,则根据Value的数据类别的字段数量,新建一个与存储信息中的字段数量一致的表,作为目标表。
另外,如果不存在,则根据Value的数据类别的字段数量,新建一个与Value的数据类别的字段数量一致的表之后,将该表的状态设置为可写状态,并将该表的状态信息写入到状态信息表中。
可选的,本实施例中,还可以将闲置表信息表与状态信息表合并为一个表存储,本实施例此处不做具体限定。
步骤S208、根据新表更新数据类别信息表中Value的数据类别的存储信息。
在获取一个与Value的数据类别的字段数量匹配的新表作为目标表之后,根据该新表的信息,新表的表字段与Value的业务字段的映射关系,以及Value的数据类别对应的数据格式等,生成该Value的数据类别的一条存储信息,并写入到数据类别信息表中,以根据新表更新数据类别信息表中Value的数据类别的存储信息。
步骤S209、根据数据类别信息表,将Key-Value数据写入目标表。
本实施例中,数据类别对应的表中可以采用保留的指定字段来存储Key值。
在确定与Value的数据类别对应的目标表之后,根据数据类别信息表中该Value的数据类别对应的Value的数据格式,解析该Value的各个业务字段的值,将Value的业务字段的值写入目标表中对应表字段,并将Key-Value数据的Key写入目标表的指定字段。
另外,若待写入数据不包括Key,则只需将Value的业务字段的值写入目标表中对应表字段即可。
本发明实施例通过预先在关系型数据库中存储数据类别信息表,数据类别信息表用于存储所有数据类别的存储信息,数据类别的存储信息包括:该数据类别对应的表,该数据类别的Value的业务字段与对应表中表字段的映射关系,以及该数据类别的Value的数据格式,从而实现关系型数据库中表与区块链中的业务数据的映射,使得关系型数据库中表的数量控制在一定范围内,总体上使得数据库的性能维持稳定,防止因表数据过多导致数据库性能下降;在需要存储Key-Value数据时,解析Key-Value数据中的Value,确定Value的数据类别;根据数据类别信息表,确定与Value的数据类别对应的目标表;根据数据类别信息表,将Key-Value数据写入目标表,能够实现基于关系型数据库存储区块链数据,支持应用层业务系统基于关系型数据库的数据查询,提高了查询效率;进一步的,通过根据表中数据量的大小设置表是否可写的状态,若某一表的行数达到预设阈值,则将该表的状态更新为不可写状态;若目标表为不可写状态,则获取与存储信息中的字段数量匹配的新表作为目标表,可以防止单个表过大,进一步提高了查询效率。
实施例三
图3为本发明实施例三提供的区块链数据处理的方法流程图。在上述实施例一或实施例二的基础上,本实施例中,对于已知待查询数据Key,数据类别和业务字段的情况下,进行区块链数据查询的流程进行示例性的说明。如图3所示,该方法具体步骤如下:
步骤S301、响应于区块链系统的数据查询请求,获取待查询数据的Key,数据类别和业务字段。
本实施例支持如下方式的数据查询:第一种是通过指定Key和数据类别查询所有字段,可以表示为QueryAll(Key,DataType),其中DataType表示数据类别;第二种是通过指定Key,数据类别和业务字段查询,可以表示为QueryFields(Key,DataType,fields[]),其中,DataType表示数据类别,fields[]表示指定的一个或者多个业务字段。
其中,第二种查询方式可以认为是对第一种查询方式的有一次封装,还可以表示为QueryFields(Key,DataType,*),其中DataType表示数据类别,“*”表示查询所有业务字段。
本实施例中,计算设备在接收到数据查询请求后,提取数据查询请求中待查询数据的Key,数据类别和业务字段。其中,数据查询请求可能不包括待查询数据的业务字段,此时则查询所有业务字段的值。
步骤S302、根据待查询数据的数据类别,查询数据类别信息表,确定与待查询数据的数据类别对应的表。
根据数据查询请求指定的数据类别,查询数据类别信息表,确定指定的数据类别对应的表。
由于各个表存储的数据量有限制,一个数据类别对应的表可以有一个或者多个。
步骤S303、根据待查询数据的Key和业务字段,查询与待查询数据的数据类别对应的表,得到查询结果。
该步骤中,在数据查询请求指定的数据类别对应的表之后,根据数据查询请求指定的数据类别的存储信息中该数据类别的Value的业务字段与对应表中表字段的映射关系,获取待查询数据的业务字段对应的表字段;然后根据待查询数据的Key,以及待查询数据的业务字段对应的表字段,查询待查询数据的数据类别对应的表,得到查询结果。
示例性的,根据待查询数据的Key,待查询数据的业务字段对应的表字段,以及查询待查询数据的数据类别对应的表,可以生成对应的查询语句,通过执行查询语句,得到查询结果。其中查询语句可以是SQL语句等。
步骤S304、根据待查询数据的数据类别的Value的数据格式,将查询结果封装为Value。
该步骤为可选步骤,在步骤S303得到查询结果之后,可以直接将查询结果反馈给用户,或者还可以通过步骤S304将查询结果封装为Value之后,将封装得到的Value反馈给用户。
在得到查询结果之后,还可以待查询数据的数据类别的存储信息中Value的数据格式,将查询结果封装为Value。
示例性的,若待查询数据的数据类别的存储信息中Value的数据格式为JSON,则将查询结果封装为JSON字符串。
示例性的,若待查询数据的数据类别的存储信息中Value的数据格式为按照分隔符分类,则通过分隔符将查询结果组装为格式化的字符串。
本发明实施例通过预先在关系型数据库中存储数据类别信息表,数据类别信息表用于存储所有数据类别的存储信息,数据类别的存储信息包括:该数据类别对应的表,该数据类别的Value的业务字段与对应表中表字段的映射关系,以及该数据类别的Value的数据格式,从而实现关系型数据库中表与区块链中的业务数据的映射,能够实现基于关系型数据库存储区块链数据;通过响应于区块链系统的数据查询请求,获取待查询数据的Key,数据类别和业务字段;根据待查询数据的数据类别,查询数据类别信息表,确定与待查询数据的数据类别对应的表;根据待查询数据的Key和业务字段,查询与待查询数据的数据类别对应的表,得到查询结果,实现基于关系型数据库的数据查询,提高了查询效率。
实施例四
图4为本发明实施例四提供的区块链数据处理的方法流程图。在上述实施例一至三中任一实施例的基础上,本实施例中对于已知查询语句的情况下,进行区块链数据查询的流程进行示例性的说明。如图4所示,该方法具体步骤如下:
步骤S401、响应于区块链系统的数据查询请求,获取查询语句。
本实施例支持通过查询语句查询关系型数据库中的区块链数据。
本实施例中,计算设备在接收到数据查询请求后,提取数据查询请求中查询语句。其中查询语句可以是SQL语句等。
步骤S402、解析查询语句,确定待查询数据的数据类别和业务字段。
通过解析查询语句,获取查询语句中的表名,得到待查询数据的数据类别;获取查询语句中的查询字段,得到待查询的业务字段。
步骤S403、根据待查询数据的数据类别的存储信息,将查询语句中的数据类别替换为对应的表名称,将查询语句中的业务字段替换为对应的表字段,生成新的查询语句。
在确定待查询数据的数据类别和待查询的业务字段之后,计算设备通过查询数据类别信息表确定待查询数据的数据类别的存储信息;根据存储信息中该数据类别的Value的业务字段与对应表中表字段的映射关系,确定待查询数据的数据类别对应的表,以及待查询的业务字段对应的表字段;将查询语句中的数据类别替换为对应的表名称,将查询语句中待查询的业务字段替换为对应的表字段,生成新的查询语句。
示例性的,若待查询数据的数据类别对应的表有多个,那么对于每个表,将查询语句中的数据类别替换为该表的表名称,将查询语句中待查询的业务字段替换为对应的表字段,生成一个新的查询语句;这样,可以得到多个新的查询语句。
示例性的,若待查询数据的数据类别对应的表有多个,还可以生成一个新的联合查询语句。
步骤S404、执行新的查询语句,得到查询结果。
若新的查询语句有多个,则可以分别执行每个新的查询语句,得到每个新的查询语句对应的查询结果,然后将每个新的查询语句对应的查询结果进行汇总得到最终的查询结果。
步骤S405、根据待查询数据的数据类别的Value的数据格式,将查询结果封装为Key-Value数据。
该步骤为可选步骤,在步骤S404得到查询结果之后,可以直接将查询结果反馈给用户,或者还可以通过步骤S405将查询结果封装为Key-Value数据之后,将封装得到的Key-Value数据反馈给用户。
在得到查询结果之后,还可以待查询数据的数据类别的存储信息中Value的数据格式,将查询结果封装为Key-Value数据。
示例性的,若待查询数据的数据类别的存储信息中Value的数据格式为JSON,则将查询结果中的Value数据封装为JSON字符串。
示例性的,若待查询数据的数据类别的存储信息中Value的数据格式为按照分隔符分类,则通过分隔符将查询结果中的Value数据组装为格式化的字符串。
本发明实施例通过预先在关系型数据库中存储数据类别信息表,数据类别信息表用于存储所有数据类别的存储信息,数据类别的存储信息包括:该数据类别对应的表,该数据类别的Value的业务字段与对应表中表字段的映射关系,以及该数据类别的Value的数据格式,从而实现关系型数据库中表与区块链中的业务数据的映射,能够实现基于关系型数据库存储区块链数据;通过响应于区块链系统的数据查询请求,获取查询语句;解析查询语句,确定待查询数据的数据类别和业务字段;根据待查询数据的数据类别的存储信息,将查询语句中的数据类别替换为对应的表名称,将查询语句中的业务字段替换为对应的表字段,生成新的查询语句;执行新的查询语句,得到查询结果,实现基于关系型数据库的数据查询,提高了查询效率。
实施例五
图5为本发明实施例五提供的区块链数据处理的装置的结构示意图。本发明实施例提供的区块链数据处理的装置可以执行区块链数据处理的方法实施例提供的处理流程。如图5所示,该区块链数据处理的装置50包括:数据解析模块501和数据写入模块502。
具体地,数据解析模块501用于在需要存储Key-Value数据时,解析Key-Value数据中的Value,确定Value的数据类别。
数据写入模块502用于根据数据类别信息表,确定与Value的数据类别对应的目标表,其中数据类别信息表用于存储所有数据类别的存储信息,数据类别的存储信息包括:该数据类别对应的表,该数据类别的Value的业务字段与对应表中表字段的映射关系,以及该数据类别的Value的数据格式。
数据写入模块502还用于:根据数据类别信息表,将Key-Value数据写入目标表。
本发明实施例提供的装置可以具体用于执行上述实施例一所提供的方法实施例,具体功能此处不再赘述。
本发明实施例通过预先在关系型数据库中存储数据类别信息表,数据类别信息表用于存储所有数据类别的存储信息,数据类别的存储信息包括:该数据类别对应的表,该数据类别的Value的业务字段与对应表中表字段的映射关系,以及该数据类别的Value的数据格式,从而实现关系型数据库中表与区块链中的业务数据的映射;在需要存储Key-Value数据时,解析Key-Value数据中的Value,确定Value的数据类别;根据数据类别信息表,确定与Value的数据类别对应的目标表;根据数据类别信息表,将Key-Value数据写入目标表,能够实现基于关系型数据库存储区块链数据,支持应用层业务系统基于关系型数据库的数据查询,提高了查询效率。
实施例六
图6为本发明实施例六提供的区块链数据处理的装置的结构示意图。在上述实施例五的基础上,本实施例中,Value包括数据类别、数据格式、字段数量和Value值。数据写入模块还用于:
判断数据类别信息表中是否已存在Value的数据类别;若数据类别信息表中已存在Value的数据类别,则从数据类别信息表中获取Value的数据类别的存储信息;根据Value的数据类别的存储信息,判断Value中的数据格式和字段数量与存储信息中的数据格式和字段数量是否一致;若Value中的数据格式和字段数量与存储信息中的数据格式和字段数量均一致,则从数据类别信息表中获取与Value的数据类别对应的目标表。
可选的,数据写入模块还用于:
若数据类别信息表中不存在Value的数据类别,则获取与存储信息中的数据格式和字段数量匹配的新表,作为目标表;根据新表更新数据类别信息表中Value的数据类别的存储信息。
可选的,数据写入模块还用于:
若Value的数据格式与存储信息中的数据格式不一致,或者Value的字段数量与存储信息中的字段数量不一致,则获取与存储信息中的数据格式和字段数量匹配的新表,作为目标表;根据新表更新数据类别信息表中Value的数据类别的存储信息。
可选的,数据写入模块还用于:
确定目标表的当前状态,目标表的状态包括可写状态和不可写状态;若目标表为不可写状态,则获取与存储信息中的字段数量匹配的新表,作为目标表;并根据新表更新数据类别信息表中Value的数据类别的存储信息;若目标表为可写状态,则执行根据数据类别信息表将Key-Value数据写入目标表的步骤。
可选的,数据写入模块还用于:
检测目标表的行数是否达到预设阈值;若目标表的行数达到预设阈值,则将目标表的状态更新为不可写状态。
可选的,数据写入模块还用于:
将Key-Value数据的Key写入目标表的指定字段;根据Value的数据类别的存储信息,将Value的业务字段的值写入目标表中对应表字段。
可选的,如图6所示,区块链数据处理的装置50还可以包括:第一数据查询模块503。
第一数据查询模块503用于:
响应于区块链系统的数据查询请求,获取待查询数据的Key,数据类别和业务字段;根据待查询数据的数据类别,查询数据类别信息表,确定与待查询数据的数据类别对应的表;根据待查询数据的Key和业务字段,查询与待查询数据的数据类别对应的表,得到查询结果。
可选的,第一数据查询模块503还用于:
根据待查询数据的数据类别的Value的数据格式,将查询结果封装为Value。
可选的,如图6所示,区块链数据处理的装置50还可以包括:第二数据查询模块504。
第二数据查询模块504用于:
响应于区块链系统的数据查询请求,获取查询语句;解析查询语句,确定待查询数据的数据类别和业务字段;根据待查询数据的数据类别的存储信息,将查询语句中的数据类别替换为对应的表名称,将查询语句中的业务字段替换为对应的表字段,生成新的查询语句;执行新的查询语句,得到查询结果。
可选的,第二数据查询模块504还用于:
根据待查询数据的数据类别的Value的数据格式,将查询结果封装为Key-Value数据。
本发明实施例提供的装置可以具体用于执行上述实施例二至四中任一实施例所提供的方法实施例,具体功能此处不再赘述。
本发明实施例通过预先在关系型数据库中存储数据类别信息表,数据类别信息表用于存储所有数据类别的存储信息,数据类别的存储信息包括:该数据类别对应的表,该数据类别的Value的业务字段与对应表中表字段的映射关系,以及该数据类别的Value的数据格式,从而实现关系型数据库中表与区块链中的业务数据的映射,使得关系型数据库中表的数量控制在一定范围内,总体上使得数据库的性能维持稳定,防止因表数据过多导致数据库性能下降;在需要存储Key-Value数据时,解析Key-Value数据中的Value,确定Value的数据类别;根据数据类别信息表,确定与Value的数据类别对应的目标表;根据数据类别信息表,将Key-Value数据写入目标表,能够实现基于关系型数据库存储区块链数据,支持应用层业务系统基于关系型数据库的数据查询,提高了查询效率;进一步的,通过根据表中数据量的大小设置表是否可写的状态,若某一表的行数达到预设阈值,则将该表的状态更新为不可写状态;若目标表为不可写状态,则获取与存储信息中的字段数量匹配的新表作为目标表,可以防止单个表过大,进一步提高了查询效率。
实施例七
图7为本发明实施例七提供的计算设备的结构示意图。如图7所示,该计算设备70包括:处理器701,存储器702,以及存储在存储器702上并可在处理器701上运行的计算机程序。
其中,处理器701运行计算机程序时实现上述任一方法实施例提供的区块链数据处理的方法。
本发明实施例通过预先在关系型数据库中存储数据类别信息表,数据类别信息表用于存储所有数据类别的存储信息,数据类别的存储信息包括:该数据类别对应的表,该数据类别的Value的业务字段与对应表中表字段的映射关系,以及该数据类别的Value的数据格式,从而实现关系型数据库中表与区块链中的业务数据的映射;在需要存储Key-Value数据时,解析Key-Value数据中的Value,确定Value的数据类别;根据数据类别信息表,确定与Value的数据类别对应的目标表;根据数据类别信息表,将Key-Value数据写入目标表,能够实现基于关系型数据库存储区块链数据,支持应用层业务系统基于关系型数据库的数据查询,提高了查询效率。
另外,本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,计算机程序被处理器执行时实现上述任一方法实施例提供的区块链数据处理的方法。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本发明旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求书指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求书来限制。