一种数据一致性检测方法与流程

专利2022-06-29  80


本发明涉及一种数据一致性检测方法,用于分布式数据库和分布式数据交换过程中的数据一致性检测,能有效提升数据质量,属于计算机应用领域。



背景技术:

数据质量一直是数据处理的关键之一,在数据分析过程中数据的预处理和质量保证工作会占用较大比例的工作量,因为数据质量直接影响到后续数据分析的效果。传统的数据库设计遵循三大范式对数据质量和数据之间的关联有较强的约束,但随着数据量的增加,为了提升数据处理效率增加了冗余性,而有些时候为了减少外键约束对查询性能的影响逐渐放开强制的外键约束关系,这些情况都会导致数据不一致情况的增加。而随着分布式数据库、分布式数据仓库和大数据等技术的发展,分布式系统之间数据交换工作量大大增加,大量的数据交换、数据清洗和预处理等操作都会导致数据质量问题的增多。nosql非关系型数据库和列存储数据库在提升相应性能的同时也减弱了数据之间的关联和约束。所以,这些数据操作都很容易导致数据质量问题的出现,尤其是数据之间的关联性和一致性问题很容易出现又很难发现。

现有对数据质量问题的研究主要集中在对表字段的检查和处理方面,多采用基于规则和正则表达式的方式检查字段是否符合规定的要求,对存在的质量问题研究相应的修正方法。对数据库表和字段之间关联性方面主要依靠外键关系进行检查。但是,现有的方法对数据之间关联关系的分析和检测还是不够,主要表现在二个方面,一是如果仅仅采用基于外键关联关系进行检测很可能不够全面,因为现在很多数据库设计为了提升性能而减少了对数据关联关系的强制约束,采用隐性关联关系,从数据库本身很难发现数据之间的关联性。第二,数据之间一般存在多个级别关联关系,表之间的关联一般涉及多个表多个层次的关联,并且数据之间关联是有方向和依赖关系的,数据的写入是存在先后关系的,数据之间关联关系的检查需要考虑隐性关联和依赖性逐级深入进行,所以需要一种能够完整描述数据之间全局关联关系的检测方法来实现数据之间的一致性检测。



技术实现要素:

针对现有技术中存在的技术问题,本发明的目的在于提供一种数据一致性的检测方法,用于分布式数据存储和分布式数据交换过程中数据的一致性检测,通过本方法能够实现数据之间关联关系和一致性的准确描述和定义,以及数据链接完整性、数据依赖性和批量数据一致性的检测,从而能够准确发现和定位数据之间的一致性问题,有效提升数据质量。

本发明的技术方案为:

一种数据一致性检测方法,其步骤包括:

1)根据分布式数据库或者不同数据源之间数据的关联关系和一致性约束条件,构建用于一致性检测的数据关系模型图;其中,所述数据关系模型图包括数据实体节点dataentitynode、分类标签classifylabel、节点一致性检测规则detectionrule和数据实体链接关系relationship;构建所述数据关系模型图的方法为:首先对待检测数据从业务和数据交互角度抽象出一系列的数据实体节点dataentitynode,并为每一个数据实体节点指定一个分类标签classifylabel;然后根据各数据实体节点之间的关联关系或依赖关系,构建数据实体节点之间的数据实体链接关系relationship;所述数据实体节点dataentitynode上设置用于数据实体节点一致性检测的规则detectionrule,所述数据实体链接关系relationship上设置用于两个数据实体节点之间链接一致性检测的链接规则relationrule;

2)基于所述数据关系模型图对所述分布式数据库进行数据交换时或者所述不同数据源之间进行数据交换时,对交换数据进行一致性检测。

进一步的,所述数据实体链接关系relationship具有方向性,方向性用于区分数据之间的引用关系、依赖关系以及数据写入的先后顺序关系。

进一步的,所述一致性检测包括数据链接完整性检测,其方法为:首先从需要进行完整性检测的数据实体节点开始,按照所述数据关系模型图的数据实体链接关系relationship遍历所有数据实体节点dataentitynode,从数据关系模型图中依次检索得到所有的实体链接关系relationship和数据实体节点dataentitynode;然后通过实体链接关系relationship里的链接规则relationrule检测所链接的数据实体节点是否存在问题。

进一步的,所述一致性检测规则detectionrule包括若干个规则drule,所述规则drule用于定义当前数据实体节点内所包含数据的一致性约束。

进一步的,所述一致性检测包括数据依赖性检测,其方法为:首先是从数据关系模型图中按照链接箭头方向查询得到出当前待检测数据所依赖的数据实体节点和数据实体链接关系,作为一级数据实体节点dataentitynode1和一级数据实体链接关系relationship1;然后按照一级数据实体链接关系relationship1中的链接规则relationrule1检测一级数据实体节点dataentitynode1是否存在问题;然后检索每个一级数据实体节点dataentitynode1所依赖的数据实体节点和数据实体链接关系作为二级数据实体节点dataentitynode2和二级数据实体链接关系relationship2,并按照二级数据实体链接关系relationship2中的链接规则relationrule2检测二级数据实体节点是否存在问题;以此类推,逐级执行所有层次依赖节点的检测,直到再没有依赖节点为止。

