一种数据恢复方法和装置、计算机可读存储介质与流程

文档序号:17989874发布日期:2019-06-22 00:42阅读:116来源:国知局
一种数据恢复方法和装置、计算机可读存储介质与流程

本申请涉及但不限于数据处理技术领域,尤其涉及一种数据恢复方法和装置、计算机可读存储介质。



背景技术:

知识图谱被用来描述真实世界中存在的各种事物以及它们之间的关联关系,一种知识图谱的描述方式包括:实体(即知识图谱中的点)、关系(即知识图谱中的边)及和实体或者关系关联的属性。其中,实体拥有多个属性,且由一个主键字段进行唯一标示;关系亦拥有多个属性,且由关系的主体主键字段及关系的客体主键字段进行唯一标示。

当接入知识图谱的数据发生更新、删除时,一般方案会直接将修改内容添加到图数据库中覆盖旧的内容。但由于知识图谱数据的构建需要经过一个较复杂的数据标准化和映射过程,难免会发生数据构建过程中出现错误的情况,如果直接更新数据库则无法恢复到之前的正确状态。比如刚更新的一个实体的属性值是错误的,但并不知道之前的内容是什么;或者添加了一条本不应该存在的关系,由于无法区分这次添加操作是“新增”还是“更新”,所以无法执行正确的恢复步骤。

在现有的数据库领域中,对于数据恢复的支持方式包括以下几种:

(1)通过检查点(checkpoint)的方式创建快照(snapshot)(比如三个月内每个月建一个snapshot),并将每个snapshot视为一个版本,某些关系型数据库(如mysql等)使用的就是这种方案。这种方案的缺点是snapshot的粒度太粗,一般只会保留最近的几个时间点的snapshot,并且每次恢复都需要全库回滚,效率较低。

(2)通过按时间(比如按一天、一周为一个时间区间)分表存储数据,这种方案能一定程度上解决snapshot方式粒度较粗的问题,恢复时只需要把错误的数据表删除即可,但该方案只适用于时间序列形式的只增(append-only)数据,对于知识图谱数据并不适用。



技术实现要素:

本发明实施例提供了一种数据恢复方法和装置、计算机可读存储介质,能够将数据的状态恢复到任意合法的时间点。

本发明实施例的技术方案是这样实现的:

本发明实施例提供了一种数据恢复方法,包括:

获取待恢复数据的时间戳,检测第二数据库中所述待恢复数据是否包含在所述时间戳及所述时间戳之前的版本记录;

如果包括在所述时间戳及所述时间戳之前的版本记录,则使用所述版本记录的数据,替换第一数据库中的所述待恢复数据,并删除第二数据库中所述待恢复数据在所述时间戳之后的所有版本,其中,所述第一数据库用于存储最新版本的数据,所述第二数据库用于存储所有版本的数据;

如果不包括在所述时间戳及所述时间戳之前的版本记录,则删除第一数据库和第二数据库中所述待恢复数据的所有版本记录。

在一实施例中,所述使用所述版本记录的数据,替换第一数据库中所述待恢复数据,包括:

检测第一版本记录是否包含预设的删除标识,其中,第一版本记录为所述第二数据库中所述待恢复数据的时间戳对应的版本记录,或者在所述待恢复数据的时间戳之前且离所述待恢复数据的时间戳最近的版本记录;

如果包含预设的删除标识,则读取第二版本记录,并使用第二版本记录的数据替换所述第一数据库中的所述待恢复数据,并为第一数据库中的所述待恢复数据添加删除标识,其中,当第一版本记录为所述第二数据库中所述待恢复数据的时间戳对应的版本记录时,第二版本记录为所述第二数据库中在所述待恢复数据的时间戳之前且离所述待恢复数据的时间戳最近的版本记录;当第一版本为所述第二数据库中在所述待恢复数据的时间戳之前且离所述待恢复数据的时间戳最近的版本记录时,第二版本记录为所述第二数据库中在所述待恢复数据的时间戳之前且离所述待恢复数据的时间戳第二近的版本记录;

如果不包含预设的删除标识,则使用所述第一版本记录的数据,替换所述第一数据库中的所述待恢复数据。

在一实施例中,所述数据为知识图谱数据,所述第一数据库为图数据库,所述第二数据库为表数据库。

在一实施例中,所述数据包括以下至少之一:实体、关系、实体或者关系关联的属性;

实体通过主键进行标识,实体关联的属性包括一个或多个键值对;关系通过关系的两个端点实体的主键及关系的类型进行标识,关系关联的属性包括一个或多个键值对;

在所述第二数据库中,一个实体的版本记录由实体的主键和第二时间戳进行标识,一个关系的版本记录由关系的两个端点实体的主键、关系的类型和第二时间戳进行标识。

