一种数据库表的操作方法和操作系统与流程

文档序号:11250973阅读:975来源:国知局
一种数据库表的操作方法和操作系统与流程

本发明涉及数据库表的操作技术,更具体地,涉及数据库表的操作方法和操作系统。



背景技术:

当前已有将区块链与数据库进行结合的系统,通过该系统,用户可以像操作普通数据库一样向区块链发送相应的交易,交易会被记录在区块链网络中,同时会在底层数据库中反应出来。该系统实现了数据库操作记录与实现的分离,极大地提高了传统数据库的安全性及灵活性。

有某些情况下,如果多人同时对同一张数据库表进行操作,就会引起冲突,比如表中一条数据为:小红的工资2000,a用户想基于2000去给其涨工资10%,在这个交易过程中,b用户发了一条新的交易将小红的工资提高10%,这时a用户发出来的交易在执行的时候将会基于2200再去涨10%去涨工资,会得到不正确的结果。

因此,当前的基于数据库的区块链系统存在数据操作冲突的问题。



技术实现要素:

针对背景技术中的问题,本发明提出一种基于数据库的区块链系统中的操作方法和系统,保证用户当前所发的交易是基于自己所见到的数据库表的状态来进行操作,如果中间有其它交易插入,则交易失败。

本发明的数据库表的操作方法包括:

s1,创建表对象:为每一个数据库表生成一个对象,所述对象记录了所述数据库表的属性;

s2,创建基础哈希值:将每一个数据库表的第一个操作的表操作语句进行哈希运算得到一个哈希值,作为基础哈希值,记录在该数据库表的对象内;

s3,哈希值校验:收到针对一数据库表的后续操作后,将针对该后续操作的表操作语句与该数据库表的基础哈希值进行连接,再进行哈希运算得到新的哈希值;

s4,哈希值校验:比较所述后续操作里记录的基础哈希值与当前在s3中计算的基础哈希值是否相同,如果不同则判定交易失败;

s5,如果相同,则校验成功,则将新计算的基础哈希值记录在该数据库表的对象内。

本发明还提出一种数据库表的操作系统,包括区块链系统和交易节点,所述区块链系统被配置为执行如下步骤:

s1,创建表对象:为每一个数据库表生成一个对象,所述对象记录了所述数据库表的属性;

s2,创建基础哈希值:将每一个数据库表的第一个操作的表操作语句进行哈希运算得到一个哈希值,作为基础哈希值,记录在该数据库表的对象内;

s3,哈希值校验:收到来自交易节点针对一数据库表的后续操作后,将针对该后续操作的表操作语句与该数据库表的基础哈希值进行连接,再进行哈希运算得到新的哈希值;

s4,哈希值校验:比较所述后续操作里记录的基础哈希值与当前在s3中计算的基础哈希值是否相同,如果不同则判定交易失败;

s5,如果相同,则校验成功,则将新计算的基础哈希值记录在该数据库表的对象内。

本发明的有益效果包括:使得基于数据库的区块链系统针对数据库表的操作在交易时序上保持严格的顺序,使用户基于当前所见的状态对表进行操作,得到期望的结果,如果未能基于当前状态进行操作,则交易失败。

附图说明

图1为本发明的系统的一个结构示意图;

图2为本发明的方法的一个实施方式的流程图;

图3为本发明的方法的又一个实施方式的流程图。

具体实施方式

下面参照附图描述本发明的实施方式,其中相同的部件用相同的附图标记表示。

下面以区块链系统为例来描述本发明,但是本发明不仅仅适用于区块链系统。

在基于数据库的区块链系统中,对数据库的操作先进区块链共识,共识通过后,操作会被记录在区块链网络的区块里,同时该交易会去操作数据库表,得到用户想要的数据库表结果。本发明要实现的技术效果是,针对表的操作是必须基于自己当时看到的一个状态,如果状态改变,则操作失败。

第一实施方式

图1显示了区块链系统的一种拓扑架构,包括数据库和多个交易节点。数据库中维护每一个数据库表以及每一次交易的记录。

如图2所示,本发明的方法包括:

步骤s1,创建表对象:区块链系统为数据库表生成一个对象,所述对象记录了所述数据库表的属性。可以把数据库表的全部属性记录在所述对象内,包括后面所述的该数据库表的基础哈希值。

交易节点发起针对一个数据库表的第一个操作时,交易节点将表操作语句发送至区块链系统。交易节点发送至区块链系统的信息包括:表操作语句,以及步骤s1中的基础哈希值。关于交易节点如何获取所述基础哈希值,在下面详述。

步骤s2,创建基础哈希值:区块链系统将该数据库表的第一个操作的表操作语句(例如sql语句)进行哈希运算得到一个哈希值h0,作为基础哈希值,记录在所述对象内。可以使用sha512-half算法得到一个32个字节的基础哈希值。

当交易节点发起针对该数据库表的后续操作时,交易节点将表操作语句发送至区块链系统。交易节点发送至区块链系统的信息包括:表操作语句,以及步骤s2中的基础哈希值。关于交易节点如何获取所述基础哈希值,在下面详述。