进一步的,所述数据实体链接关系relationship包含若干个链接规则relationrule,所述链接规则relationrule包括若干个规则lrule,所述规则lrule用于定义数据之间的关联关系。

进一步的,所述关联关系包括隐性关联关系、数据表达式、数据聚合关联关系、数据库外键关联关系;其中,隐性关联关系是指没有外键约束的两个数据之间存在的引用关系;数据表达式是指用于将多种数据经过设定表达式计算之后生成新的数据,该设定表达式所涉及的数据之间具有关联关系;数据聚合是指多个数据合并为一个数据。

进一步的,所述一致性检测包括批量数据检测,其方法为:设起始数据实体节点具有n条数据,先读取起始数据实体节点的数据,通过节点一致性检测规则detectionrule检测每条数据i本身是否存在一致性问题;然后对该条数据i所链接的数据实体节点和数据实体链接关系,作为一级数据实体节点dataentitynode1和一级数据实体链接关系relationship1;然后按照一级数据实体链接关系relationship1中的链接规则relationrule1检测一级数据实体节点dataentitynode1是否存在问题;如果一级数据实体节点a包含若干条数据,则先从第一条数据开始执行节点一致性检测规则detectionrule和数据实体链接规则relationrule;然后对该一级数据实体节点a所链接的每一个数据实体节点作为二级数据实体节点,根据数据实体链接规则relationrule对该一级数据实体节点a与各二级数据实体节点进行一致性检测;如此循环,直到不再有下级链接数据实体节点;然后再对该条数据i所有关联节点所包含数据进行一致性检测。

进一步的,所述分类标签classifylabel用于对数据实体节点dataentitynode进行按类分组,区分不同类型数据实体。

进一步的,根据节点包含内容对节点进行分类并为每一个节点指定一个分类标签classifylabel。

一种数据一致性检测方法,其步骤为:

1.分析分布式数据库或者不同数据源之间数据的关联关系和一致性约束条件,构建用于一致性检测的数据关系模型图,具体的构建方法如下:

所述的用于数据一致性检测的数据关系模型图由数据实体节点dataentitynode、分类标签classifylabel、节点一致性检测规则detectionrule、数据实体链接关系relationship组成。首先,分析所要进行一致性检测的数据(即数据交换过程中的数据),对待检测数据从业务和数据交互角度抽象出一系列的数据实体节点dataentitynode,根据节点包含内容对节点进行分类并为每一个节点指定一个分类标签classifylabel;然后分析这些数据实体节点之间的关联关系或依赖关系,构建数据实体链接关系relationship。数据的一致性检测是通过数据实体节点dataentitynode和数据实体链接关系relationship来完成的,其中,数据实体节点dataentitynode里包含用于数据实体节点一致性检测的规则detectionrule,数据实体链接关系relationship里包含用于两个数据实体之间链接一致性检测的链接规则relationrule。数据关系模型图的建模和存储采用图数据库,方便进行可视化的展示,而且检索效率高。

所述的数据实体节点dataentitynode是用于存储待检测数据交互关系的主体,一个数据关系模型图包含多个数据实体节点以及节点之间的数据实体链接关系。每个数据实体节点具有一个节点分类标签classifylabel用于定义该节点的类型。数据实体节点dataentitynode的定义如下:

dataentitynode:classifylabel{nodename:‘nodename’,detectionrule1:’drule1’,detectionrule2:’drule2’,…}

数据实体节点dataentitynode的定义包含分类标签classifylabel、数据实体名称nodename和节点一致性检测规则detectionrule。其中分类标签classifylabel用于对节点进行分类分组,区分不同类型数据实体,并且通过索引可以加速在图中检索速度。节点一致性检测规则detectionrule用于节点本身所包含数据的一致性检测,一个数据实体节点dataentitynode根据所检测数据内容的不同可包含若干个数据一致性检测规则detectionrule,每一个节点一致性检测规则detectionrule由一1到n个规则drule组成,每个规则drule采用sql脚本的方式进行定义,用于定义当前数据实体节点内所包含数据的一致性约束,例如:当前数据与源数据是否一致,当前数据字典的引用是否正确,以及还可用于数据格式的定义、数据完整性定义等。