在一实施例中,当所述第二数据库中存在一个或多个所述实体或所述关系的错误的版本记录时,所述方法还包括:

获取错误的版本记录对应的时间范围;

遍历第二数据库中所述实体或所述关系的所有版本的时间戳,删除时间戳在所述对应的时间范围内的版本记录。

本发明实施例还提供了一种知识图谱的数据恢复方法,包括:

获取待恢复数据的时间戳,检测第四数据库中所述待恢复数据是否包含在所述时间戳及所述时间戳之前的版本记录;

如果包括在所述时间戳及所述时间戳之前的版本记录,则使用所述版本记录的数据,替换第三数据库中的所述待恢复数据,并删除第四数据库中用于替换所述第三数据库中的待恢复数据的版本记录及在所述时间戳之后的所有版本,其中,所述第三数据库用于存储最新版本的数据,所述第四数据库用于存储历史版本的数据;

如果不包括在所述时间戳及所述时间戳之前的版本记录,则删除第三数据库和第四数据库中所述待恢复数据的所有版本记录。

本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如以上任一项所述的数据恢复方法的步骤。

本发明实施例还提供了一种数据恢复装置,包括处理器及存储器,其中:所述处理器用于执行存储器中存储的程序,以实现如以上任一项所述的数据恢复方法的步骤。

本发明实施例还提供了一种数据恢复装置,包括第一检测模块和第一处理模块,其中:

第一检测模块,用于获取待恢复数据的时间戳,检测第二数据库中所述待恢复数据是否包含在所述时间戳及所述时间戳之前的版本记录,如果包括在所述时间戳及所述时间戳之前的版本记录,则发送第一通知至第一处理模块;如果不包括在所述时间戳及所述时间戳之前的版本记录,则发送第二通知至第一处理模块;

第一处理模块,用于接收到第一通知,使用所述版本记录的数据,替换第一数据库中的所述待恢复数据,并删除第二数据库中所述待恢复数据在所述时间戳之后的所有版本,其中,所述第一数据库用于存储最新版本的数据,所述第二数据库用于存储所有版本的数据;接收到第二通知,删除第一数据库和第二数据库中所述待恢复数据的所有版本记录。

本发明实施例还提供了一种数据恢复装置,包括第二检测模块和第二处理模块,其中:

第二检测模块,用于获取待恢复数据的时间戳,检测第四数据库中所述待恢复数据是否包含在所述时间戳及所述时间戳之前的版本记录,如果包括在所述时间戳及所述时间戳之前的版本记录,则发送第一通知至第二处理模块;如果不包括在所述时间戳及所述时间戳之前的版本记录,则发送第二通知至第二处理模块;

第二处理模块,用于接收到第一通知,使用所述版本记录的数据,替换第三数据库中的所述待恢复数据,并删除第四数据库中用于替换所述第三数据库中的待恢复数据的版本记录及在所述时间戳之后的所有版本,其中,所述第三数据库用于存储最新版本的数据,所述第四数据库用于存储历史版本的数据;接收到第二通知,删除第三数据库和第四数据库中所述待恢复数据的所有版本记录。

本发明实施例提供的数据恢复方法和装置、计算机可读存储介质,通过检测第二数据库中所述待恢复数据是否包含在所述时间戳及所述时间戳之前的版本记录来决定待恢复数据的恢复方法,能够将数据的状态恢复到任意合法的时间点。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1为本发明实施例的一种数据恢复方法的流程示意图;

图2为本发明实施例的另一种数据恢复方法的流程示意图;

图3为本发明实施例的一种数据恢复装置的结构示意图;

图4为本发明实施例的另一种数据恢复装置的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

如图1所示,本发明实施例提供了一种数据恢复方法,包括如下步骤:

步骤101:获取待恢复数据的时间戳,检测第二数据库中所述待恢复数据是否包含在所述时间戳及所述时间戳之前的版本记录;

需要说明的是,本发明实施例的第一数据库用于存储最新版本的数据,第二数据库用于存储所有版本的数据,所述所有版本包括最新版本和历史版本。

在本发明的一实施例中,所述数据为知识图谱数据,所述第一数据库为图数据库,所述第二数据库为表数据库。

本申请使用两种不同的存储方式(分别为图数据库、表数据库)实现以下存储方案:

图数据库,比如titangraph(一个分布式图数据库,特别为存储和处理大规模图而优化),用于存储图中的点的最新的版本状态,图中的边的最新版本状态,以及所有版本的图谱的拓扑结构;

带树结构索引的表数据库,比如带有日志结构的合并树(logstructuredmergetree,lsm-tree)树索引的hbase(hadoopdatabase),用于存储图中的点的所有版本状态、图中的边的所有版本状态。

