发明名称 |
图形数据库非联机事务中删除数据的控制方法 |
摘要 |
本发明涉及图形数据库非联机事务中删除数据的控制方法,包括步骤:1)客户程序调用API,将参数数据传给图形数据库;2)进入同步区;3)确定待删除数据;4)检查待删除数据是否被事务锁定,若锁定则转步骤8),否则继续执行下面的步骤;5)检查与待删除数据相关的Relation是否被事务锁定,若锁定则转步骤8),否则继续执行下面的步骤;6)从DataSet中物理删除在步骤3)中确定的待删除数据;7)退出同步区,程序结束;8)等待一段时间;9)判断操作是否超时,若超时则退出执行逻辑,否则转步骤2)再次进入同步区。本发明的优点是作为联机事务中删除数据的有效补充,在删除数据的应用场景中,如无需开启联机事务,则可调用非联机事务的API直接删除数据。 |
申请公布号 |
CN102193978B |
申请公布日期 |
2012.12.05 |
申请号 |
CN201110072939.5 |
申请日期 |
2011.03.25 |
申请人 |
北京世纪互联宽带数据中心有限公司 |
发明人 |
陈升;于洪方;井卫军;蒋建平;陈晞;刘健 |
分类号 |
G06F17/30(2006.01)I;G06F9/46(2006.01)I |
主分类号 |
G06F17/30(2006.01)I |
代理机构 |
北京北新智诚知识产权代理有限公司 11100 |
代理人 |
张卫华 |
主权项 |
1.一种图形数据库非联机事务中删除数据的控制方法,其特征在于:非联机事务处理自上而下分为三层:最上层为暴露给外部调用程序的API;中间层为事务逻辑控制层,按操作类别分为同步区与非同步区,同步区意味着在同一时间只能有一个操作进行,其他操作在进入同步区之前均处于等待状态,该同步区的机制利用Java语言的线程同步锁定特性实现,非同步区的操作则不受限制,在任何时间均可以进行;最下层为存储数据的DataSet操作抽象层,在DataSet中,保存有联机事务自身的状态信息,以及数据的事务状态属性信息;用Relation描述图形数据库中的节点与节点之间的关系,每一个Relation均有一个全局唯一的名称、一个源Node、一个目标Node,将每一个Relation的定义信息保存在名称为graphic_db_relation_def的DataSet中,该DataSet的数据结构如下:<tables num="0001"><table><tgroup cols="3"><colspec colname="c001" colwidth="24%" /><colspec colname="c002" colwidth="26%" /><colspec colname="c003" colwidth="51%" /><tbody><row><entry morerows="1"> 列名称</entry><entry morerows="1"> 数据类型</entry><entry morerows="1"> 说明</entry></row><row><entry morerows="1"> relation_id</entry><entry morerows="1"> Number</entry><entry morerows="1"> 全局唯一的ID</entry></row><row><entry morerows="1"> name</entry><entry morerows="1"> String</entry><entry morerows="1"> 用于保存Relation的名称</entry></row><row><entry morerows="1"> source_node</entry><entry morerows="1"> Number</entry><entry morerows="1"> 源Node的ID</entry></row><row><entry morerows="1"> target_node</entry><entry morerows="1"> Number</entry><entry morerows="1"> 目标Node的ID</entry></row></tbody></tgroup></table></tables>两个通过Relation连接的Node中的数据可以建立连接,将所有数据的连接信息保存在名称为graphic_db_relation_record_def的DataSet中,该DataSet的数据结构如下:<img file="FDA00001667497000011.GIF" wi="1738" he="804" />执行以下步骤:1)客户程序调用API,将参数数据传给图形数据库;2)进入同步区;3)确定待删除数据;4)检查待删除数据是否被事务锁定,若锁定则转步骤8),否则继续执行下面的步骤;5)检查与待删除数据相关的Relation是否被事务锁定,若锁定则转步骤8),否则继续执行下面的步骤;6)从DataSet中物理删除在步骤3)中确定的待删除数据;7)退出同步区,程序结束;8)等待一段时间;9)判断操作是否超时,若超时则程序结束,否则转步骤2)再次进入同步区;在所述步骤1)中,API传入如下参数:node_name,指定将要删除哪个Node中的数据;filter,过滤条件;在所述步骤3)中,确定待删除数据的详细步骤如下:通过客户程序调用API时传入的filter参数作为过滤条件,对与API参数node_name同名的DataSet中的数据进行过滤,所有与过滤条件相匹配的数据均为待删除的数据记录;在所述步骤4)中,检查待删除数据是否被事务锁定的详细步骤如下:检查每一条待删除数据,如果有任何一条记录列_dirty的值为-1,且列_tx_no的值既不为空也不等于当前事务编号,则意味着在待删除数据中存在被其他事务锁定的情况;在所述步骤5)中,检查与待删除数据相关的Relation是否被事务锁定的详细步骤如下:查询名称为graphic_db_relation_record_def的DataSet,过滤获取所有source_record或target_record列的值与待删除数据的RID相等的记录,依次检查这些记录的_tx_no字段,如果有任何一条记录_tx_no列的值不为空,则意味着相关数据的Relation存在被其他事务锁定的情况。 |
地址 |
100015 北京市朝阳区酒仙桥东路1号院5号楼3层 |