所述的数据实体链接关系relationship由链接名称和链接规则relationrule组成,用于定义两个数据实体节点之间的链接约束关系。数据实体之间的链接关系包括不带直接约束的隐性关联、数据表达式、数据聚合、数据库外键等关联关系。数据关系模型图中的数据实体节点之间具有1到n层的链接关系relationship,数据实体链接关系relationship具有方向性,方向性用于区分数据之间的引用关系、依赖关系以及数据写入的先后顺序关系,例如:交易信息里需要产品信息,如果产品信息不全那么交易信息就会出问题,因此交易是依赖于产品的,没有产品就没有交易,当数据同步的时候先同步交易数据,后同步产品数据就可能产生数据之间关联方面的错误。数据实体链接关系relationship的定义如下:

(dataentitynode1)–[:relationship1{relationrule1:’lrule1’,relationrule1:’lrule2’,…}]->(dataentitynode2)。

上述定义的有方向链接关系中数据实体节点dataentitynode1将依赖于数据实体节点dataentitynode2中的部分数据,需要dataentitynode2的相关数据具备后才能与dataentitynode1产生关联,即需要先写入dataentitynode2所包含的数据之后才能进行dataentitynode1的写入。

其中,链接关系relationship可能包含若干个链接规则relationrule,链接规则relationrule用于定义数据实体节点之间关联和依赖关系的一致性检测脚本,链接规则relationrule由个规则lrule组成,每个规则lrule采用sql脚本的方式进行定义,用于定义数据之间的隐性关联、数据表达式、数据聚合、数据库外键等数据实体之间的关联关系。隐性关联指两个数据之间存在引用关系,但是为了提升性能没有直接定义外键约束;数据表达式指几种数据经过表达式计算之后生成新的数据,该数据表达式所涉及的数据之间具有关联关系;数据聚合指多个数据合并为一个数据。这些关联关系可以表现为数据库、表、字段之间的一种计算关系,都可以通过sql脚本进行定义。

进一步地,上述所述的数据关系模型图可以采用可视化的方式进行建模、修改和调试,有助于准确描述和分析数据实体节点和数据实体链接关系。

2.本发明所述的数据一致性检测方法包括数据链接完整性检测、数据依赖性检测和批量数据一致性检测,具体的检测流程如下:

所述的数据链接完整性检测可检测与某一条数据存在若干级链接关系relationship的所有数据实体节点是否存在,通过以数据关系模型图为基础的链接完整性检测可以准确发现缺失的数据实体节点并给出提示以便进行修正,可解决链接数据缺失对统计分析结果的影响以及避免数据库产生垃圾数据。具体的检测方法是从需要进行完整性检测的数据实体节点开始,按照数据关系模型图的数据实体链接关系relationship采用先广度后深度的方式遍历所有节点,采用图数据库的操作方法,从数据关系模型图中依次检索得到所有的数据实体链接关系和数据实体节点。然后通过链接关系relationship里的链接规则relationrule来检测所链接的数据实体节点是否存在问题,具体的检测方法是,执行链接规则relationrule所包含的sql脚本,由于规则本身是采用sql脚本定义的待检测数据库、表、字段之间的一种表达式关系,所以执行sql脚本的过程即是对脚本所包含的待检测数据执行完整性检测的过程,脚本通过即为不存在问题,不通过即为存在问题。依次执行所有的链接关系,直到所有链接的数据实体节点都进行了完整性检测,检测过程中对于存在问题的数据以及原因采用后续所述的一致性检测结果的记录方法来进行处理。

所述的数据依赖性检测用于检测某条数据所依赖的其他数据实体节点是否存在。基于数据关系模型图来表示数据之间以及不同表的字段之间的链接关系,链接双方定义为有依赖和被依赖的关系,在数据关系模型图中通过箭头的方向来标识依赖关系。利用数据关系模型图来实现多个数据之间相互依赖以及多个深度层次的依赖关系的定义。所以,通过以数据关系模型图为基础的依赖性检测能发现当前数据所依赖的其他数据是否已经存在,可用于数据存储前的数据依赖关系检测,避免强行写入数据导致数据之间关系的不一致。具体的数据依赖性检测方法:首先是从数据关系模型图中按照链接箭头方向按照图数据库操作方法(dataentitynode)-[relationship1]->(dataentitynode1)查询得到出当前数据实体节点所依赖的1到n个一级数据实体节点dataentitynode1和链接关系relationship1,然后按照链接规则relationrule1检测这些依赖的一级数据实体节点是否存在问题。具体的检测方法是,执行链接规则relationrule1所包含的sql脚本,把sql脚本所定义的待检测数据库、表、字段之间的表达式关系进行验证,通过即为不存在问题,不通过即为存在问题。然后从1到n个一级依赖节点开始,采用循环的方式,按照链接箭头方向(dataentitynode1)-[relationship2]->(dataentitynode2)检索每个一级数据实体节点dataentitynode1所依赖的1到m个二级数据实体节点dataentitynode2和链接关系relationship2,按照链接规则relationrule2检测所依赖的二级数据实体节点是否存在问题,直到n个一级节点循环检测完成。以此类推,逐级执行所有层次依赖节点的检测,直到再没有依赖节点为止。检测的过程中对于存在问题的数据以及原因采用后续所述的一致性检测结果的记录方法来进行处理。

