发明内容
本发明的目的在于提供一种区块链数据上链方法,用以解决现有的区块链数据上链的可靠性较低,无法满足需求的问题。
为了解决上述问题,本发明采用以下技术方案:
一种区块链数据上链方法,包括:
获取客户端发送的数据上链请求,所述数据上链请求包括待上链数据;
将所述待上链数据更新到预先构建的内存数据库中,并向所述客户端发送数据上链受理反馈信息;
按照预设的时间周期读取所述内存数据库,检测所述内存数据库中出现更新的数据,并将所述出现更新的数据按照数据更新时刻的先后顺序写入区块链,其中,数据更新时刻越早,越先写入区块链。
可选地,所述将所述待上链数据更新到预先构建的内存数据库中,包括:
将所述待上链数据更新到预先构建的内存数据库中,并为内存数据库中每一个出现更新的数据标记时间戳,所述时间戳为对应的数据更新时刻。
可选地,在将所述待上链数据更新到预先构建的内存数据库中之后,还包括:
为所述待上链数据分配一个上链状态标记位,并将所述上链状态标记位初始化为第一数值;
相应地,在将所述出现更新的数据按照数据更新时刻写入区块链之后,还包括:
将所述上链状态标记位由所述第一数值变更为第二数值;
所述第一数值不同于所述第二数值。
可选地,在为所述待上链数据分配一个上链状态标记位之后,还包括:
当接收到所述客户端发送的上链进度查询请求时,读取所述上链状态标记位;
若读取到所述上链状态标记位为第一数值,则向所述客户端发送数据上链未完成的指示信息;
若读取到所述上链状态标记位为第二数值,则向所述客户端发送数据上链已完成的指示信息。
可选地,在将所述待上链数据更新到预先构建的内存数据库中之前,还包括:
将所述内存数据库中与所述待上链数据对应的原始数据转存到预先构建的原始数据序列中;
在将所述出现更新的数据按照数据更新时刻的先后顺序写入区块链之后,还包括:
若所述出现更新的数据写入区块链失败,则读取所述原始数据序列,并将所述内存数据库中所述出现更新的数据还原为所述原始数据序列中记录的相应原始数据。
本发明的有益效果为:在进行数据上链时,并非直接将数据进行上链,而是先将待上链数据更新到预先构建的内存数据库中,并告知客户端数据上链已受理,然后按照预设的时间周期读取内存数据库,检测内存数据库中出现更新的数据,并将出现更新的数据写入区块链,采用这种中间通过内存数据库进行转送的上链方式,相较于传统的直接进行数据上链的方式,数据上链可靠性得到很大的提高;而且,将出现更新的数据按照数据更新时刻的先后顺序写入区块链,数据更新时刻越早,越先写入区块链,通过这种写入方式能够进一步提升数据上链的可靠性。因此,该区块链数据上链方法能够降低数据上链失败的可能性,保证数据能够可靠稳定上链,进而提升区块链的处理效率。
具体实施方式
实施例一:
本实施例提供了一种区块链数据上链方法,如图1所示,包括:
获取客户端发送的数据上链请求,所述数据上链请求包括待上链数据:
本实施例中,通过服务器实现该区块链数据上链方法。
当用户想要将数据上传至区块链时,可以操作客户端,客户端与服务器相连接,根据客户端向服务器发出一个数据上链请求,数据上链请求包括待上链数据。其中,客户端可以为手机、台式电脑、平板电脑、笔记本电脑等。客户端的数量根据实际应用场景进行确定,可以是一个客户端,也可以是多个客户端。
将所述待上链数据更新到预先构建的内存数据库中,并向所述客户端发送数据上链受理反馈信息:
服务器在接收到该数据上链请求之后,将相应的待上链数据更新到预先构建的内存数据库中。内存数据库的写入速度远远高于传统的磁盘数据库的写入速度,那么,将待上链数据更新至,即存入内存数据库能够有效提高存储效率,而且,即便上链数据被高频率的写入内存数据库时也不会对服务器性能造成影响。比如:待上链数据是一个数据序列的更新值,则服务器在获取到数据上链请求之后,会将该数据序列的原始值更新为该更新值。
当设置多个客户端时,各个用户可以通过不同的客户端分别发出各个数据上链请求,服务器会将各自的待上链数据分别更新到内存数据库中,从而产生多个出现更新的数据。
服务器在将待上链数据更新到内存数据库中之后,向客户端发送数据上链受理反馈信息,告知用户该数据上链请求已受理,此时待上链数据只是缓存于该内存数据库中,尚未上传至区块链。
进一步地,为了明确内存数据库中每一个出现更新的数据的数据更新时刻,便于后期写入区块链中,将待上链数据更新到内存数据库中,并为内存数据库中每一个出现更新的数据标记时间戳,时间戳为对应的数据更新时刻。那么,每一个出现更新的数据均有对应的时间戳,以表示数据更新时刻。需要说明的是,对于某一个数据,可能出现不止一次的更新,那么,时间戳对应的数据更新时刻为最新一次的数据更新对应的数据更新时刻。
按照预设的时间周期读取所述内存数据库,检测所述内存数据库中出现更新的数据,并将所述出现更新的数据按照数据更新时刻的先后顺序写入区块链,其中,数据更新时刻越早,越先写入区块链:
服务器按照预设的时间周期读取内存数据库,时间周期根据实际应用需要进行具体设置,比如:10s。在时间周期的作用下服务器按照相应的时间间隔读取内存数据库。服务器检测内存数据库中出现更新的数据,并将出现更新的数据按照数据更新时刻的先后顺序写入区块链,其中,数据更新时刻越早,越先写入区块链,也就是说,先更新的数据,先写入区块链;后更新的数据,后写入区块链。比如:假设内存数据库中出现更新的数据有四个,第一个数据的数据更新时刻为T1,第二个数据的数据更新时刻为T2,第三个数据的数据更新时刻为T3,第四个数据的数据更新时刻为T4,T1早于T3,T3早于T4,T4早于T2,则第一个数据先写入区块链,接着,第三个数据写入区块链,然后,第四个数据写入区块链,最后,第二个数据写入区块链。
实施例二:
本实施例提供了一种区块链数据上链方法,包括:
获取客户端发送的数据上链请求,所述数据上链请求包括待上链数据:
该步骤的具体实现过程在实施例一中已给出了具体说明,不再赘述。
将内存数据库中与待上链数据对应的原始数据转存到预先构建的原始数据序列中:
服务器预先构建一个原始数据序列,将内存数据库中与待上链数据对应的原始数据转存到预先构建的原始数据序列中。
将所述待上链数据更新到预先构建的内存数据库中,并向所述客户端发送数据上链受理反馈信息:
该步骤的具体实现过程在实施例一中已给出了具体说明,不再赘述。
为所述待上链数据分配一个上链状态标记位,并将所述上链状态标记位初始化为第一数值:
服务器在将待上链数据更新到内存数据库中之后,会为该待上链数据分配一个上链状态标记位,并将该上链状态标记位初始化为第一数值,比如可以初始化为1,表示该待上链数据未上链。应当理解,若服务器获取到多个客户端发送的多个数据上链请求,则会为每个数据上链请求对应的待上链数据分别分配一个初始化为第一数值的上链状态标记位,即每个待上链数据都具有各自的上链状态标记位。
按照预设的时间周期读取所述内存数据库,检测所述内存数据库中出现更新的数据,并将所述出现更新的数据按照数据更新时刻的先后顺序写入区块链,其中,数据更新时刻越早,越先写入区块链:
该步骤的具体实现过程在实施例一中已给出了具体说明,不再赘述。
将所述上链状态标记位由所述第一数值变更为第二数值,所述第一数值不同于所述第二数值;和/或,若出现更新的数据写入区块链失败,则读取所述原始数据序列,并将所述内存数据库中所述出现更新的数据还原为所述原始数据序列中记录的相应原始数据:
在将出现更新的数据按照数据更新时刻的先后顺序写入区块链之后,将对应的目标数据的上链状态标记位变更为第二数值,第一数值不同于第二数值,比如:若第一数值为0,则第二数值为1;若第一数值为1,则第二数值为0,那么,上链状态标记位变化时,表示数据已完成上链。
进一步的,在为待上链数据分配上链状态标记位之后的时间中,用户可通过客户端发送上链进度查询请求,当服务器接收到客户端发送的上链进度查询请求时,读取上链状态标记位;若读取到上链状态标记位为第一数值,则向客户端发送数据上链未完成的指示信息;若读取到上链状态标记位为第二数值,则向客户端发送数据上链已完成的指示信息。因此,通过上链状态标记位的数值便于用户了解数据上链操作是否已完成。另外,服务器也可以定时检测待上链数据的上链状态标记位的数值,若检测到第二数值,则主动发送数据上链已完成的指示信息至该客户端。
而且,在将出现更新的数据按照数据更新时刻的先后顺序写入区块链之后,若出现更新的数据写入区块链失败,服务器会读取原始数据序列,并将内存数据库中出现更新的数据还原为原始数据序列中记录的相应原始数据,从而保证内存数据库和区块链两边数据一致。该过程为数据上链失败之后的数据回滚过程,即将数据恢复到更新之前的状态。
上述中,设定“将所述上链状态标记位由所述第一数值变更为第二数值,所述第一数值不同于所述第二数值”为步骤S1,“若出现更新的数据写入区块链失败,则读取所述原始数据序列,并将所述内存数据库中所述出现更新的数据还原为所述原始数据序列中记录的相应原始数据”为步骤S2,那么,本发明提供的区块链数据上链方法可以只包括步骤S1和步骤S2中的其中一个,也可以同时包括步骤S1和步骤S2。而且,步骤S1和步骤S2之间没有严格的先后顺序,两者的先后顺序由实际应用场景进行设置。
上述实施例仅以一种具体的实施方式说明本发明的技术方案,任何对本发明进行的等同替换及不脱离本发明精神和范围的修改或局部替换,其均应涵盖在本发明权利要求保护的范围之内。