在本发明的一实施例中,所述数据包括以下至少之一:实体、关系、实体或者关系关联的属性;

如表1所示,实体通过主键(key)进行标识,实体关联的属性包括一个或多个键值(key-value)对;如表2所示,关系通过关系的两个端点实体的主键及关系的类型进行标识,关系关联的属性包括一个或多个键值对;

在所述第二数据库中,如表3所示,一个实体的版本记录由实体的主键和第二时间戳进行标识,如表4所示,一个关系的版本记录由关系的两个端点实体的主键、关系的类型和第二时间戳进行标识。

表1

在表1中,实体的最新版本由唯一主键key标识,一个实体包含多个key-value业务属性,如果当前最新版本被删除,则将一个名为deleted的内部属性设置为true。也就是说,在实体被删除时,并不会真正地把这条记录从图数据库中删除,而是在数据库中记录一个特殊的删除标识;并且也不会连带修改该被删除实体的相关关系数据的状态(不删除对应的关系,也不会设置关系的deleted标识)。lastmodifiedtime为该最新版本的修改时间。

实体是产生事件的一个个体,是事件发生的主体,比如火车事件,它是以人为主,则这个实体就是某个人,而表示一个人的方式有多种,如:身份证,护照号,军官证等,所以有时也将一个具体表示一个人的唯一id作为一个实体。实体关联的属性即实体的详细信息,例如在火车事件中,实体关联的属性有车次、车厢、座位号、发站、到站等信息。

表2

在表2中,关系的最新版本由关系的两个端点实体的唯一主键(表中的subj和obj)以及关系的类型(label)唯一标识,一个关系包含多个key-value业务属性,如果当前最新版本被删除,则将内部属性deleted删除标识设置为true。

本申请的关系包括显性关系和隐性关系,其中,显性关系表示实体与实体之间的关系已经客观存在,可以通过事实直接作出判断,比如亲属关系;而隐性关系就是实体与实体之间的关系无法通过简单信息就可以判断,需要一定的计算规则从历史数据做一些统计和计算才能够确定它们是否存在,这种关系是一种可能性也就是满足某个规则的两个实体只是有非常大的可能有这个关系。

表3

在表3中,利用表数据库的线性分布式可扩展性,表数据库中的实体版本存储一个被修改实体的所有版本(包括当前的最新版本和最新版本之前的历史版本)。一个实体的版本记录由实体的主键key和该版本的修改时间戳ts唯一标识,图中的max_long代表计算机系统中长整型整数的最大值,拼接版本的唯一标识时通过(max_long-ts)对时间戳进行转换,当检索实体或关系的状态时,如果用户没有输入需要检索的时间戳或时间范围,则取(max_long-ts)整体值最小的版本即为最新版本,便于快速检索。在这些版本中,对于“删除状态”的版本,只需要记录一个deleted=true标识,对于“非删除状态”的版本,保留该状态下的所有属性值。无论该实体被修改了一个还是多个属性,每一个历史版本均保留该版本下的所有属性的内容。

表4

在表4中,关系版本同样存储的是一条关系数据的所有版本记录(包含当前的最新版本和最新版本之前的历史版本)。一个关系的版本记录由关系的两个端点实体的主键subj和obj、关系的类型label以及该版本的修改时间戳ts唯一标识,拼接唯一标识时与实体版本一样通过(max_long-ts)对时间戳进行转换。对于每个版本的属性存储方式与实体类似。

对于进入本申请的知识图谱系统的新的实体或关系数据,在内部处理时均被赋予一个历史版本时间戳ts,如果已指定使用实体/关系的一个属性作为该时间戳的来源则直接使用,如果没有指定则使用当前系统时间戳。删除实体/关系操作等同于增加一个deleted=true的历史版本。

当增加一个新的实体或关系的版本记录时,如果发现该实体或关系的版本记录已存在但是增加的版本记录的时间戳与现有的版本记录的时间戳均不相同,则往图数据库中覆盖写入所述增加的版本记录的内容,记录lastmodifiedtime=ts,同时按照以上介绍的存储格式往表数据库中添加一条历史版本记录;如果不存在该实体或关系的版本记录,则往图数据库中写入所述增加的版本记录的内容,记录lastmodifiedtime=ts,同时按照以上介绍的存储格式往表数据库中添加一条历史版本记录;如果第一数据库或第二数据库已包含该实体或关系的版本记录且增加的时间戳与现有的某个时间戳相同,则根据所述时间戳更新所述第一数据库或第二数据库中对应时间戳的版本记录。

在本发明的一实施例中,所述第一数据库存储的所述实体或关系的版本记录,包括所述实体或所述关系的所有属性值及所述删除标识;