所述的批量数据一致性检测用于一批数据、整个数据库或者不同数据源之间数据交换清洗后的数据一致性关系检测,准确发现数据库自身、以及不同数据源之间数据的一致性问题。检测的方法是按照数据关系模型图的链接关系(startdataentitynode)-[relationship1]-(dataentitynode1)-[relationship2]-(dataentitynode2)-[*]-(n)从起始节点开始对待检测数据按照链接关系依次循环执行节点一致性检测规则detectionrule和数据实体链接规则relationrule,遍历所有级别的数据实体节点和数据实体链接关系,执行脚本检测是否存在一致性问题。

进一步,批量数据一致性检测会遍历规则所覆盖的当前数据实体节点的所有数据,采用对当前数据实体节点数据逐条加循环迭代的方式,按照先深度后广度的方式进行检测。假设起始数据实体节点具有n条数据,先读取一条当前起始数据实体节点的数据,通过节点一致性检测规则detectionrule检测这条数据本身是否存在一致性问题之后;然后执行的是当前这条数据所链接的1到n个一级数据实体节点dataentitynode中第一个数据实体节点和数据实体链接的一致性检测;假设第一个一级数据实体节点包含的数据有一个或者多个,先从第一条数据开始执行节点一致性检测规则detectionrule和数据实体链接规则relationrule;然后执行的是第一个一级数据实体节点当前数据所链接的1到m个二级数据实体节点中与第一个二级数据实体节点之间的一致性检测,假设第一个二级节点包含的数据有一个或者多个,和上面的方法一样继续向深度方向进行扩展,直到不再有下级链接数据实体节点之后,再从广度上执行所有关联节点所有包含数据的一致性检测。然后再从起始数据实体节点开始执行起始节点下一条数据以及所链接的各级数据实体节点之间的一致性检测,与上面方法一致,直到起始节点所有数据执行完成。每一条起始节点的数据都对应一个有链接和依赖关系的数据关系网络,如果起始节点有l条数据,那么整个检测过程相当于执行了l个数据关系网络的一致性检测。在整个批量数据的一致性检测过程中,需要记录数据实体节点和数据实体链接关系存在的一致性问题,对于存在问题的数据以及原因采用后续所述的一致性检测结果的记录方法来进行处理。

3.对上述一致性检测结果的记录和展示如下所示:

上面所述的链接完整性检测、数据依赖性检测和批量数据一致性检测过程中某一个环节检测出问题之后,要对问题进行记录,记录的内容包括:标示产生问题的是数据实体节点还是数据实体链接的一致性问题;起始节点到有问题节点之间的链接关系(dataentitynode1)-[*]->(dataentitynoden);出现一致性问题所对应的一致性检测规则detectionrule和数据实体链接规则relationrule;出现问题后节点所对应的数据内容relationdata。将这些信息记录到图数据库中,用于后续对问题的展示和分析。

所述的数据实体节点的一致性问题记录格式如下:

issueentitynode:classifylabel{nodename:’issuenodename’,detectionruleissue1:’dissue1’,detectionruleissue2:’dissue2’,…},其中detectionruleissue是节点一致性问题的记录,一个节点包含若干条问题记录,问题原因和涉及数据的记录格式dissue1如下:

dissue1=[{detectionrulename:’completeness_rule’,relationissue:[{relationdata:’dataentitynodedata01’,issuerecord:’errorrecord01’},…]},{…},…],其中detectionrulename是出现问题对应的一致性检测规则名称,relationissue是出现问题时对具体信息的记录,每一个问题做一个记录,relationdata是出现问题的当前检测规则对应的数据,issuerecord是问题的具体原因。

数据实体链接一致性问题记录格式如下:

(issuedataentitynode1)-[:relationshipissue1{relationruleissue1:’lissue1’,relationruleissue2:’lrule2’,…}]->(issuedataentitynode2),其中relationshipissue是链接名称,relationruleissue是链接一致性问题记录,包含若干条问题记录。

对于问题的原因和涉及数据的具体记录格式如下:

lissue1=[{relationrulename:’completeness_relation_rule’,relationissue:[{startdataentitynodedata:’startdataentitynodedata01’,enddataentitynodedata:’enddataentitynodedata01’,issuerecord:’errorrecord01’},…]},{…},…],其中relationrulename是出现一致性问题的链接规则名称,startdataentitynodedata是链接的起始节点数据,enddataentitynodedata是下一级链接节点数据。存储问题的时候需要记录产生问题的链接规则、产生问题的2个节点当时的数据内容、以及问题的描述issuerecord。

