发明内容
本发明的目的是提供一种基于区块链存储的数据处理方法及系统,将目标数据采用区块链算法生成区块链数据,并且按照区块链形式存储;再通过区块链数据对目标数据进行校验,确保目标数据真实性和准确性。
本发明提供一种基于区块链存储的数据处理方法,包括以下步骤:
配置目标数据表的元数据到元数据表中,生成与所述元数据相对应的记录数据,所述记录数据至少包括目标数据表地址、目标数据表名称以及目标数据表列名;
扫描并提取所述记录数据,根据每个所述记录数据生成相对应的第一区块链任务记录,并将生成的所述第一区块链任务记录插入到任务表中,所述第一区块链任务记录包括时间段信息和任务状态信息;
按照所述时间段信息和所述任务状态信息筛选所述任务表,得到第二区块链任务记录,并按照升序的时间顺序排列;逐条执行所述第二区块链任务记录,读取所述目标数据表的目标数据,根据所述目标数据生成区块链数据,将所述区块链数据插入区块链数据库中;
从所述区块链数据库中提取所述区块链数据,根据所述区块链数据对所述目标数据表中的目标数据进行校验。
作为一种可实施方式,根据所述目标数据生成区块链数据是通过哈希算法生成,具体生成过程包括以下步骤:
将目标数据表的目标数据通过哈希算法得到的哈希值,并将所述目标数据表的PK主键写入所述区块链数据的body部数据;
将所述body部数据与上个区块链数据的header部数据通过哈希算法得到当前区块链数据的header部数据;
将所述body部数据和所述header部数据合成当前所述区块链数据。
作为一种可实施方式,所述将所述body部数据与上个区块链数据的header部数据通过哈希算法得到当前区块链数据的header部数据;还包括以下步骤:
将所述header部数据采用内部缓存储存。
作为一种可实施方式,所述根据所述目标数据生成区块链数据,将所述区块链数据插入区块链数据库中,具体包括以下步骤:
根据若干个所述目标数据同时生成数量相同的区块链数据;
将若干所述区块链数据同时插入到所述区块链数据库中。
作为一种可实施方式,所述第一区块链任务记录还包括当前的行字段;
在将所述区块链数据插入所述区块链数据库时,根据插入的执行任务,更新所述行字段的数值;
在将所述区块链数据插入所述区块链数据库出现异常时,中止更新所述行字段的数值。
相应地,本发明还提供了一种基于区块链存储的数据处理系统,包括数据配置模块、区块链任务生成模块、区块链数据处理模块以及校验模块;
所述数据配置模块,用于配置目标数据表的元数据到元数据表中,生成与所述元数据相对应的记录数据,所述记录数据至少包括目标数据表地址、目标数据表名称以及目标数据表列名;
所述区块链任务生成模块,用于扫描并提取所述记录数据,根据每个所述记录数据生成相对应的第一区块链任务记录,并将生成的所述第一区块链任务记录插入到任务表中,所述第一区块链任务记录包括时间段信息和任务状态信息;
所述区块链数据处理模块,用于按照所述时间段信息和所述任务状态信息筛选所述任务表,得到第二区块链任务记录,并按照升序的时间顺序排列;逐条执行所述第二区块链任务记录,读取所述目标数据表的目标数据,根据所述目标数据生成区块链数据,将所述区块链数据插入区块链数据库中;
所述校验模块,从所述区块链数据库中提取所述区块链数据,根据所述区块链数据对所述目标数据表中的目标数据进行校验。
作为一种可实施方式,所述区块链数据处理模块还包括body数据处理单元、header数据处理单元以及合成单元;
所述body数据处理单元,用于将目标数据表的目标数据通过哈希算法得到的哈希值,并将所述目标数据表的PK主键写入所述区块链数据的body部数据;
所述header数据处理单元,用于将所述body部数据与上个区块链数据的header部数据通过哈希算法得到当前区块链数据的header部数据;
所述合成单元,用于将所述body部数据和所述header部数据合成当前所述区块链数据。
作为一种可实施方式,所述header数据处理单元还包括存储子单元;所述存储子单元,用于将所述header部数据采用内部缓存储存。
作为一种可实施方式,所述区块链数据处理模块还包括批量处理单元;
所述批量处理单元,用于根据若干个所述目标数据同时生成数量相同的区块链数据;将若干所述区块链数据同时插入到所述区块链数据库中。
作为一种可实施方式,所述区块链任务生成模块还包括当前行的行字段生成单元;
所述行字段生成单元,用于在将所述区块链数据插入所述区块链数据库时,根据插入的执行任务,更新所述行字段生成单元生成的行字段的数值;
在将所述区块链数据插入所述区块链数据库出现异常时,中止更新所述行字段生成单元生成的行字段的数值。
与现有技术相比,本技术方案具有以下优点:
本发明提供的基于区块链存储的数据处理方法及系统,将数据库中的目标数据采用区块链算法生成区块链数据,并且按照区块链形式存储;利用区块链数据本身不能非法篡改的特性,再通过区块链数据对目标数据进行校验,目标数据一旦被篡改就会被发现,确保目标数据真实性和准确性。
具体实施方式
以下结合附图,对本发明上述的和另外的技术特征和优点进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的部分实施例,而不是全部实施例。
请参阅图1,本发明实施例一提供的基于区块链存储的数据处理方法,包括以下步骤:
S100、配置目标数据表的元数据到元数据表中,生成与元数据相对应的记录数据,记录数据至少包括目标数据表地址、目标数据表名称以及目标数据表列名;
上述配置目标数据表的元数据到元数据表中,目标数据表存储于目标数据库中,可以将目标数据表中的数据分为两类:一种为存储有重要数据,另一种为存储有非重要数据;在配置目标数据表的元数据可以只配置重要数据的目标数据表的元数据,利用记录数据中记录的目标数据表列名可以准确找到需要配置的重要数据,从而减轻系统运行负担。一条记录数据就包含一张目标数据表的所有元信息。
S200、扫描并提取记录数据,根据每个记录数据生成相对应的第一区块链任务记录,并将生成的第一区块链任务记录插入到任务表中,第一区块链任务记录包括时间段信息和任务状态信息;
每隔一段时间扫描元数据表,将元数据表中的记录数据全部选取出来,每张目标数据表(既一条记录数据)生成一个第一区块链任务记录插入任务表,每条第一区块链任务记录包含一张目标数据表需要生成区块链数据的时间区间段(开始时间t0和结束时间t1),任务状态INIT(初始);
S300、按照时间段信息和任务状态信息筛选任务表,得到第二区块链任务记录,并按照升序的时间顺序排列;逐条执行第二区块链任务记录,读取目标数据表的目标数据,根据目标数据生成区块链数据,将区块链数据插入区块链数据库中;
从任务表中将状态为INIT的第一区块链任务按时间选取出来(按时间升序),得到第二区块链任务记录,并且按顺序逐条执行,从第二区块链任务记录中读取目标数据表的元数据,建立数据库连接,而后读取目标数据表的目标数据,再用区块链算法生成目标数据表的区块链数据,最后将区块链数据插入区块链数据库,本次任务生成的区块链时间跨度为t0-t1,全部生成完毕后将任务记录置成SUCCESS;这里所说的区块链算法有多种算法方式,包括哈希算法、数字签名以及RSA。
S400、从区块链数据库中提取区块链数据,根据区块链数据对目标数据表中的目标数据进行校验。
将最近N分钟的区块链数据取出来,然后从目标数据表中取出对应的目标数据,通过签名验签方式判断原始数据是否被篡改过。如果校验结果不一致,则发送报警信息。
数据校验有两种策略,全量校验和部分校验。全量校验就是将储存的目标数据与区块链数据全部进行校验,而部分校验则是抽取部分数据进行校验。
本发明通过将数据库中的目标数据采用区块链的形式存储成区块链数据,利用区块链数据本身不能非法篡改的特性,再利用区块链数据对目标数据进行准实时校验,目标数据一旦被篡改就会被发现,确保目标数据真实性和准确性。
这里需要说明的是原有的区块链技术中,区块链数据的最小存储单元分为两部分,分别为body部和header部,body部里存放数据,header部存放上一个区块链数据的哈希值或数字签名;那么每个区块链数据都会和上一个区块链数据通过header部构成强关联,就如同链条一样环环相扣,想改变链中的某一个区块链数据的值而不被发现,那么就要将这个区块链数据之后的所有链上的区块链数据都作修改,才能变成合法的数据,因为你只改当前区块链数据的数据的话,通过后一个区块链数据的header就能被校验出来,而且链在不停的动态增长,篡改者无法停止链的动态增长,就不能修改链上的数据而不被发现。本发明利用区块链的特性,对目标数据表中的目标数据进行哈希算法生成区块链数据。
进一步的,根据目标数据生成区块链数据是通过哈希算法生成,具体生成过程包括以下步骤:
S310、将目标数据表的目标数据通过哈希算法得到的哈希值,并将目标数据表的PK主键写入区块链数据的body部数据;
S320、将body部数据与上个区块链数据的header部数据通过哈希算法得到当前区块链数据的header部数据;
S330、将body部数据和header部数据合成当前区块链数据。
根据上述步骤得到一个完整的区块,而整个区块链数据由源源不断的相互链接的区块组成;而将目标数据表的目标数据通过哈希算法得到的哈希值和目标数据表的PK主键写入区块链数据的body部数据;这样的body部数据对比直接存储原数据来说,不仅能大大的节省区块链数据的存储空间,也能加快提取区块链数据进行校验的速度。通过header数据连接两个相邻区块链,使相邻的区块链数据之间像链条一样环环相扣,并且动态增长,达到防篡改的效果。
在S300这个步骤中:按照时间段信息和任务状态信息筛选任务表,得到第二区块链任务记录,并按照升序的时间顺序排列;逐条执行第二区块链任务记录,读取目标数据表的目标数据,根据目标数据生成区块链数据,将区块链数据插入区块链数据库中;
由于每一个区块链数据插入区块链数据库时,需要严格按时间顺序,所以生成区块链数据的任务只能是单线程运行,以保证插入是有序的。但是考虑到需要及时地将大量的目标数据表转化并插入链,所以对于生成区块链数据和区块链数据库的算法有很高的性能要求,即单线程下单位时间内的吞吐量要尽量大,为了达成这个目的,可以采用以下策略:
1、将body部数据与上个区块链数据的header部数据通过哈希算法得到当前区块链数据的header部数据;还包括以下步骤:将header部数据采用内部缓存储存。使得一个批次的任务只需查询一次数据库,不需要每个任务都查一次,减少数据库查询;
2、根据目标数据生成区块链数据,将区块链数据插入区块链数据库中,具体包括以下步骤:根据若干个目标数据同时生成数量相同的区块链数据;将若干区块链数据同时插入到区块链数据库中。这里可以是以时间段信息批量处理的形式进行,提高吞吐量。
3、第一区块链任务记录还包括当前的行字段;在将区块链数据插入区块链数据库时,根据插入的执行任务,更新行字段的数值;在将区块链数据插入区块链数据库出现异常时,中止更新行字段的数值。比如服务器断电,服务器被强制重启等情况时,只要下次任务再执行就能从中断的地方继续,不必从头开始。
下面我们举例具体说明:
首先将当前的任务状态信息设置为PROCESS,然后根据查询区块链得到区块链中最新的区块,并取得这个区块的header值,在批量跑任务时,为节省数据库的查询次数,采用本地缓存,使得一个批次的任务只需查询一次数据库,不需要每个任务都查一次。
得到区块的header值后,利用任务记录中的记录数据(即元数据),动态拼接出SQL语句,连接目标数据库后,将时间段信息为t0-t1的目标数据以批的形式查询出,以批的形式生成区块,每个区块的body部由目标数据哈希算法后得到,本区块的header部由上个区块的header部以及本次body部的数据混合后,哈希算法得到,然后以批的形式插入区块链数据库,形成新的区块链。当所有t0-t1生成的区块链数据都插入区块链数据库后,设置任务状态为SUCCESS。批次的大小视硬件情况调整,以提高吞吐量。
基于同一发明构思,本发明实施例还提供一种基于区块链存储的数据处理系统,该系统的实施可参照上述方法的过程实现,重复之处不再冗述。
如图2所示,本发明实施例二提供的基于区块链存储的数据处理系统,包括数据配置模块100、区块链任务生成模块200、区块链数据处理模块300以及校验模块400;
数据配置模块100用于配置目标数据表的元数据到元数据表中,生成与元数据相对应的记录数据,记录数据至少包括目标数据表地址、目标数据表名称以及目标数据表列名;
区块链任务生成模块200用于扫描并提取记录数据,根据每个记录数据生成相对应的第一区块链任务记录,并将生成的第一区块链任务记录插入到任务表中,第一区块链任务记录包括时间段信息和任务状态信息;
区块链数据处理模块300用于按照时间段信息和任务状态信息筛选任务表,得到第二区块链任务记录,并按照升序的时间顺序排列;逐条执行第二区块链任务记录,读取目标数据表的目标数据,根据目标数据生成区块链数据,将区块链数据插入区块链数据库中;
校验模块400从区块链数据库中提取区块链数据,根据区块链数据对目标数据表中的目标数据进行校验。
继续参见图2,区块链数据处理模块300还包括body数据处理单元310、header数据处理单元320以及合成单元330;
body数据处理单元310,用于将目标数据表的目标数据通过哈希算法得到的哈希值,并将目标数据表的PK主键写入区块链数据的body部数据;
header数据处理单元320,用于将body部数据与上个区块链数据的header部数据通过哈希算法得到当前区块链数据的header部数据;
合成单元330,用于将body部数据和header部数据合成当前区块链数据。
通过区块链数据处理模块300得到一个完整的区块,而整个区块链数据由源源不断的相互链接的区块组成;而将目标数据表的目标数据通过哈希算法得到的哈希值和目标数据表的PK主键写入区块链数据的body部数据;这样的body部数据对比直接存储原数据来说,不仅能大大的节省区块链数据的存储空间,也能加快提取区块链数据进行校验的速度。通过header数据连接两个相邻区块链,使相邻的区块链数据之间像链条一样环环相扣,并且动态增长,达到防篡改的效果。
具体的,header数据处理单元320还包括存储子单元;存储子单元,用于将header部数据采用内部缓存储存。
具体的,区块链数据处理模块300还包括批量处理单元340;批量处理单元340,用于根据若干个目标数据同时生成数量相同的区块链数据;将若干区块链数据同时插入到区块链数据库中。
具体的,区块链任务生成模块200还包括当前行的行字段生成单元210;行字段生成单元210,用于在将区块链数据插入区块链数据库时,根据插入的执行任务,更新行字段生成单元210生成的行字段的数值;在将区块链数据插入区块链数据库出现异常时,中止更新行字段生成单元210生成的行字段的数值。
本发明提供的基于区块链存储的数据处理方法及系统,将数据库中的目标数据采用区块链算法生成区块链数据,并且按照区块链形式存储;利用区块链数据本身不能非法篡改的特性,再通过区块链数据对目标数据进行校验,目标数据一旦被篡改就会被发现,确保目标数据真实性和准确性。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。