所述第二数据库存储的所述实体或关系的版本记录包括删除版本和非删除版本,其中,删除版本只包括所述删除标识;非删除版本包括所述实体或所述关系的所有属性值。

步骤102:如果包括在所述时间戳及所述时间戳之前的版本记录,则使用所述版本记录的数据,替换第一数据库中的所述待恢复数据,并删除第二数据库中所述待恢复数据在所述时间戳之后的所有版本;

在本发明的一实施例中,所述使用所述版本记录的数据,替换第一数据库中所述待恢复数据,包括:

检测第一版本记录是否包含预设的删除标识,其中,第一版本记录为所述第二数据库中所述待恢复数据的时间戳对应的版本记录,或者在所述待恢复数据的时间戳之前且离所述待恢复数据的时间戳最近的版本记录;

如果包含预设的删除标识,则读取第二版本记录,并使用第二版本记录的数据替换所述第一数据库中的所述待恢复数据,并为第一数据库中的所述待恢复数据添加删除标识,其中,当第一版本记录为所述第二数据库中所述待恢复数据的时间戳对应的版本记录时,第二版本记录为所述第二数据库中在所述待恢复数据的时间戳之前且离所述待恢复数据的时间戳最近的版本记录;当第一版本为所述第二数据库中在所述待恢复数据的时间戳之前且离所述待恢复数据的时间戳最近的版本记录时,第二版本记录为所述第二数据库中在所述待恢复数据的时间戳之前且离所述待恢复数据的时间戳第二近的版本记录;

如果不包含预设的删除标识,则使用所述第一版本记录的数据,替换所述第一数据库中的所述待恢复数据。

步骤103:如果不包括在所述时间戳及所述时间戳之前的版本记录,则删除第一数据库和第二数据库中所述待恢复数据的所有版本记录。

在本发明的一实施例中,将主键为key的实体恢复到指定历史时间点ts的状态,包括如下步骤:

(1)根据key和ts从表数据库中读取修改时间小于或等于ts且离ts最近的一个版本,如果找到,即表数据库中存在rowkey>=(key+(max_long-ts))的记录,转到步骤(2);如果没有找到,说明在指定时间点表数据库中未存在这个实体,转到步骤(5);

(2)将修改时间小于或等于ts且离ts最近的一个版本记作v1,检测v1中是否包括deleted=true标识,如果包括deleted=true标识,转到步骤(3);如果不包括deleted=true标识,转到步骤(4);

(3)从表数据库中读取修改时间小于ts且离ts第二近的一个版本,将该版本记作v2,从v2版本读取所有属性值覆盖到图存储中,并设置图存储中的实体记录deleted=true,在大表存储中通过范围查询遍历把v2版本之后的更新版本删除;

(4)将v1版本的属性值读出来覆盖到图存储中,在大表存储中通过范围查询遍历把v1版本之后的更新版本删除;

(5)以大表存储的前缀查询(prefixscan)方式找出key对应的所有历史版本并清除;从图存储中把实体相关的所有关系数据查询出来,遍历每一条关系记录,根据关系的subj+obj+label在大表存储中通过前缀查询找出所有的历史版本并清除,最后把图存储中的以上关系数据和实体数据清除。

在本发明的一实施例中,将由主体主键subj、客体主键obj及关系类型label唯一标识的关系恢复到指定历史时间点ts的状态,包括如下步骤:

(a)根据主体主键subj、客体主键obj、关系类型label和指定历史时间点ts从大表存储中读取修改时间小于或等于ts且离ts最近的一个版本,如果找到,即表数据库中存在rowkey>=(subj+obj+label+(max_long-ts))的记录,转到步骤(b);如果没有找到,说明在指定时间点表数据库中未存在这个关系,转到步骤(e);

(b)将修改时间小于或等于ts且离ts最近的一个版本记作v1,检测v1中是否包括deleted=true标识,如果包括deleted=true标识,转到步骤(c);如果不包括deleted=true标识,转到步骤(d);

(c)从表数据库中读取修改时间小于ts且离ts第二近的一个版本,将该版本记作v2,从v2版本读取所有属性值覆盖到图存储中,并设置图存储中的实体记录deleted=true,在大表存储中通过范围查询遍历把v1版本之后的更新版本删除;

(d)将v1版本的属性值读出来覆盖到图存储中,在大表存储中通过范围查询遍历把v1版本之后的更新版本删除;

(e)以大表存储的前缀查询方式找出subj+obj+label对应的所有历史版本清除,然后将图存储中的关系记录完全清除。

在本发明的一实施例中,当所述第二数据库中存在一个或多个所述实体或所述关系的错误的版本记录时,所述方法还包括:

获取错误的版本记录对应的时间范围;

遍历第二数据库中所述实体或所述关系的所有版本的时间戳,删除时间戳在所述对应的时间范围内的版本记录。

对于中间位置的历史版本存在错误数据的情况,比如总共有三个数据版本v1、v2、v3,其中v2版本存在错误的数据,同样要清除错误数据的版本,以免系统在查询历史版本过程中返回不正确的数据。

删除错误的实体版本的恢复步骤为:

指定有错误数据的历史版本时间范围[t1,t2],根据实体key通过大表存储的范围查询(rangescan)找到满足rowkey>=(key+(max_long-t2))且rowkey<=(key+(max_long-t1))的实体历史版本,遍历删除找到的历史版本记录,此过程并不需要修改图存储中的内容;

删除错误的关系版本的恢复步骤为:

指定有错误数据的历史版本时间范围[t1,t2],根据关系唯一标识subj+obj+label通过大表存储的范围查询(rangescan)找到满足rowkey>=(subj+obj+label+(max_long-t2))且rowkey<=(subj+obj+label+(max_long-t1))的关系历史版本,遍历删除找到的历史版本记录。

如图2所示,本发明实施例还提供了一种知识图谱的数据恢复方法,包括如下步骤:

步骤201:获取待恢复数据的时间戳,检测第四数据库中所述待恢复数据是否包含在所述时间戳及所述时间戳之前的版本记录;

需要说明的是,本发明实施例的第三数据库用于存储最新版本的数据,第四数据库用于存储历史版本的数据,最新版本和历史版本组成所有版本。

在本发明的一实施例中,所述数据为知识图谱数据,所述第一数据库为图数据库,所述第二数据库为表数据库。

在本发明的一实施例中,所述数据包括以下至少之一:实体、关系、实体或者关系关联的属性;

如表1所示,实体通过key进行标识,实体关联的属性包括一个或多个键值对;如表2所示,关系通过关系的两个端点实体的主键及关系的类型进行标识,关系关联的属性包括一个或多个键值对;

在所述第四数据库中,如表3所示,一个实体的版本记录由实体的主键和第四时间戳进行标识,如表4所示,一个关系的版本记录由关系的两个端点实体的主键、关系的类型和第四时间戳进行标识;

对于进入本申请的知识图谱系统的新的实体或关系数据,在内部处理时均被赋予一个历史版本时间戳ts,如果已指定使用实体/关系的一个属性作为该时间戳的来源则直接使用,如果没有指定则使用当前系统时间戳。删除实体/关系操作等同于增加一个deleted=true的历史版本。

当增加一个新的实体或关系的版本记录时,如果发现该实体或关系的版本记录已存在但是增加的版本记录的时间戳与现有的版本记录的时间戳均不相同,则将图数据库中的记录读出并写入表数据库中,然后往图数据库中覆盖写入所述增加的版本记录的内容,记录lastmodifiedtime=ts;如果不存在该实体或关系的版本记录,则往图数据库中写入所述增加的版本内容,记录lastmodifiedtime=ts;如果第一数据库或第二数据库已包含该实体或关系的版本记录且增加的时间戳与现有的某个时间戳相同,则根据所述时间戳更新所述第一数据库或第二数据库中对应时间戳的版本记录。

在本发明的一实施例中,所述第一数据库存储的所述实体或关系的版本记录,包括所述实体或所述关系的所有属性值及所述删除标识;

所述第二数据库存储的所述实体或关系的版本记录包括删除版本和非删除版本,其中,删除版本只包括所述删除标识;非删除版本包括所述实体或所述关系的所有属性值。

步骤202:如果包括在所述时间戳及所述时间戳之前的版本记录,则使用所述版本记录的数据,替换第三数据库中的所述待恢复数据,并删除第四数据库中用于替换所述第三数据库中的待恢复数据的版本记录及在所述时间戳之后的所有版本,其中,所述第三数据库用于存储最新版本的数据,所述第四数据库用于存储历史版本的数据;

在本发明的一实施例中,所述使用所述版本记录的数据,替换第三数据库中的所述待恢复数据,包括:

检测第一版本记录是否包含预设的删除标识,其中,第一版本记录为所述第四数据库中所述待恢复数据的时间戳对应的版本记录,或者在所述待恢复数据的时间戳之前且离所述待恢复数据的时间戳最近的版本记录;