进一步,对于上述的检测结果进行可视化展示,将参考数据关系模型图结构来构建一致性问题数据关系模型图,数据实体分类标签classifylabel不变,数据实体名称变为issuedataentitynode。数据实体的属性和链接的属性将展示一致性问题的内容,即上面定义的数据实体节点的一致性问题和数据实体链接一致性问题记录格式,对于没有问题的数据实体节点和链接属性置为空。存在问题的链接以直线展示的同时,链接属性采用问题的具体记录内容,不存在问题的链接以一条不带属性的直线链接。通过一致性问题数据关系模型图可方便定位问题的原因和出现问题的数据标识。

本发明与现有技术相比的优点在于:

本发明所述的数据关系模型图能够准确描述缺少外键约束的关系型数据库、nosql数据库、分布式数据仓库、不同数据源之间数据的关联和依赖关系,以可视化的方式进行数据一致性关系的展示、一致性建模和分析。

本发明以数据关系模型图为基础实现的数据链接完整性、数据依赖性和批量数据的一致性检测,能有效解决分布式数据存储和分布式数据交换过程中数据不一致、数据链接缺失、数据写入约束失败等数据一致性问题。

本发明以可视化的一致性问题数据关系模型图来展示出现问题的数据实体和链接,以及出现一致性问题的原因和出现问题的数据标识,有利于快速定位和解决问题。

附图说明

图1是本发明中一种数据一致性检测方法的流程图。

图2是本发明中数据一致性检测实例的数据关系模型图。

图3是本发明中数据一致性检测实例的一致性问题数据关系模型图。

具体实施方式

下面将结合附图对本发明做进一步说明。

本发明所述的数据一致性的检测方法,可用于检测分布式数据存储和分布式数据交换过程中数据的一致性,具体的数据一致性检测流程如图1所示,通过分析数据交换和存储过程中数据之间的关联关系和一致性,构建包括数据实体节点、数据实体链接关系、节点检测规则和链接规则在内的数据关系模型图,模型图支持采用图数据库进行持久化。检测方法通过采用sql脚本来描述一致性规则,支持多种类型数据源,检测的过程主要是基于数据实体节点和数据实体链接关系,从数据关系模型图中检索得到一致性检测规则并对检测数据进行检测,支持包括链接完整性检测、依赖性检测、批量一致性检测等多种检测方法,也可以数据关系模型图为基础进行其他检测模式的定义和检测。

下面以产品交易过程中数据的一致性实例来说明本发明的一种数据一致性检测方法的实施步骤和流程。

1.本发明用于一致性检测的数据关系模型图的实现方法如下:

从交易业务和数据交互的角度出发,分析产品交易活动中不同数据实体之间的关联关系、相互依赖关系和一致性约束条件,建立初步的数据实体和链接关系,然后细化数据实体本身的一致性约束和链接的一致性约束,在此基础上以图的方式来构建数据关系模型图。产品交易过程中数据关系模型图如图2所示,这里为了方便描述对交易过程模型进行了适当的精简,分类标签classifylabel主要包括公司company、产品product、产品备案productrecord、产品类别productcategory、检测inspect、交易transaction、交易详情transactiondetails、物流logistics等。每类标签里有若干个数据实体,例如公司company分类标签下有销售商seller、采购商buyer、生产商producer三种类型的数据实体,与数据库的er图不同,这里的数据实体节点从业务角度描述数据的交互关系,公司company分类标签下分为三类或者更多类型的用户,但对于数据库设计来说确是一个数据实体。

数据实体的一致性规则detectionrule由于比较多,这里以交易订单实体order0001来说明一致性规则的设计,order0001数据实体主要有一致性规则consistency_rule、完整性规则completeness_rule、订单号码规则transaction_code_rule等检测规则。其中一致性规则consistency_rule可用于检测本数据库当前表中这条数据与来源库中这条数据的一致性,也可用于检测交易数据实体节点对其他数据实体节点信息的依赖关系。例如一笔交易订单的生成需要销售企业seller的产品入库信息、生产企业producer的产品备案信息、产品的类别信息、检测信息等,只有这些信息完整的话才能写入该条交易数据。这些规则都采用sql脚本来实现。完整性规则completeness_rule用于检测order0001数据实体必填的字段有哪些,订单号码规则transaction_code_rule用于检测交易单号在交易详情里是否有对应信息。

数据实体链接的一致性用于检测数据实体之间的关联和相互依赖的关系,一般数据的写入是有先后和依赖关系的,例如产品需要先备案、登记产品生产信息才能去销售,有交易和产品信息之后才能有物流信息。很多时候数据交换过程不按照依赖关系进行很容易导致数据的不一致和链接的丢失。例如,销售商seller001和订单order0001之间销售商-订单-链接seller_order_relation关系包括销售商代码链接规则seller_code_relation_rule和完整性链接规则completeness_relation_rule二个链接规则,其中销售商代码链接规则seller_code_relation_rule可用于检测当前订单里的销售商代码在company里是否存在。完整性链接规则completeness_relation_rule可用于检测所有的订单信息里是否存在没有进行登记注册的公司。一般在没有强制外键约束的不同数据源间进行数据交换过程中容易产生数据链接方面的一致性问题。

