发明内容
本申请实施例提供了一种基于OLTP的数据修改方法、系统及图形数据库服务器,以解决现有分布式OLTP中数据修改时容易造成数据重写和不同步的问题。
为了解决上述技术问题,本申请实施例公开了如下技术方案:
一种基于联机事务处理系统OLTP的数据修改方法,包括:
接收客户端通过调用应用程序编程接口API传输的数据修改命令,所述数据修改命令中包含事务标识、节点名称、过滤条件和待更新数据;
根据所述事务标识查找事务记录,并将所述节点名称添加到查找到的有效事务记录中;
根据节点名称查找节点属性状态信息表,从所述节点属性状态信息表中获取符合所述过滤条件的数据记录;
用所述待更新数据逐条更新所述数据记录。
还包括:
接收客户端通过调用API传输的事务创建命令;
根据所述事务创建命令在事务属性状态信息表中生成一条新的事务记录,并为所述新的事务记录分配唯一的事务标识;
将所述事务记录的提交属性和回滚属性设置为未执行。
所述根据所述事务标识查找事务记录后,还包括:
判断是否查找到所述事务记录;
当未查找到所述事务记录时,结束流程,当查找到所述事务记录时,判断查找到的所述事务记录的提交属性和回滚属性是否均为未执行;
当判断均为未执行时,确定所述查找到的事务记录为有效事务记录,执行所述将所述节点名称添加到查找到的有效事务记录中的操作,否则,结束流程。
所述用待更新数据逐条更新所述数据记录前,还包括:
判断是否有数据记录被其它事务锁定;
当所述数据记录均未被其它事务锁定时,执行所述用所述待更新数据逐条更新所述数据记录的操作,否则,在确定所述事务记录对应的事务未超过预设时间阈值时,返回所述根据所述事务标识查找事务记录的操作。
所述用待更新数据逐条更新所述数据记录包括:
将所述数据记录组成队列;
顺序从队列中提取一条数据记录;
当所述提取的数据记录不是脏数据,且未标记为更新和删除时,锁定所述数据记录,为所述数据记录生成副本记录,并用所述待更新数据更新所述副本记录中的数据;
当所述提取的数据记录是脏数据且为新插入的数据记录时,或者当所述提取的数据记录不是脏数据且已标记为更新时,则用所述待更新数据更新所述数据记录的副本记录。
还包括:
完成对所述数据记录的更新后,执行数据修改的事务提交操作;或,
对更新后的数据记录进行回滚操作。
所述事务提交操作包括:
接收客户端通过调用应用程序编程接口API传输的事务标识;
根据所述事务标识查找到对应的事务记录;
当查找到有效的事务记录时,将所述事务记录的提交属性设置为已执行;
删除锁定的数据记录,并将所述数据记录的副本记录作为更新后的数据记录;
将所述事务记录从所述事务属性状态信息表中删除。
所述回滚操作包括:
接收客户端通过调用应用程序编程接口API传输的事务标识;
根据所述事务标识查找到对应的事务记录;
当查找到有效的事务记录时,将所述事务记录的回滚属性设置为已执行;
删除所述副本记录,并解除对所述数据记录的锁定;
将所述事务记录从所述事务属性状态信息表中删除。
一种基于OLTP的数据修改系统,包括:图形数据库服务器和客户端,
所述客户端,用于通过调用图形数据库服务器的API,向所述图形数据库服务器传输数据修改命令,所述数据修改命令中包含事务标识、节点名称、过滤条件和待更新数据;
所述图形数据库服务器,用于根据所述事务标识查找事务记录,并将所述节点名称添加到查找到的有效事务记录中,根据节点名称查找节点属性状态信息表,从所述节点属性状态信息表中获取符合所述过滤条件的数据记录,用所述待更新数据逐条更新所述数据记录。
所述客户端,还用于通过调用图形数据库服务器的API,向所述图形数据库服务器传输事务创建命令;
所述图形数据库服务器,还用于根据所述事务创建命令在事务属性状态信息表中生成一条新的事务记录,并为所述新的事务记录分配唯一的事务标识,将所述事务记录的提交属性和回滚属性设置为未执行。
所述图形数据库服务器,还用于判断是否查找到所述事务记录,当未查找到所述事务记录时,结束流程,当查找到所述事务记录时,判断查找到的所述事务记录的提交属性和回滚属性是否均为未执行,当判断均为未执行时,确定所述查找到的事务记录为有效事务记录,执行所述将所述节点名称添加到查找到的有效事务记录中的操作,否则,结束流程。
所述图形数据库服务器,还用于判断是否有数据记录被其它事务锁定,当所述数据记录均未被其它事务锁定时,执行所述用所述待更新数据逐条更新所述数据记录的操作,否则,在确定所述事务记录对应的事务未超过预设时间阈值时,返回所述根据所述事务标识查找事务记录的操作。
所述图形数据库服务器,还用于完成对所述数据记录的更新后,执行数据修改的事务提交操作,或对更新后的数据记录进行回滚操作。
一种图形数据库服务器,包括:
接收单元,用于接收客户端通过调用应用程序编程接口API传输的数据修改命令,所述数据修改命令中包含事务标识、节点名称、过滤条件和待更新数据;
查找单元,用于根据所述事务标识查找事务记录,并将所述节点名称添加到查找到的有效事务记录中;
获取单元,用于根据节点名称查找节点属性状态信息表,从所述节点属性状态信息表中获取符合所述过滤条件的数据记录;
修改单元,用于通过所述待更新数据逐条更新所述数据记录。
所述接收单元,还用于接收客户端通过调用API传输的事务创建命令;
还包括:
生成单元,用于根据所述事务创建命令在事务属性状态信息表中生成一条新的事务记录,并为所述新的事务记录分配唯一的事务标识;
设置单元,用于将所述事务记录的提交属性和回滚属性设置为未执行。
还包括:
第一判断单元,用于判断是否查找到所述事务记录;
第一执行单元,用于当未查找到所述事务记录时,结束流程;
所述第一判断单元,还用于当查找到所述事务记录时,判断查找到的所述事务记录的提交属性和回滚属性是否均为未执行;
所述第一执行单元,还用于当判断均为未执行时,确定所述查找到的事务记录为有效事务记录,执行所述将所述节点名称添加到查找到的有效事务记录中的操作,否则,结束流程。
还包括:
第二判断单元,用于判断是否有数据记录被其它事务锁定;
第二执行单元,用于当所述数据记录均未被其它事务锁定时,触发所述修改单元执行操作,否则,在确定所述事务记录对应的事务未超过预设时间阈值时,返回所述查找单元执行操作。
所述修改单元包括:
队列生成单元,用于将所述数据记录组成队列;
记录提取单元,用于顺序从队列中提取一条数据记录;
记录锁定单元,用于当所述提取的数据记录不是脏数据,且未标记为更新和删除时,锁定所述数据记录;
副本生成单元,用于为所述数据记录生成副本记录;
数据更新单元,用于通过所述待更新数据更新所述副本记录中的数据;
数据更新单元,还用于当所述提取的数据记录是脏数据且为新插入的数据记录时,或者当所述提取的数据记录不是脏数据且已标记为更新时,用所述待更新数据更新所述数据记录的副本记录。
还包括:
提交单元,用于完成对所述数据记录的更新后,执行数据修改的事务提交操作;或
回滚单元,用于对更新后的数据记录进行回滚操作。
所述提交单元包括:
标识接收单元,用于接收客户端通过调用应用程序编程接口API传输的事务标识;
记录查找单元,用于根据所述事务标识查找到对应的事务记录;
属性设置单元,用于当查找到有效的事务记录时,将所述事务记录的提交属性设置为已执行;
记录更新单元,用于删除锁定的数据记录,并将所述数据记录的副本记录作为更新后的数据记录;
记录删除单元,用于将所述事务记录从所述事务属性状态信息表中删除。
所述回滚单元包括:
标识接收单元,用于接收客户端通过调用应用程序编程接口API传输的事务标识;
记录查找单元,用于根据所述事务标识查找到对应的事务记录;
属性设置单元,用于当查找到有效的事务记录时,将所述事务记录的回滚属性设置为已执行;
记录操作单元,用于删除所述副本记录,并解除对所述数据记录的锁定;
记录删除单元,用于将所述事务记录从所述事务属性状态信息表中删除。
由上述实施例可以看出,本申请实施例中当图形数据库服务器接收客户端通过API传输的数据修改命令后,根据该修改命令中的事务标识查找事务记录,并将所述节点名称添加到查找到的有效事务记录中,以及根据该修改命令中的节点名称查找节点属性状态信息表,从节点属性状态信息表中获取符合过滤条件的数据记录,用所述待更新数据逐条更新所述数据记录。应用本申请实施例可以满足OLTP的操作复杂性,及快速输入/输出的需求,实现一个事务所涉及的在多个节点上的数据记录修改,保证数据修改的同步性和完整性;并且当事务失效时,可以通过回滚操作进行数据恢复,保证数据库的完整性。
具体实施方式
本发明如下实施例提供了一种基于OLTP的数据修改方法、系统及图形数据库服务器。
为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明实施例中技术方案作进一步详细的说明。
参见图1,为本发明基于OLTP的数据修改方法的实施例流程图:
步骤101:接收客户端通过调用API传输的数据修改命令,该数据修改命令中包含事务标识、节点名称、过滤条件和待更新数据。
进一步,在接收到数据修改命令之前,还包括创建事务的步骤,即接收客户端通过调用API传输的事务创建命令,根据所述事务创建命令在事务属性状态信息表中生成一条新的事务记录,并为该新的事务记录分配唯一的事务标识,然后将事务记录的提交属性和回滚属性设置为未执行。
步骤102:根据事务标识查找事务记录,并将所述节点名称添加到查找到的有效事务记录中。
在根据事务标识查找事务记录时,进一步判断是否查找到该事务记录,当未查找到该事务记录时,结束流程,当查找到该事务记录时,判断查找到的事务记录的提交属性和回滚属性是否均为未执行;当判断均为未执行时,确定查找到的事务记录为有效事务记录,执行将所述节点名称添加到查找到的有效事务记录中的操作,否则,结束流程。
步骤103:根据节点名称查找节点属性状态信息表,从节点属性状态信息表中获取符合过滤条件的数据记录。
步骤104:用待更新数据逐条更新符合过滤条件的数据记录。
在更新数据记录前,进一步的,判断是否有数据记录被其它事务锁定,当数据记录均未被其它事务锁定时,执行用所述待更新数据逐条更新所述数据记录的操作,否则,在确定事务记录对应的事务未超过预设时间阈值时,返回根据事务标识查找事务记录的操作。
在更新数据记录时,将数据记录组成队列,顺序从队列中提取一条数据记录,当提取的数据记录不是脏数据,且未标记为更新和删除时,锁定该数据记录,为该数据记录生成副本记录,并用待更新数据更新该副本记录中的数据;当提取的数据记录是脏数据且为新插入的数据记录时,或者当提取的数据记录不是脏数据且已标记为更新时,则用待更新数据更新数据记录的副本记录。
进一步的,该实施例还包括事务提交操作,具体为:接收客户端通过调用API传输的事务标识,根据事务标识查找到对应的事务记录,当查找到有效的事务记录时,将事务记录的提交属性设置为已执行,删除锁定的数据记录,并将数据记录的副本记录作为更新后的数据记录,将事务记录从事务属性状态信息表中删除。
进一步的,该实施例还包括事务回滚操作,具体为:接收客户端通过调用应用程序编程接口API传输的事务标识,根据事务标识查找到对应的事务记录,当查找到有效的事务记录时,将事务记录的回滚属性设置为已执行,删除副本记录,并解除对数据记录的锁定,将事务记录从事务属性状态信息表中删除。
参见图2,为本申请实施例中OLTP的架构示意图:
该OLTP自上而下分为三层,最上层为供外部调用程序调用的API(Application Programming Interface,应用程序编程接口);中间层为事务逻辑控制层,其按照操作类别的不同分为同步区和非同步区,其中同步区中在同一时间只能执行一个操作,其它操作在进入同步区时处于等待状态,本申请实施例中数据修改过程即为在同步区中完成的操作,非同步区中的操作不受限制,任何时间均可以进行操作;最下层为数据存储DataSet操作抽象层,在不同的属性状态信息表DataSet中分别保存了联机事务的属性信息,以及联机事务所要处理数据所在节点上的属性信息。
在图形数据库中,联机事务的状态信息可以存储在名称为graphic_db_tx_def的属性状态信息表DataSet中,该DataSet的数据结构如下表1所示:
表1
在图形数据库中,每一个数据节点(Node)均有一个相对应的同名属性状态信息表DataSet,DataSet中每一条数据记录除了包含数据内容外,还包含了数据的关联信息,其包含如下表2所示的两个列字段的属性信息,其中,关联信息也可以单独保存在名称为graphic_db_relation_record_def的DataSet中:
表2
下面基于前述对OLTP架构的描述,列举一个应用实例对本申请数据修改方法过程进行描述。
参见图3,为本申请应用实例中在OLTP系统中创建新事务的流程图:
步骤301:接收客户端发送的API调用命令,该调用命令用于创建事务。
步骤302:为所要创建的事务生成全局唯一的事务ID。
步骤303:获取当前OLTP的系统时间。
步骤304:在事务属性状态信息表中插入一条新的事务记录,并将事务ID和系统时间写入该新记录中。
其中,事务属性状态信息表为graphic_db_tx_def,其中插入的新的事务记录如下表3所示:
表3
tx_no |
is_commit |
is_rollback |
is_timeout |
start_time |
associate_node |
processing |
123abc |
-1 |
-1 |
-1 |
1291739790803 |
null |
-1 |
参见图4,为对所创建新事务中的数据进行修改的流程图:
步骤401:客户端程序调用API。
客户端程序通过调用API,将事务ID与待修改的数据传给图形数据库服务器。
其中,通过调用API传入到图形数据库中的参数包括:
tx_no,指示要对哪个事务进行修改;
node_name,指定将要修改哪个Node中的数据;
filter,过滤符合条件的数据记录的过滤条件;
new_data,满足过滤条件的数据记录所要更新的值。
步骤402:进入同步区。
其中,同步区可以利用Java语言的synchronized同步线程锁定来实现,即在同一时刻,仅有一个操作能进入同步区。
步骤403:判断事务是否有效,若是,则执行步骤404;否则,结束流程。
在判断事务是否有效时,需要查询graphic_db_tx_def表,并以事务ID作为过滤条件进行检索,如果存在如下情况,则事务无效:
记录没有找到;
记录中is_commit的值为1,说明事务已提交;
记录中is_rollback的值为1,说明事务已回滚;
记录中is_timeout的值为1,说明事务已过期;
如果事务无效,则本次调用结束,返回错误信息,否则,继续后续流程。
步骤404:打开事务处理标记。
查询graphic_db_tx_def表,假定事务ID(tx_no)为123abc,则将该条记录的processing列的值置为1,如下表4所示:
表4
tx_no |
is_commit |
is_rollback |
is_timeout |
Start_time |
associate_node |
processing |
123abc |
-1 |
-1 |
-1 |
1291739790803 |
null |
1 |
步骤405:标记数据集变更。
将本次操作涉及的节点的节点(associate_node)名称增加到事务记录中。假定在编号为123abc的事务里,客户端程序调用API后,将数据插入到名称为Customer的Node中,则如下表5所示:
表5
tx_no |
is_commit |
is_rollback |
is_timeout |
Start_time |
associate_node |
processing |
123abc |
-1 |
-1 |
-1 |
1291739790803 |
Customer |
1 |
在同一事务中,如果涉及对多个节点的数据修改时,则将多个节点的名称以逗号分隔。
步骤406:确定待更新数据。
将客户端程序调用API时传入的过滤参数作为过滤条件,对与API参数中node_name名称相同的DataSet中的数据进行过滤,所有与过滤条件相匹配的数据记录均为待更新的数据记录。
步骤407:检查数据是否被锁定,若是,则执行步骤412;否则,执行步骤408。
检查每一条待更新的数据记录,如果有任何一条数据记录的_dirty值为-1,且_tx_no的值既不为空也不等于当前的事务ID,则表示待修改数据记录中存在数据记录被其他事务锁定。
步骤408:逐条更新数据记录。
当全部待修改数据记录均未被其它事务锁定时,则可以将全部待修改数据记录组成一个队列,对每一条数据记录进行更新操作。具体的更新操作过程可以参见后续图5所述的流程。
步骤409:更新事务的时间戳。
将最新的系统时间更新到所属事务记录的start_time列中。假设当前事务ID为123abc,当前的系统时间为1291739798888,则更新后的数据如下表6所示:
表6
tx_no |
is_commit |
is_rollback |
is_timeout |
Start_time |
associate_node |
processing |
123abc |
-1 |
-1 |
-1 |
1291739798888 |
Customer |
1 |
步骤410:关闭事务处理标记。
查询graphic_db_tx_def表,假定事务ID为123abc,则将该条记录的processing列的值置为-1,如下表7所示:
表7
tx_no |
is_commit |
is_rollback |
is_timeout |
Start_time |
associate_node |
processing |
123abc |
-1 |
-1 |
-1 |
1291739798888 |
Customer |
-1 |
步骤411:退出同步区,结束流程。
跳出前述synchronized同步线程锁定。
步骤412:等待10毫秒。
即执行当前逻辑的线程休眠10毫秒。该时间长度也可以根据需要进行其它设置,本申请实施例不进行限制。
步骤413:判断事务是否超时,若是,则结束流程;否则,返回步骤402。
在graphic_db_tx_def表的当前事务记录中,用当前系统的时间减去事务记录start_time列的值,如果差值大于30000(即30秒),则表明事务已超时,结束当前流程,否则,再次进入同步区。
参见图5,为申请应用实例中对数据进行更新的流程图,即对图4中步骤408的具体描述:
步骤501:获取待修改数据记录的队列长度。
步骤502:判断队列长度是否为空,若是,则结束流程,否则,执行步骤503。
如果队列长度为空(即为0),则意味着队列中已没有数据记录待处理,因此结束流程。
步骤503:从待修改数据记录的队列中取出一条数据记录。
步骤504:判断该条数据记录是否为脏数据,若是,则执行步骤510;否则,执行步骤505。
检查数据记录的_dirty列的值,如果该列的值为1,则意味该条数据记录为脏数据,否则不是。
步骤505:检查该条数据记录是否已被标记删除,若是,则返回步骤501;否则,执行步骤506。
其中,当满足如下条件时,表示该条数据记录已被标记删除:
该条数据记录的_tx_no列的值与当前事务的事务ID相等;或者,
在当前节点的同名DataSet中不存在与当前数据记录的记录ID相同、_dirty列的值为1、_tx_no列的值为当前事务ID的数据记录。
如果该条数据记录已被标记删除,表示在当前事务之前的操作中,已经将该条数据记录删除,因此忽略该条数据记录,重新检查队列长度,处理下一条数据记录,否则,继续执行后续步骤。
步骤506:检查该条数据是否已被标记更新,若是,则执行步骤511;否则,执行步骤507。
其中,当满足如下条件时,表示该条数据记录已被标记更新:
该条数据记录的_tx_no列的值与当前事务的事务ID相等;或者,
在当前节点的同名DataSet中能够找到与当前数据的记录ID相同、_dirty列的值为1、_tx_no列的值为当前事务编号的副本记录。
如果该条数据记录已被标记更新,表示在当前事务之前的操作中,已经对该条数据记录执行过修改操作,则对该条数据记录的记录副本更行修改,将其值修改为调用API时传入的new_data参数值,否则,继续执行后续步骤。
步骤507:锁定数据记录。
将该条数据记录的_tx_no列修改为当前事务的事务ID。
步骤508:制作数据记录的脏数据副本。
为当前数据记录复制一份相同的副本记录,然后修改副本记录的数据,将其_dirty列的值设为1,_tx_no列的值设为当前事务ID。
步骤509:更新数据记录的脏数据副本,返回步骤501。
对当前数据记录的副本记录执行更新操作,将其值修改为API被调用时传入的new_data参数值。
步骤510:判断脏数据是否为新插入,若是,则执行步骤511;否则,返回步骤501。
在DataSet中查找与当前数据记录的记录ID相同、_dirty列为-1的数据记录,如果找到,表示当前数据是该条数据记录的脏数据副本,忽略当前数据记录,重新检查队列长度,处理下一条数据记录;如果找不到,则表示当前数据记录是新插入的脏数据,对该条数据记录的脏数据副本进行修改,将其值修改为API被调用时传入的new_data参数值。
步骤511:更新数据记录,返回步骤501。
参见图6,为本申请对修改后的数据进行提交的流程:
步骤601:客户端调用API。
客户端程序通过调用API,将事务ID传输给图形数据库。
步骤602:判断事务是否有效,若是,则执行步骤603;否则,结束流程。
判断事务是否有效的机制为,以事务ID作为过滤条件查询graphic_db_tx_def表,如果存在如下情形,则事务无效:
记录没有找到;
记录中is_commit的值为1,说明事务已提交;
记录中is_rollback的值为1,说明事务已回滚;
记录中is_timeout的值为1,说明事务已过期;
如果事务无效,则本次调用结束,返回错误信息,否则,继续执行后续流程。
步骤603:标记事务提交状态。
查询graphic_db_tx_def表,假定所属事务ID为123abc,则将该条记录is_commit列的值置为1,如下表8所示:
表8
tx_no |
is_commit |
is_rollback |
is_timeout |
Start_time |
associate_node |
processing |
123abc |
1 |
-1 |
-1 |
1291739790803 |
Customer |
-1 |
步骤604:删除锁定数据。
查询graphic_db_tx_def表中所属事务记录中associate_node列的值,假设该列的值为Customer,则查询名称为Customer的DataSet,将该DataSet中_dirty列的值为-1、_tx_no列的值为当事务ID的记录删除。
步骤605:更改锁定数据副本的状态。
查询graphic_db_tx_def表中所属事务记录中associate_node列的值,假设该列的值为Customer,则查询名为Customer的DataSet,过滤该DataSet中_dirty列的值为1、_tx_no列的值等于当前事务ID的所有数据记录,将这些数据记录的_dirty列值设为-1,将_tx_no列的值设为null。
步骤606:删除事务记录。
将本次提交事务的记录从名称为graphic_db_tx_ddef的表中删除,完成事务的提交操作。
参见图7,为本申请对修改后的数据进行事务回滚时的流程图:
步骤701:客户端调用API。
客户端程序通过调用API,将事务ID传输给图形数据库。
步骤702:判断事务是否有效,若是,则执行步骤703;否则,结束流程。
在判断事务是否有效时,需要查询graphic_db_tx_def表,并以事务ID作为过滤条件进行检索,如果存在如下情况,则事务无效:
记录没有找到;
记录中is_commit的值为1,说明事务已提交;
记录中is_rollback的值为1,说明事务已回滚;
记录中is_timeout的值为1,说明事务已过期;
如果事务无效,则本次调用结束,返回错误信息,否则,继续后续流程。
步骤703:标记事务的回滚状态。
查询graphic_db_tx_def表,假定所属事务ID为123abc,则将该条数据记录is_rollback列的值置为1,如下表9所示:
表9
tx_no |
is_commit |
is_rollback |
is_timeout |
Start_time |
associate_node |
processing |
123abc |
-1 |
1 |
-1 |
1291739790803 |
Customer |
-1 |
步骤704:删除锁定数据的副本。
查询graphic_db_tx_def表中所属事务记录中associate_node列的值,假设该列的值为Customer,则查询名为Customer的DataSet,将该DataSet中_dirty列的值为1、_tx_no列的值等于当前事务ID的记录删除。
步骤705:解除数据锁定。
查询graphic_db_tx_def表中所属事务记录中associate_node列的值,假设该列的值为Customer,则查询名为Customer的DataSet,过滤该DataSet中tx_no列的值等于当前事务ID的记录,将这些记录的_tx_no列的值修改为null。
步骤706:删除事务记录。
将本次回滚事务的数据记录从名称为graphic_db_tx_def的表中删除,完成事务的回滚操作。
与本申请基于OLTP的数据修改方法的实施例相对应,本申请还提供了基于OLTP的数据修改系统及图形数据库服务器的实施例。
参见图8,为本申请基于OLTP的数据修改系统的实施例框图:
该基于OLTP的数据修改系统包括:客户端810和图形数据库服务器820。
其中,所述客户端810,用于通过调用图形数据库服务器的API,向所述图形数据库服务器传输数据修改命令,所述数据修改命令中包含事务标识、节点名称、过滤条件和待更新数据;
所述图形数据库服务器820,用于根据所述事务标识查找事务记录,并将所述节点名称添加到查找到的有效事务记录中,根据节点名称查找节点属性状态信息表,从所述节点属性状态信息表中获取符合所述过滤条件的数据记录,用所述待更新数据逐条更新所述数据记录。
进一步,所述客户端810,还用于通过调用图形数据库服务器的API,向所述图形数据库服务器传输事务创建命令;所述图形数据库服务器820,还用于根据所述事务创建命令在事务属性状态信息表中生成一条新的事务记录,并为所述新的事务记录分配唯一的事务标识,将所述事务记录的提交属性和回滚属性设置为未执行。
进一步,所述图形数据库服务器820,还用于判断是否查找到所述事务记录,当未查找到所述事务记录时,结束流程,当查找到所述事务记录时,判断查找到的所述事务记录的提交属性和回滚属性是否均为未执行,当判断均为未执行时,确定所述查找到的事务记录为有效事务记录,执行所述将所述节点名称添加到查找到的有效事务记录中的操作,否则,结束流程。
进一步,所述图形数据库服务器820,还用于判断是否有数据记录被其它事务锁定,当所述数据记录均未被其它事务锁定时,执行所述用所述待更新数据逐条更新所述数据记录的操作,否则,在确定所述事务记录对应的事务未超过预设时间阈值时,返回所述根据所述事务标识查找事务记录的操作。
进一步,所述图形数据库服务器820,还用于完成对所述数据记录的更新后,执行数据修改的事务提交操作,或对更新后的数据记录进行回滚操作。
参见图9,为本申请图形数据库服务器的第一实施例框图:
该图像数据库服务器包括:接收单元910、查找单元920、获取单元930和修改单元940。
其中,接收单元910,用于接收客户端通过调用应用程序编程接口API传输的数据修改命令,所述数据修改命令中包含事务标识、节点名称、过滤条件和待更新数据;
查找单元920,用于根据所述事务标识查找事务记录,并将所述节点名称添加到查找到的有效事务记录中;
获取单元930,用于根据节点名称查找节点属性状态信息表,从所述节点属性状态信息表中获取符合所述过滤条件的数据记录;
修改单元940,用于通过所述待更新数据逐条更新所述数据记录。
参见图10,为本申请图形数据库服务器的第二实施例框图:
该图像数据库服务器包括:接收单元1001、生成单元1002、设置单元1003、查找单元1004、第一判断单元1005、第一执行单元1006、获取单元1007、第二判断单元1008、第二执行单元1009和修改单元1010。
其中,接收单元1001,用于接收客户端通过调用API传输的事务创建命令;
生成单元1002,用于根据所述事务创建命令在事务属性状态信息表中生成一条新的事务记录,并为所述新的事务记录分配唯一的事务标识;
设置单元1003,用于将所述事务记录的提交属性和回滚属性设置为未执行;
接收单元1001,还用于接收客户端通过调用应用程序编程接口API传输的数据修改命令,所述数据修改命令中包含事务标识、节点名称、过滤条件和待更新数据;
查找单元1004,用于根据所述事务标识查找事务记录;
第一判断单元1005,用于判断是否查找到所述事务记录;
第一执行单元1006,用于当未查找到所述事务记录时,结束流程;
所述第一判断单元1005,还用于当查找到所述事务记录时,判断查找到的所述事务记录的提交属性和回滚属性是否均为未执行;
所述第一执行单元1006,还用于当判断均为未执行时,确定所述查找到的事务记录为有效事务记录,执行所述将所述节点名称添加到查找到的有效事务记录中的操作,否则,结束流程;
获取单元1007,用于根据节点名称查找节点属性状态信息表,从所述节点属性状态信息表中获取符合所述过滤条件的数据记录;
第二判断单元1008,用于判断是否有数据记录被其它事务锁定;
第二执行单元1009,用于当所述数据记录均未被其它事务锁定时,触发所述修改单元1010执行操作,否则,在确定所述事务记录对应的事务未超过预设时间阈值时,返回所述查找单元1004执行操作;
修改单元1010,用于通过所述待更新数据逐条更新所述数据记录。
具体的,修改单元1010可以包括(图10中未示出):队列生成单元,用于将所述数据记录组成队列;记录提取单元,用于顺序从队列中提取一条数据记录;记录锁定单元,用于当所述提取的数据记录不是脏数据,且未标记为更新和删除时,锁定所述数据记录;副本生成单元,用于为所述数据记录生成副本记录;数据更新单元,用于通过所述待更新数据更新所述副本记录中的数据;数据更新单元,还用于当所述提取的数据记录是脏数据且为新插入的数据记录时,或者当所述提取的数据记录不是脏数据且已标记为更新时,用所述待更新数据更新所述数据记录的副本记录。
参见图11,为本申请图形数据库服务器的第三实施例框图:
该图像数据库服务器包括:接收单元1110、查找单元1120、获取单元1130、修改单元1140、提交单元1150和回滚单元1160。
其中,接收单元1110,用于接收客户端通过调用应用程序编程接口API传输的数据修改命令,所述数据修改命令中包含事务标识、节点名称、过滤条件和待更新数据;
查找单元1120,用于根据所述事务标识查找事务记录,并将所述节点名称添加到查找到的有效事务记录中;
获取单元1130,用于根据节点名称查找节点属性状态信息表,从所述节点属性状态信息表中获取符合所述过滤条件的数据记录;
修改单元1140,用于通过所述待更新数据逐条更新所述数据记录;
提交单元1150,用于完成对所述数据记录的更新后,执行数据修改的事务提交操作;
回滚单元1160,用于对更新后的数据记录进行回滚操作。
具体的,提交单元1150可以包括(图11中未示出):标识接收单元,用于接收客户端通过调用应用程序编程接口API传输的事务标识;记录查找单元,用于根据所述事务标识查找到对应的事务记录;属性设置单元,用于当查找到有效的事务记录时,将所述事务记录的提交属性设置为已执行;记录更新单元,用于删除锁定的数据记录,并将所述数据记录的副本记录作为更新后的数据记录;记录删除单元,用于将所述事务记录从所述事务属性状态信息表中删除。
具体的,回滚单元1160可以包括(图11中未示出):标识接收单元,用于接收客户端通过调用应用程序编程接口API传输的事务标识;记录查找单元,用于根据所述事务标识查找到对应的事务记录;属性设置单元,用于当查找到有效的事务记录时,将所述事务记录的回滚属性设置为已执行;记录操作单元,用于删除所述副本记录,并解除对所述数据记录的锁定;记录删除单元,用于将所述事务记录从所述事务属性状态信息表中删除。
通过对以上实施方式的描述可知,本申请实施例中当图形数据库服务器接收客户端通过API传输的数据修改命令后,根据该修改命令中的事务标识查找事务记录,并将所述节点名称添加到查找到的有效事务记录中,以及根据该修改命令中的节点名称查找节点属性状态信息表,从节点属性状态信息表中获取符合过滤条件的数据记录,用所述待更新数据逐条更新所述数据记录。应用本申请实施例可以满足OLTP的操作复杂性,及快速输入/输出的需求,实现一个事务所涉及的在多个节点上的数据记录修改,保证数据修改的同步性和完整性;并且当事务失效时,可以通过回滚操作进行数据恢复,保证数据库的完整性。
本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的保护范围之内。