如果包含预设的删除标识,则读取第二版本记录,并使用第二版本记录的数据替换所述第三数据库中的所述待恢复数据,并为第三数据库中的所述待恢复数据添加删除标识,其中,当第一版本记录为所述第四数据库中所述待恢复数据的时间戳对应的版本记录时,第二版本记录为所述第四数据库中在所述待恢复数据的时间戳之前且离所述待恢复数据的时间戳最近的版本记录;当第一版本为所述第四数据库中在所述待恢复数据的时间戳之前且离所述待恢复数据的时间戳最近的版本记录时,第二版本记录为所述第四数据库中在所述待恢复数据的时间戳之前且离所述待恢复数据的时间戳第二近的版本记录;

如果不包含预设的删除标识,则使用所述第一版本记录的数据,替换所述第三数据库中的所述待恢复数据。

步骤203:如果不包括在所述时间戳及所述时间戳之前的版本记录,则删除第三数据库和第四数据库中所述待恢复数据的所有版本记录。

在本发明的一实施例中,将主键为key的实体恢复到指定历史时间点ts的状态,包括如下步骤:

(1)根据key和ts从表数据库中读取修改时间小于或等于ts且离ts最近的一个版本,如果找到,即表数据库中存在rowkey>=(key+(max_long-ts))的记录,转到步骤(2);如果没有找到,说明在指定时间点表数据库中未存在这个实体,转到步骤(5);

(2)将修改时间小于或等于ts且离ts最近的一个版本记作v1,检测v1中是否包括deleted=true标识,如果包括deleted=true标识,转到步骤(3);如果不包括deleted=true标识,转到步骤(4);

(3)从表数据库中读取修改时间小于ts且离ts第二近的一个版本,将该版本记作v2,从v2版本读取所有属性值覆盖到图存储中,并设置图存储中的实体记录deleted=true,在大表存储中通过范围查询遍历把v1版本及v1版本之后的更新版本删除;

(4)将v1版本的属性值读出来覆盖到图存储中,在大表存储中通过范围查询遍历把v1版本及v1版本之后的更新版本删除;

(5)以大表存储的前缀查询(prefixscan)方式找出key对应的所有历史版本并清除;从图存储中把实体相关的所有关系数据查询出来,遍历每一条关系记录,根据关系的subj+obj+label在大表存储中通过前缀查询找出所有的历史版本并清除,最后把图存储中的以上关系数据和实体数据清除。

在本发明的一实施例中,将由主体主键subj、客体主键obj及关系类型label唯一标识的关系恢复到指定历史时间点ts的状态,包括如下步骤:

(a)根据主体主键subj、客体主键obj、关系类型label和指定历史时间点ts从大表存储中读取修改时间小于或等于ts且离ts最近的一个版本,如果找到,即表数据库中存在rowkey>=(subj+obj+label+(max_long-ts))的记录,转到步骤(b);如果没有找到,说明在指定时间点表数据库中未存在这个关系,转到步骤(e);

(b)将修改时间小于或等于ts且离ts最近的一个版本记作v1,检测v1中是否包括deleted=true标识,如果包括deleted=true标识,转到步骤(c);如果不包括deleted=true标识,转到步骤(d);

(c)从表数据库中读取修改时间小于ts且离ts第二近的一个版本,将该版本记作v2,从v2版本读取所有属性值覆盖到图存储中,并设置图存储中的实体记录deleted=true,在大表存储中通过范围查询遍历把v1版本及v1版本之后的更新版本删除;

(d)将v1版本的属性值读出来覆盖到图存储中,在大表存储中通过范围查询遍历把v1版本及v1版本之后的更新版本删除;

(e)以大表存储的前缀查询方式找出subj+obj+label对应的所有历史版本清除,然后将图存储中的关系记录完全清除。

在本发明的一实施例中,当所述第四数据库中存在一个或多个所述实体或所述关系的错误的版本记录时,所述方法还包括:

获取错误的版本记录对应的时间范围;

遍历第四数据库中所述实体或所述关系的所有版本的时间戳,删除时间戳在所述对应的时间范围内的版本记录。

对于中间位置的历史版本存在错误数据的情况,比如总共有三个数据版本v1、v2、v3,其中v2版本存在错误的数据,同样要清除错误数据的版本,以免系统在查询历史版本过程中返回不正确的数据。

删除错误的实体版本的恢复步骤为:

指定有错误数据的历史版本时间范围[t1,t2],根据实体key通过大表存储的范围查询(rangescan)找到满足rowkey>=(key+(max_long-t2))且rowkey<=(key+(max_long-t1))的实体历史版本,遍历删除找到的历史版本记录,此过程并不需要修改图存储中的内容;

删除错误的关系版本的恢复步骤为:

指定有错误数据的历史版本时间范围[t1,t2],根据关系唯一标识subj+obj+label通过大表存储的范围查询(rangescan)找到满足rowkey>=(subj+obj+label+(max_long-t2))且rowkey<=(subj+obj+label+(max_long-t1))的关系历史版本,遍历删除找到的历史版本记录。