2.本发明所述的数据一致性检测的具体实施方法如下:

数据一致性检测主要包括以数据关系模型图为基础的数据链接完整性检测、数据依赖性检测和批量数据一致性检测,另外,也可以根据需求自定义基于数据关系模型图的数据质量方面的建模和检测。

所述的用于产品交易活动的数据链接完整性检测可检测交易数据之间链接关系是否完整以及是否缺少数据实体节点,首先从上面我们定义的交易过程数据关系模型图中选择一个起始节点,这里以某一个销售商seller001的某一交易订单order0001开始,按照数据实体链接关系来检索以该交易订单order0001开始的所有链接关系,match(order0001:transaction)-[*]-(n)。首先是订单order0001所链接的一级数据实体节点:交易详单order_details0001、销售商seller001、采购商buyer001、物流logistics_0001。通过查询获取订单-详情-链接order_details_relation链接规则并应用于待检测数据,检测当前交易订单信息链接的交易详单信息是否存在问题;通过查询获取销售商-订单-链接seller_order_relation链接规则并应用于待检测数据,检测当前交易信息链接的销售商信息是否存在问题;通过查询获取采购商-订单-链接buyer_order_relation链接规则并应用于待检测数据,检测当前交易信息链接的采购商信息是否存在问题;通过查询获取订单-物流-链接order_logistics_relation链接规则并应用于待检测数据,检测当前交易信息链接的物流信息是否存在问题。然后检索一级节点链接的二级节点,例如(order_details0001)-[order_product_relation]->(product0001),交易详单链接二级节点产品库存信息product0001,通过详情-产品-链接details_product_relation链接规则检测当前交易详单链接的产品库存信息是否存在问题。以此类推按照图的结构先广度后深度检索遍历所有的链接和节点,每检索到一个数据实体链接关系relationship就执行数据实体链接检测规则relationrule检测对应的数据实体节点是否存在问题,直到数据关系模型图里链接的所有数据实体节点都进行了检测。检测过程中如果发现问题就按本发明的一致性问题记录格式把问题记录到图数据库里,例如数据实体问题的记录格式如下:

issuerecord0001:productrecord{nodename:’record0001,detectionruleissue1:[{detectionrulename:’producer_rule’,relationissue:[{relationdata:’product_record_code=1901232010’,issuerecord:’缺少生产商信息’},…]},…],…}

所述的用于产品交易活动的数据依赖性检测可检测某条数据所依赖的其他数据是否存在,如果依赖的数据不存在,那么写入数据会产生错误或者链接丢失。依赖性检测将以交易活动的数据关系模型图为基础,按照依赖的箭头方向进行循环检测。交易活动数据之间的关系一般是层层依赖的,例如:(销售商seller001)<-[销售商-订单-链接seller_order_relation]-(订单order0001)<-订单-详情-链接[order_details_relation]-(详情order_details0001)-[详情-产品-链接details_product_relation]->(产品product0001)-[产品备案-产品-链接product_record_relation]->(备案record0001)-[生产商-产品备案-链接producer_record_relation]->(生产商producer001)。产品的交易订单信息会依赖产品库存信息,产品库存信息会依赖产品备案信息,产品备案信息会依赖生产商信息等。如果产品没有备案就进行交易,那么就没法追溯到产品的生产商信息和生产信息,会导致不能形成完整的追溯链条。

我们从交易详单信息order_details0001开始检测数据的依赖关系,通过链接(详情order_details0001)-[详情-产品-链接details_product_relation]->(产品product0001)可得出交易详单order_details0001依赖于产品库存信息product0001,通过查询获取详情-产品-链接details_product_relation链接规则并应用于待检测数据,检测链接的产品库存信息product0001是否存在问题;接下来以产品库存信息product0001为节点检索和检测下一级依赖关系,通过链接(产品product0001)-[产品备案-产品-链接product_record_relation]->(备案record0001)可得出产品库存信息product0001依赖于产品备案信息record0001,通过查询获取product_record_relation链接规则并应用于待检测数据,检测产品备案信息是否存在问题。以此类推,产品备案信息record0001依赖于生产商producer001信息和产品分类信息category,通过对应规则检测依赖的数据实体节点是否存在问题。检测过程中如果发现问题就按本发明的一致性问题记录格式来记录问题。具体格式如下:

(issueproduct0001)–[:product_record_relation_issue{relationruleissue1:[{relationrulename:’producer_code_relation_rule’,relationissue:[{startdataentitynodedata:’product_code=01232010’,enddataentitynodedata:’product_record_code=null’,issuerecord:’产品01232010缺少备案信息’},…]},…],…}]->(issuerecord0001)