而且,针对该数据库表的第n个操作,都将该操作的表操作语句与前一个操作生成的基础哈希值hn-1相关联,生成新的基础哈希值hn。

以公式表示为:

创建表:basehashh0=sha512-half(sql0)

后续第n次操作:basehashhn=sha512-half(basehashhn-1+sqln)

这样,每一次表操作基于的哈希值都是一个最新的值。基于记录了每一个表操作的基础哈希值,当交易进入共识环节时,就可以进行验证。

步骤s3,哈希值校验:区块链系统收到来自交易节点的针对一数据库表的后续操作后,将针对该后续操作的表操作语句(例如sql语句)与该数据库表的基础哈希值进行连接,再进行哈希运算得到新的哈希值hn。

步骤s4,哈希值校验:区块链系统比较所述交易里记录的基础哈希值与当前在s3中计算的基础哈希值是否相同,如果不同则不通过共识,判定交易失败。

步骤s5,如果相同,则校验成功,则将新计算的基础哈希值记录在该数据库表的对象内。

具体而言,在一交易节点做交易时,之前该数据库表已经被操作了n次,那么该数据库表的对象中记录的最新的基础哈希值为:

basehashhn=sha512-half(basehashhn-1+sqln)

当该交易节点向所述区块链系统提交交易时,这是针对该数据库表的第n+1次操作。该交易里记录了该交易节点的表操作语句sqln+1与基于该数据库表的最新基础哈希值basehashhn算出来的值:

basehashhn+1=sha512-half(basehashhn+sqln+1)。

区块链系统收到该交易后,基于该交易中的表操作语句sqln+1和系统中存储的该数据库表的最新基础哈希值basehashhn生成一个哈希值basehashh’n+1,比较basehashh’n+1和basehashhn+1是否相同。相同,则允许对该数据库表进行操作。

交易失败会让用户不会以为正确操作了数据库,但是事实上却得不到正确的期望结果,所以极大地提高了用户体验,保证了对数据库表操作的可靠性。

第二实施方式

如图3所示,根据本发明的另一方面,对第一实施方式进行了改进。

在步骤a1,在发送交易的交易节点的本地创建一map表,所述map表的key值为数据库表的表名,对应的值包含第一实施方式的步骤s2中生成的基础哈希值。所述map表可以存储在本地的缓存中。

步骤a2,当某一交易节点向所述区块链系统发送一笔交易时,先在本地的所述map表中查询。

第一种情况,步骤a3,如果在所述map表里能查到,则用这个缓存的基础哈希值,作为最新的基础哈希值,如第一实施方式那样进行后续操作。

第二种情况,步骤a4,如果未能找到,则所述交易节点向所述区块链系统请求获取该数据库表的对象中记录的基础哈希值,作为最新的基础哈希值,如第一实施方式那样进行后续操作。

优选地,在第二种情况下,所述交易节点用从区块链系统获取的基础哈希值来更新本地的所述map表中的值。

除了步骤a4中所述的更新map表的方法,还有一种更新本地map表的哈希值的方式。

步骤a5,在交易节点的交易成功后(交易的哈希值校验如第一实施方式的步骤s5所述),所述交易节点更新本地的所述map表中的值。

在本实施方式中,在本地设立map表,这是因为,基于数据库的区块链系统中一般设定每隔一段时间(例如3~9秒)才会生成一个新的区块,数据库表的属性都记录在区块上,因此只有在新的区块上才能反应基础哈希值的变化。那么,如果在这个时间(交易会被记在一个区块上)里想发送多个交易来操作该表,就需要缓存一个基础哈希值来维护交易里记录的哈希值的连续性。

另一方面,因为所述map表位于缓存中,则不能让该map表不断增大,因此,在步骤a6,为map表里的数据库表设立计时器,如果一段时间(例如30分钟)内,map表内的某一个数据库表缓存的计时信息未发生变化,则从所述map表里删除对该数据库表的基础哈希值的缓存记录。

另外,当本地的所述map表里的某张数据库表的基础哈希值与区块链系统里记录的值不一致时,即,在本节点收到的对某张数据库表的交易时间段里,其它区块链节点也收到一个或多个针对同样一张数据库表的操作交易。需要及时察觉到这种错误并更正本节点缓存中对应的基础哈希值。

将经过本节点的针对某个数据库表的交易都记录到上面本地的所述map表里,每生成一个新的区块,本地节点检查本地的map表里记录的各个数据库表的操作是否已经成功记录在了区块上,如果记录上,则删掉对应的交易,如果发现未记录到区块上,则要删除这个交易之后的所有交易(因为都基于了一个错误的基础哈希值),然后再去区块链里去获取最新的正常的对应表的基础哈希值,对本地缓存的所述map表里的基础哈希值进行更新。

第三实施方式

本发明还提出一种基于数据库表的操作系统,包括区块链系统和交易节点,所述区块链系统被配置为执行第一、第二实施方式中的步骤s1-s5。所述交易节点包括处理器,所述处理器被配置为执行第一、第二实施方式中的a1-a4。

本发明还提出一种存储介质,其存储有可在处理器中运行的程序,所述程序为第一、第二实施方式中的步骤s1-s5以及a1-a4。

以上所述的实施例,只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。

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