本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如以上任一项所述的数据恢复方法的步骤。

本发明实施例还提供了一种知识图谱的数据恢复装置,包括处理器及存储器,其中:所述处理器用于执行存储器中存储的程序,以实现如以上任一项所述的数据恢复方法的步骤。

如图3所示,本发明实施例还提供了一种数据恢复装置,包括第一检测模块301和第一处理模块302,其中:

第一检测模块301,用于获取待恢复数据的时间戳,检测第二数据库中所述待恢复数据是否包含在所述时间戳及所述时间戳之前的版本记录,如果包括在所述时间戳及所述时间戳之前的版本记录,则发送第一通知至第一处理模块302;如果不包括在所述时间戳及所述时间戳之前的版本记录,则发送第二通知至第一处理模块302;

第一处理模块302,用于接收到第一通知,使用所述版本记录的数据,替换第一数据库中的所述待恢复数据,并删除第二数据库中所述待恢复数据在所述时间戳之后的所有版本,其中,所述第一数据库用于存储最新版本的数据,所述第二数据库用于存储所有版本的数据;接收到第二通知,删除第一数据库和第二数据库中所述待恢复数据的所有版本记录。

在本发明的一实施例中,所述数据为知识图谱数据,所述第一数据库为图数据库,所述第二数据库为表数据库。

在本发明的一实施例中,所述数据包括以下至少之一:实体、关系、实体或者关系关联的属性;

如表1所示,实体通过key进行标识,实体关联的属性包括一个或多个键值对;如表2所示,关系通过关系的两个端点实体的主键及关系的类型进行标识,关系关联的属性包括一个或多个键值对;

在所述第二数据库中,如表3所示,一个实体的版本记录由实体的主键和第二时间戳进行标识,如表4所示,一个关系的版本记录由关系的两个端点实体的主键、关系的类型和第二时间戳进行标识。

对于进入本申请的知识图谱系统的新的实体或关系数据,在内部处理时均被赋予一个历史版本时间戳ts,如果已指定使用实体/关系的一个属性作为该时间戳的来源则直接使用,如果没有指定则使用当前系统时间戳。删除实体/关系操作等同于增加一个deleted=true的历史版本。

当增加一个新的实体或关系的版本记录时,如果该实体或关系的版本记录在第一数据库中或第二数据库已存在且增加的版本记录的时间戳与现有的某个版本记录的时间戳相同,则根据所述时间戳更新所述第一数据库或第二数据库中对应时间戳的版本记录;如果该实体或关系的版本记录已存在但是增加的版本记录的时间戳与现有的版本记录的时间戳均不相同,则往图数据库中覆盖写入所述增加的版本记录的内容,记录lastmodifiedtime=ts,同时按照以上介绍的存储格式往表数据库中添加一条历史版本记录;如果不存在该实体或关系的版本记录,则往图数据库中写入所述增加的版本记录的内容,记录lastmodifiedtime=ts,同时按照以上介绍的存储格式往表数据库中添加一条历史版本记录。

在本发明的一实施例中,所述第一数据库存储的所述实体或关系的版本记录,包括所述实体或所述关系的所有属性值及所述删除标识;

所述第二数据库存储的所述实体或关系的版本记录包括删除版本和非删除版本,其中,删除版本只包括所述删除标识;非删除版本包括所述实体或所述关系的所有属性值。

在本发明的一实施例中,所述第一处理模块302的使用所述版本记录的数据,替换第一数据库中所述待恢复数据,包括:

检测第一版本记录是否包含预设的删除标识,其中,第一版本记录为所述第二数据库中所述待恢复数据的时间戳对应的版本记录,或者在所述待恢复数据的时间戳之前且离所述待恢复数据的时间戳最近的版本记录;

如果包含预设的删除标识,则读取第二版本记录,并使用第二版本记录的数据替换所述第一数据库中的所述待恢复数据,并为第一数据库中的所述待恢复数据添加删除标识,其中,当第一版本记录为所述第二数据库中所述待恢复数据的时间戳对应的版本记录时,第二版本记录为所述第二数据库中在所述待恢复数据的时间戳之前且离所述待恢复数据的时间戳最近的版本记录;当第一版本为所述第二数据库中在所述待恢复数据的时间戳之前且离所述待恢复数据的时间戳最近的版本记录时,第二版本记录为所述第二数据库中在所述待恢复数据的时间戳之前且离所述待恢复数据的时间戳第二近的版本记录;

如果不包含预设的删除标识,则使用所述第一版本记录的数据,替换所述第一数据库中的所述待恢复数据。