所述的用于产品交易活动的批量数据一致性检测可用于检测一批数据的一致性问题,这里以检测某一销售商seller001一段时间内的所有交易数据的一致性为例来说明本发明如何实施的。在数据关系模型图中以销售商为起点按照数据链接关系(seller001:company{name:’seller001’})-[*]-(n)查找所有关联的数据实体节点和数据实体节点链接,

首先检索销售商seller001链接的一级数据实体节点交易订单order0001,按照(销售商seller001)<-[销售商-订单-链接seller_order_relation]-(订单order0001)链接关系,首先查询获取销售商seller001和订单order0001之间的链接检测规则seller_order_relation并应用于待检测的交易订单数据,检测销售商seller001和订单order0001二个数据实体节点之间的链接是否存在问题。然后根据检索条件得到当前销售商的n个交易订单order0001数据,并分别对每一个交易订单order0001数据执行更深级别的链接检测,具体的操作是选取一条交易数据,对这条订单数据按照节点一致性检测规则里的一致性规则consistency_rule、完整性规则completeness_rule、订单号码规则transaction_code_rule等规则进行节点一致性检测,然后按照(订单order0001)<-[订单-详情-链接order_details_relation]-(详情order_details0001)检索该订单数据对应的二级数据实体节点交易详情order_details0001数据,在检测的过程中二级、三级等更深级别的数据实体节点里一般也同样包含多条数据,仍然需要采用循环迭代的方式遍历所有数据。对二级数据实体节点交易详情order_details0001的检测,首先执行链接检测规则订单-详情-链接order_details_relation里包含的订单号码链接规则transaction_code_relation_rule,然后再执行数据实体节点详情order_details0001里包含的一致性规则completeness_rule、订单号码规则transaction_code_rule、产品代码规则product_code_rule、价格规则price_rule等检测链接和数据实体节点是否存在问题。以此类推直到把所有链接关系和数据实体节点都执行了一致性检测,然后再读取另一条交易数据执行上述的检测流程,直到对销售商seller001的交易图里的数据和链接都进行了检测为止。检测过程中如果发现问题就按本发明的一致性问题记录格式来记录问题。按照上述方法可以把销售商的所有交易信息按照数据关联模型图定义的链接方式进行完整的一致性检测,能够方便的发现和定位数据的不一致问题。

3.对数据一致性检测结果的记录和展示的实施方法如下:

所述的用于产品交易活动的交易数据一致性检测结果的记录采用图数据库进行存储,对于问题的具体记录格式在前面的实施中进行了举例,这里只说明对一致性结果的展示方法,以数据关系模型图的链接结构为基础进行可视化展示,具体的用于产品交易活动的一致性检测结果图如3所示,数据实体的属性将记录一致性检测的结果,例如订单一致性问题的数据实体节点issueorder属性包括检测规则问题detectionruleissue1和检测规则问题detectionruleissue2用于记录完整性、依赖性和一致性方面的问题,对于没有问题的数据实体节点属性置为空。检测结果数据实体之间的链接关系与数据实体关系模型图保持一致,并记录链接方面的一致性问题,例如(详情一致性问题issue_order_details)-[详情-产品-链接问题details_product_relation_issue]->(产品一致性问题issueproduct)两个实体之间的详情-产品-链接问题记录了链接规则问题1和链接规则问题2,用于描述产品代码关联方面的问题等。对于不存在问题的链接以一条不带属性的直线链接方面进行关系的查看。通过可视化的一致性问题数据关系模型图可更直观展示和定位一致性问题。

本发明未详细阐述部分属于本领域公知技术。

以上对本发明所述的数据一致性检测方法进行了详细的说明,但显然本发明的具体实现形式并不局限于此。对于本技术领域的一般技术人员来说,在不背离本发明所述方法的精神和权利要求范围的情况下对它进行的各种显而易见的改变都在本发明的保护范围之内。


技术特征:

1.一种数据一致性检测方法,其步骤包括:

1)根据分布式数据库或者不同数据源之间数据的关联关系和一致性约束条件,构建用于一致性检测的数据关系模型图;其中,所述数据关系模型图包括数据实体节点dataentitynode、分类标签classifylabel、节点一致性检测规则detectionrule和数据实体链接关系relationship;构建所述数据关系模型图的方法为:首先对待检测数据从业务和数据交互角度抽象出一系列的数据实体节点dataentitynode,并为每一个数据实体节点指定一个分类标签classifylabel;然后根据各数据实体节点之间的关联关系或依赖关系,构建数据实体节点之间的数据实体链接关系relationship;所述数据实体节点dataentitynode上设置用于数据实体节点一致性检测的规则detectionrule,所述数据实体链接关系relationship上设置用于两个数据实体节点之间链接一致性检测的链接规则relationrule;

2)基于所述数据关系模型图对所述分布式数据库进行数据交换时或者所述不同数据源之间进行数据交换时,对交换数据进行一致性检测。

2.如权利要求1所述的方法,其特征在于,所述数据实体链接关系relationship具有方向性,方向性用于区分数据之间的引用关系、依赖关系以及数据写入的先后顺序关系。

3.如权利要求1或2所述的方法,其特征在于,所述一致性检测包括数据链接完整性检测,其方法为:首先从需要进行完整性检测的数据实体节点开始,按照所述数据关系模型图的数据实体链接关系relationship遍历所有数据实体节点dataentitynode,从数据关系模型图中依次检索得到所有的实体链接关系relationship和数据实体节点dataentitynode;然后通过实体链接关系relationship里的链接规则relationrule检测所链接的数据实体节点是否存在问题。

4.如权利要求3所述的方法,其特征在于,所述一致性检测规则detectionrule包括若干个规则drule,所述规则drule用于定义当前数据实体节点内所包含数据的一致性约束。

5.如权利要求1或2所述的方法,其特征在于,所述一致性检测包括数据依赖性检测,其方法为:首先是从数据关系模型图中按照链接箭头方向查询得到出当前待检测数据所依赖的数据实体节点和数据实体链接关系,作为一级数据实体节点dataentitynode1和一级数据实体链接关系relationship1;然后按照一级数据实体链接关系relationship1中的链接规则relationrule1检测一级数据实体节点dataentitynode1是否存在问题;然后检索每个一级数据实体节点dataentitynode1所依赖的数据实体节点和数据实体链接关系作为二级数据实体节点dataentitynode2和二级数据实体链接关系relationship2,并按照二级数据实体链接关系relationship2中的链接规则relationrule2检测二级数据实体节点是否存在问题;以此类推,逐级执行所有层次依赖节点的检测,直到再没有依赖节点为止。

6.如权利要求5所述的方法,其特征在于,所述数据实体链接关系relationship包含若干个链接规则relationrule,所述链接规则relationrule包括若干个规则lrule,所述规则lrule用于定义数据之间的关联关系。

7.如权利要求6所述的方法,其特征在于,所述关联关系包括隐性关联关系、数据表达式、数据聚合关联关系、数据库外键关联关系;其中,隐性关联关系是指没有外键约束的两个数据之间存在的引用关系;数据表达式是指用于将多种数据经过设定表达式计算之后生成新的数据,该设定表达式所涉及的数据之间具有关联关系;数据聚合是指多个数据合并为一个数据。

8.如权利要求1或2所述的方法,其特征在于,所述一致性检测包括批量数据检测,其方法为:设起始数据实体节点具有n条数据,先读取起始数据实体节点的数据,通过节点一致性检测规则detectionrule检测每条数据i本身是否存在一致性问题;然后对该条数据i所链接的数据实体节点和数据实体链接关系,作为一级数据实体节点dataentitynode1和一级数据实体链接关系relationship1;然后按照一级数据实体链接关系relationship1中的链接规则relationrule1检测一级数据实体节点dataentitynode1是否存在问题;如果一级数据实体节点a包含若干条数据,则先从第一条数据开始执行节点一致性检测规则detectionrule和数据实体链接规则relationrule;然后对该一级数据实体节点a所链接的每一个数据实体节点作为二级数据实体节点,根据数据实体链接规则relationrule对该一级数据实体节点a与各二级数据实体节点进行一致性检测;如此循环,直到不再有下级链接数据实体节点;然后再对该条数据i所有关联节点所包含数据进行一致性检测。

9.如权利要求1所述的方法,其特征在于,所述分类标签classifylabel用于对数据实体节点dataentitynode进行按类分组,区分不同类型数据实体。

10.如权利要求1或9所述的方法,其特征在于,根据节点包含内容对节点进行分类并为每一个节点指定一个分类标签classifylabel。

技术总结
本发明公开了一种数据一致性检测方法,其步骤包括:1)根据分布式数据库或者不同数据源之间数据的关联关系和一致性约束条件,构建数据关系模型图;构建所述数据关系模型图的方法为:首先对待检测数据从业务和数据交互角度抽象出一系列的数据实体节点,并为每一个数据实体节点指定一个分类标签;然后根据各数据实体节点之间的关联关系,构建数据实体节点之间的数据实体链接关系;数据实体节点上设置用于数据实体节点一致性检测的规则,数据实体链接关系上设置用于两个数据实体节点之间链接一致性检测的链接规则;2)基于数据关系模型图对交换数据进行一致性检测。本发明能够准确发现和定位数据之间的一致性问题,有效提升数据质量。

技术研发人员:李培军;许舒人;魏克刚;田申;罗剑刚;颜复海
受保护的技术使用者:中国科学院软件研究所
技术研发日:2020.01.15
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-25642.html

最新回复(0)