在本发明的一实施例中,当所述第二数据库中存在一个或多个所述实体或所述关系的错误的版本记录时,所述第一处理模块302还用于:获取错误的版本记录对应的时间范围;遍历第二数据库中所述实体或所述关系的所有版本的时间戳,删除时间戳在所述对应的时间范围内的版本记录。

如图4所示,本发明实施例还提供了一种数据恢复装置,包括第二检测模块401和第二处理模块402,其中:

第二检测模块401,用于获取待恢复数据的时间戳,检测第四数据库中所述待恢复数据是否包含在所述时间戳及所述时间戳之前的版本记录,如果包括在所述时间戳及所述时间戳之前的版本记录,则发送第一通知至第二处理模块402;如果不包括在所述时间戳及所述时间戳之前的版本记录,则发送第二通知至第二处理模块402;

第二处理模块402,用于接收到第一通知,使用所述版本记录的数据,替换第三数据库中的所述待恢复数据,并删除第四数据库中用于替换所述第三数据库中的待恢复数据的版本记录及在所述时间戳之后的所有版本,其中,所述第三数据库用于存储最新版本的数据,所述第四数据库用于存储历史版本的数据;接收到第二通知,删除第三数据库和第四数据库中所述待恢复数据的所有版本记录。

在本发明的一实施例中,所述数据为知识图谱数据,所述第三数据库为图数据库,所述第四数据库为表数据库。

在本发明的一实施例中,所述数据包括以下至少之一:实体、关系、实体或者关系关联的属性;

如表1所示,实体通过key进行标识,实体关联的属性包括一个或多个键值对;如表2所示,关系通过关系的两个端点实体的主键及关系的类型进行标识,关系关联的属性包括一个或多个键值对;

在所述第四数据库中,如表3所示,一个实体的版本记录由实体的主键和第四时间戳进行标识,如表4所示,一个关系的版本记录由关系的两个端点实体的主键、关系的类型和第四时间戳进行标识。

对于进入本申请的知识图谱系统的新的实体或关系数据,在内部处理时均被赋予一个历史版本时间戳ts,如果已指定使用实体/关系的一个属性作为该时间戳的来源则直接使用,如果没有指定则使用当前系统时间戳。删除实体/关系操作等同于增加一个deleted=true的历史版本记录。

当增加一个新的实体或关系的版本记录时,如果该实体或关系的版本记录在第三数据库中或第四数据库已存在且增加的时间戳与现有的某个时间戳相同,则根据所述时间戳更新所述第三数据库或第四数据库中对应时间戳的版本记录;如果该实体或关系的版本记录已存在但是增加的版本记录的时间戳与现有的版本记录的时间戳均不相同,则将图数据库中的版本记录读出并写入表数据库中,然后往图数据库中覆盖写入所述增加的版本记录的内容,记录lastmodifiedtime=ts;如果不存在该实体或关系的版本记录,则往图数据库中写入所述增加的版本记录的内容,记录lastmodifiedtime=ts。

在本发明的一实施例中,所述第三数据库存储的所述实体或关系的版本记录,包括所述实体或所述关系的所有属性值及所述删除标识;

所述第四数据库存储的所述实体或关系的版本记录包括删除版本和非删除版本,其中,删除版本只包括所述删除标识,非删除版本包括所述实体或所述关系的所有属性值。

在本发明的一实施例中,当所述第四数据库中存在一个或多个所述实体或所述关系的错误的版本记录时,所述第二处理模块402还用于:获取错误的版本记录对应的时间范围;遍历第四数据库中所述实体或所述关系的所有版本的时间戳,删除时间戳在所述对应的时间范围内的版本记录。

示例性地,假设当前图数据库、表数据库中未存储任何数据,在t1时刻,写入两个实体、一个关系,存储的数据状态如表5、表6、表7和表8所示:

表5

表6

表7

表8

假设在t2时刻,将key1对应实体的k1属性值修改为v1’,将关系的k5属性值修改为v5’,则数据存储状态变为:

表9

表10

表11

表12

假设在t3时刻删除了key2实体,则数据存储状态变为:

表13

表14

表15

表16

假设此时发现t2和t3时刻的修改内容是错误的,提供key1、key2、label和t1作为输入,此时从大表存储中读取(key1,t1)的实体历史版本覆盖到图存储,读取(key2,t1)的实体历史版本覆盖到图存储,读取(key1,key2,label,t1)的关系历史版本覆盖到图存储,并清除t1时间之后的实体、关系历史版本,于是回到第1步后的存储状态(即表5、表6、表7和表8的状态)。

本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请不限制于任何特定形式的硬件和软件的结合。

以上仅为本申请的优选实施例,当然,本申请还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本申请所附的权利要求的保护范围。

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