一种数据溯源方法以及相应的数据溯源装置与流程

文档序号:17477344发布日期:2019-04-20 06:12阅读:915来源:国知局
一种数据溯源方法以及相应的数据溯源装置与流程

本发明属于数据库技术领域,更具体地,涉及一种数据溯源方法以及相应的数据溯源装置。



背景技术:

数据溯源指追踪数据的起源和派生过程。在大数据时代,由于数据汇集的阶段性、技术性以及不同类型数据本身的特点等因素,导致数据汇集过程中积累了大量来源不同、质量各异的数据。以政务大数据共享平台为例,该平台汇集各下属应用系统和网站业务运作过程中所产生的大量数据,对上述数据进行统一集中分析,从而向各部门提供辅助决策、统计分析以及业务管理等全方位支撑。从系统层面上支持数据溯源,可以了解分析结果的来源及演变过程,因此,数据溯源具有重要意义。例如,根据溯源信息可帮助解释分析结果,理解分析结果的特殊语义,根据结果数据的来源,分析支撑数据的可靠性和可信度,还可以追踪分析结果之间的关联等。然而,现有的数据溯源技术研究主要集中于关系数据库。

在基于关系数据库的大数据平台中,往往积累的是大量不同结构与不同存储方式的数据,包括文档、表格等复杂多源异构数据,由于多表的关联查询以及复杂的数据分析类型,导致当用户量和访问量较大时,查询效率极低,数据来源的可靠性不高。因此,传统关系数据库在功能和性能上的局限性日益显著。

为了获取更快速的查询效率,人们开始更多使用nosql(notonlystructuredquerylanguage)数据库,不过,目前没有较为成熟的面向nosql数据库的数据溯源技术,因此,nosql数据库的数据溯源技术的研究,成为待解决的核心问题。

鉴于此,克服该现有技术所存在的缺陷是本技术领域亟待解决的问题。



技术实现要素:

针对现有技术的以上缺陷或改进需求,本发明提供了一种数据溯源方法以及数据溯源装置,其目的在于在数据溯源过程中,依据溯源信息中的数据操作以及源数据的标识信息,追踪结果记录的来源以及演变过程,提高了结果记录来源分析的可靠性和可信度,还有效提高数据溯源的效率,由此解决目前数据溯源效率低、数据来源分析可靠性不高的技术问题。

为实现上述目的,按照本发明的一个方面,提供了一种数据溯源方法,所述数据溯源方法包括:

对每条源数据添加唯一的标识信息,建立原始数据集,其中,所述原始数据集中包含至少一条源数据;

对所述原始数据集进行目标数据操作,得到与所述目标数据操作相匹配的目标结果集,其中,所述目标结果集中包含至少一个结果记录,每个结果记录包含与其相匹配的源数据的标识信息;

整合结果记录的元组编号、结果记录所包含的标识信息以及所述目标数据操作,得到每个结果记录对应的溯源信息,以依据所述溯源信息进行数据溯源。

优选地,所述对每条源数据添加唯一的标识信息,建立原始数据集,其中,所述原始数据集中包含至少一条源数据包括:

采用哈希算法,依据每条源数据创建的时间生成唯一的哈希值;

将哈希值添加到对应的源数据中,作为源数据唯一的标识信息,建立原始数据集,其中,所述原始数据集中包含至少一条源数据。

优选地,所述整合结果记录的元组编号、结果记录所包含的标识信息以及所述目标数据操作,得到每个结果记录对应的溯源信息,以依据所述溯源信息进行数据溯源包括:

将结果记录的元组编号、结果记录所包含的标识信息以及所述目标数据操作,按照预设的映射规则进行存储,得到每个结果记录对应的溯源信息,以依据所述溯源信息进行数据溯源。

优选地,所述将结果记录的元组编号、结果记录所包含的标识信息以及所述目标数据操作,按照预设的映射规则进行存储,得到每个结果记录对应的溯源信息,以依据所述溯源信息进行数据溯源包括:

将结果记录的元组编号以及结果记录所包含的标识信息,作为来源信息进行存储;

将结果记录的元组编号、结果记录所包含的标识信息以及所述目标数据操作,作为演变过程信息进行存储;

整合所述来源信息以及所述演变过程信息,得到每个结果记录对应的溯源信息,以依据所述溯源信息进行数据溯源。

优选地,所述目标数据操作至少包括第一目标数据操作和第二目标数据操作;

对所述原始数据集进行目标数据操作,得到与所述目标数据操作相匹配的目标结果集包括:

对第一原始数据集进行第一数据操作,得到与所述第一数据操作相匹配的第一结果集;

对第二原始数据集进行第二数据操作,得到与所述第二数据操作相匹配的第二结果集;

依据所述第一数据操作和所述第二数据操作之间的连接域,连接所述第一结果集中的标识信息以及所述第二结果集中的标识信息,得到目标结果集。

优选地,所述数据溯源方法面向于mongodb数据库,所述mongodb数据库包括find函数和aggregate函数;

所述数据溯源方法还包括:

对find函数和aggregate函数分别添加标识信息读取以及标识信息写入的执行过程,得到目标数据操作。

优选地,所述aggregate函数包括sum函数、avg函数、min函数、max函数、first函数及last函数;

所述对find函数和aggregate函数分别添加标识信息读取以及标识信息写入的执行过程,得到目标数据操作包括:

对find函数添加标识信息读取以及标识信息写入的执行过程,得到findres函数;

依次对first函数、last函数、max函数、min函数、avg函数以及sum函数添加标识信息读取以及标识信息写入的执行过程,得到getfirst函数、getlast函数、getmax函数、getmin函数、getavg函数及getcount函数,其中,所述目标数据操作包括findres函数、getfirst函数、getlast函数、getmax函数、getmin函数、getavg函数及getcount函数中的至少一种。

优选地,当所述目标数据操作为findres函数时;

对所述原始数据集进行目标数据操作,得到与所述目标数据操作相匹配的目标结果集包括:

根据findres函数中携带的查询参数,全局搜索所述原始数据集,得到与所述查询参数相匹配的结果记录;

获取每个结果记录对应的源数据的标识信息,并整合所有的结果记录以及每个结果记录对应的标识信息,得到目标结果集。

优选地,当所述目标数据操作为getfirst函数、getlast函数、getmax函数或getmin函数时;

对所述原始数据集进行目标数据操作,得到与所述目标数据操作相匹配的目标结果集包括:

根据getfirst函数、getlast函数、getmax函数或getmin函数中携带的分组域以及获取参数,在所述原始数据集中,获取与所述分组域以及获取参数均相匹配的结果记录;

根据getfirst函数、getlast函数、getmax函数或getmin函数中携带的分组域以及获取参数,在所述原始数据集中,获取与所述分组域以及获取参数均相匹配的源数据的标识信息;

整合所有的结果记录以及每个结果记录对应的标识信息,得到目标结果集。

按照本发明的另一方面,提供了一种数据溯源装置,包括至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行本发明所述的数据溯源方法。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有如下有益效果:本发明的数据溯源方法,采用对每条源数据添加唯一的标识信息的方式,区分不同的源数据,同时,基于数据操作以及结果记录对应的源数据的标识信息,生成溯源信息。在数据溯源过程中,依据溯源信息中的数据操作以及源数据的标识信息,追踪结果记录的来源以及演变过程,提高了结果记录来源分析的可靠性和可信度。另外,在数据溯源过程中,将结果记录与源数据以及数据操作建立连接,简化了复杂的关联查询以及复杂的数据分析,可以有效提高数据溯源的效率。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种数据溯源方法的流程示意图;

图2是本发明实施例提供的图1中的步骤10的具体流程示意图;

图3是本发明实施例提供的图1中的步骤11的具体流程示意图;

图4是本发明实施例提供的第一种原始数据集(手术集合)的结构示意图;

图5是本发明实施例提供的基于图4中的原始数据集进行findres操作后得到的目标结果集;

图6是本发明实施例提供第二种原始数据集的(穿刺集合)的结构示意图;

图7是本发明实施例提供的基于图6中的原始数据集进行getmax操作后得到的中间结果集;

图8是本发明实施例提供的基于图6中的原始数据集进行getmax操作后得到的目标结果集;

图9是本发明实施例提供的基于图6中的原始数据集进行getcount操作后得到的中间结果集;

图10是本发明实施例提供的基于图6中的原始数据集进行getcount操作后得到的目标结果集;

图11是本发明实施例提供的第三种原始数据集(诊断集合)的结构示意图;

图12是本发明实施例提供的基于图5中的原始数据集进行find操作后得到的中间结果集;

图13是本发明实施例提供的基于图11中的原始数据集进行find操作后得到的中间结果集;

图14是本发明实施例提供的基于图12和图13中的中间结果集进行join操作后得到的目标结果集;

图15是本发明实施例提供的基于图11中的原始数据集进行getcount操作后的中间结果集;

图16是本发明实施例提供的基于图15中间结果集进行findres操作后的中间结果集;

图17是本发明实施例提供的第四种原始数据集(用药集合)的结构示意图;

图18是本发明实施例基于图16的中间结果集与图17的原始数据集进行join操作后的目标结果集;

图19是本发明实施例提供的一种数据溯源装置的结构示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

实施例1:

目前,在基于关系数据库的大数据平台中,往往积累了大量不同结构与不同存储方式的数据,包括文档、表格等复杂多源异构数据,由于多表的关联查询以及复杂的数据分析类型,导致当用户量和访问量较大时,查询效率极低。因此,传统关系数据库在功能和性能上的局限性日益显著。

为解决前述问题,本实施例提供一种数据溯源方法,该数据溯源方法主要面向于非关系数据库,如图1所示,该数据溯源方法包括如下步骤:

步骤10:对每条源数据添加唯一的标识信息,建立原始数据集,其中,所述原始数据集中包含至少一条源数据。

在具体应用场景下,本实施例的数据溯源方法主要面向于非关系数据库,例如,mongodb(分布式文档存储数据库)。在mongodb中,数据存储粒度由细到粗分别为:键(key)、文档(document)、集合(collection)以及数据库(database)。

由于,文档为最小语义逻辑单元,在进行数据溯源时,可以追溯至文档,因此,首先为每一个文档添加唯一的标识信息,以区分不同的文档。在实际应用场景下,一个集合中包含至少一个文档,其中,每个文档对应的唯一的标识信息是相对于集合而言的,不同集合中的文档对应的标识信息可能相同,在此情况下,可以依据集合对应的标识信息区分文档。

在mongodb中,前述的源数据可以指代每个文档,前述的原始数据集指代每个集合。

步骤11:对所述原始数据集进行目标数据操作,得到与所述目标数据操作相匹配的目标结果集,其中,所述目标结果集中包含至少一个结果记录,每个结果记录包含与其相匹配的源数据的标识信息。

在本实施例中,目标数据操作可以为单一的数据操作,或者连续的数据操作。其中,当目标数据操作为连续的数据操作时,数据操作的类型可以相同,也可以不相同,具体可以依据实际情况而定,在此,不做具体限定。

而且,在目标结果集中包含至少一个结果记录,每个结果记录与目标数据操作相匹配,每个结果记录中均携带有与其相匹配的源数据的标识信息,以区分不同的源数据。

步骤12:整合结果记录的元组编号、结果记录所包含的标识信息以及所述目标数据操作,得到每个结果记录对应的溯源信息,以依据所述溯源信息进行数据溯源。

在本实施例中,目标结果集中包括至少一个结果记录,为了区分不同的结果记录,为每个结果记录设置相应的元组编号,其中,元组编号可以依据用户id以及用户操作的时间而生成,还可以依据结果记录生成的时间而生成,具体的生成规则依据实际情况而定,在此,不做具体限定。在数据溯源的过程中,依据结果记录所包含的标识信息确定数据来源,依据所述目标数据操作确定演变过程,从而对数据进行溯源。

采用对每条源数据添加唯一的标识信息的方式,区分不同的源数据,同时,基于数据操作以及结果记录对应的源数据的标识信息,生成溯源信息。在数据溯源过程中,依据溯源信息中的数据操作以及源数据的标识信息,追踪结果记录的来源以及演变过程,提高了结果记录来源分析的可靠性和可信度。另外,在数据溯源过程中,将结果记录与源数据以及数据操作建立连接,简化了复杂的关联查询以及复杂的数据分析,可以有效提高数据溯源的效率。

基于本发明实施例的数据溯源方法,关于源数据对应的标识信息的生成过程提供如下可选方案:

如图2所示,步骤10具体包括如下步骤:

步骤101:采用哈希算法,依据每条源数据创建的时间生成唯一的哈希值。

在本发明实施例中,为了保证同一个集合中的不同源数据对应的标识信息具有唯一性,可以采用哈希算法,依据每条源数据创建的时间生成唯一的哈希值。

步骤102:将哈希值添加到对应的源数据中,作为源数据唯一的标识信息,建立原始数据集,其中,所述原始数据集中包含至少一条源数据。

将该哈希值添加到对应的源数据中,作为源数据唯一的标识信息,建立原始数据集,其中,所述原始数据集中包含至少一条源数据。

为了清楚说明原始数据集与源数据之间的关联关系,请参照图4,图4示出添加标识信息后的原始数据集,其中,每一行指代一个源数据(文档),sign域对应的信息即为该源数据对应的标识信息。例如,图4对应的表为一个原始数据集(集合),每行对应一个源数据(文档),每行源数据的sign域对应的信息为该源数据的唯一标识信息。

在步骤11之前,还需要对数据库原有的查询接口进行重定义,获取目标数据操作,以读取源数据对应的标识信息,并将源数据对应的标识信息写入到结果集中。

在此,以数据库为mongodb为例解释说明,查询接口重定义的过程。

其中,mongodb跟数据查询有关的函数主要包括find()函数和aggregate()函数,aggregate()函数中的聚集表达式除去与数据更新有关的函数外,还包括sum函数(求和)、avg函数(求平均值)、min函数(求最小值)、max函数(求最大值)、first函数(获取第一个文档数据)及last函数(获取最后一个文档数据)。

为了使上述数据操作执行完成后,携带源数据对应的标识信息,需要重新定义上述数据操作,主要在原有函数的基础上,添加读取源数据标识信息的操作以及写入源数据标识信息的操作。

在本实施例中,对find函数和aggregate函数分别添加标识信息读取以及标识信息写入的执行过程,得到目标数据操作,并进行封装得到重写的查询接口。

具体地,对find函数添加标识信息读取以及标识信息写入的执行过程,得到findres函数。依次对first函数、last函数、max函数、min函数、avg函数以及sum函数添加标识信息读取以及标识信息写入的执行过程,对相应函数进行重写,得到getfirst函数、getlast函数、getmax函数、getmin函数、getavg函数及getcount函数,如此,可以覆盖mangodb中所有与数据查询有关的操作。

其中,前述的目标数据操作指代的是经过重写之后的数据操作,具体包括findres函数、getfirst函数、getlast函数、getmax函数、getmin函数、getavg函数及getcount函数中的至少一种。

进一步地,在实际应用中,可能存在多次目标数据操作,得到最终查询结果。为了对不同操作进行关联,以便于确定结果演变过程,需要增加join函数,将不同的操作通过连接域进行关联,以通过join函数进行信息演变过程的推理。

依据前述方式,最终产生查询接口集合ifset={findres,getmax,getmin,getfirst,getlast,getavg,getcount,join}。

在实际应用场景下,目标数据操作可能为一次数据操作,也可能为连续的数据操作。当目标数据操作为单一的数据操作时,直接调用查询接口集合ifset中相应的函数即可。当目标数据操作为连续的数据操作时,需要依据顺序依次执行相应的操作,例如,目标数据操作至少包括第一目标数据操作和第二目标数据操作,其中,第一目标数据操作为查询接口集合ifset中的任一数据操作,第一目标数据操作为查询接口集合ifset中的任一数据操作。

如图3所示,在步骤11中,具体还包括如下步骤:对所述原始数据集进行目标数据操作,得到与所述目标数据操作相匹配的目标结果集包括:对第一原始数据集进行第一数据操作,得到与所述第一数据操作相匹配的第一结果集;对第二原始数据集进行第二数据操作,得到与所述第二数据操作相匹配的第二结果集;依据所述第一数据操作和所述第二数据操作之间的连接域,连接所述第一结果集中的标识信息以及所述第二结果集中的标识信息,得到目标结果集。其中,前述的第一数据操作和第二数据操作为重写之前的函数。具体的实现过程,可参照下文关于join函数的解释说明。

在本实施例中,由于对查询函数进行了重写,通过查询函数获取的查询结果对应的数据结构,相对于通过原有函数获取的查询结果对应的数据结构,也会存在差异。因此,需要对应设计溯源存储结构,以存储溯源信息。

在步骤12中,首先定义溯源信息存储结构,溯源信息存储结构包括why-provenance结构以及how-provenance结构,其中,why-provenance结构用于存储来源信息,how-provenance结构用于存储演变过程信息。

由于目标结果集中会包含一条或多条结果记录,需要对每条结果记录进行编号,以区分不同的结果记录,在此以resultid表示为结果记录对应的元组编号,以区分不同的结果记录。

在本实施例中,why-provenance结构如下:(resultid,(sign1,…,signk)),其中,resultid为结果记录的元组编号,(sign1,…,signk)为源数据对应的标识信息序列,该标识信息序列包含至少一个标识信息,通过标识信息对应的源数据产生,元组编号为resultid的结果记录对应的来源信息。由于每条结果记录对应的源数据可能大于一条,可以规定每条标识信息之间用“,”作为分格符,以区分不同的标识信息。

how-provenance的结构采用一个多项式p(resultid,multip)表示,其中,resultid为结果记录编号,multip为多项式,由数据集d和操作集op组成。令d表示数据域,即,原始数据集所能产生的结果空间,则

op={θ,π,γ,δ,λ,τ,α,*}为多项式multip中可能的操作集合,其与查询接口集合ifset中的接口元素一一对应,则其中,θ对应指代findres操作,π对应指代getmax操作,γ对应指代getmin操作,δ对应指代getfirst操作,λ对应指代getlast操作,τ对应指代getavg操作,α对应指代getcount操作,*对应指代join操作。

为了便于对溯源信息进行分类存储,对于处理逻辑相同的操作,存储相应溯源信息的存储结构相同,因此,对同一操作产生的溯源信息组成一个集合(collection)。

在溯源信息存储结构定义好之后,将结果记录的元组编号、结果记录所包含的标识信息以及所述目标数据操作,按照预设的映射规则进行存储,得到每个结果记录对应的溯源信息,以依据所述溯源信息进行数据溯源。

具体地,将结果记录的元组编号以及结果记录所包含的标识信息,作为来源信息进行存储;将结果记录的元组编号、结果记录所包含的标识信息以及所述目标数据操作,作为演变过程信息进行存储;整合所述来源信息以及所述演变过程信息,得到每个结果记录对应的溯源信息,以依据所述溯源信息进行数据溯源。

在实际应用场景下,当查询函数不同时,在步骤11中对应获取目标结果集的实现过程存在差异,具体如下:

针对findres函数:首先,从原始数据集中选出满足要求的源数据,同时,在选出源数据的过程中,将每条源数据对应的标识信息(sign)保存在目标结果集中。

首先,定义findres接口如下:publicvoidfindres(dbcollectiondbcollection,dbcollectionres,dbobjectquery,dbobjectprojection)。其中,形参的含义依次为:dbcollection表示被查询的集合,dbcollection表示查询结果集保存的集合,dbobject表示筛选条件,dbobject表示返回域。例如:从图4所示的手术集合中,查找手术名称为“甲状腺切除术”的源数据,即find(“手术”,手术名称:"甲状腺切除术",“就诊流水号”)。

然后,根据findres中的参数,执行mongodb自带find操作,即result=dbcollection.find(query,projection),确定满足手术名称为甲状腺切除术的源数据,并返回就诊流水号。执行findres中读取和写入源数据对应的标识信息,并将标识信息添加到目标结果集中对应的结果记录中,得到目标结果集(如图5所示)。最后,将标识信息转换为字符串类型,作为该结果记录的溯源信息进行保存。

针对getfirst函数、getlast函数、getmax函数和getmin函数,实现过程基本相同。

在此,以getmax函数为例举例说明:定义getmax函数,其中,getmax函数定义为publicvoidgetmax(dbcollectioncollection,dbcollectionres,dbobjectgroupfields,stringmaxfield),其中,形参的含义依次为:dbcollection表示被查询的集合、dbcollection表示查询结果集保存的集合、dbobject为分组域、string为求最大值的域。在对getfirst函数、getlast函数和getmin函数定义时,将参数“maxfield”换成“firstfield”、“lastfield”或“minfield”即可。

然后,调用mongodb的max函数,得到查询结果。例如,在图6所示的原始数据集中,求“穿刺”项目中,以同一就诊类型的最大年龄的记录,对应的查询结果集temp1,如图7所示。

最后,对结果集temp1的每一条结果记录,以“groupfields(就诊类型)”和“maxfield(最大年龄)”参数(getmin函数则为“minfield”参数,以此类推)作为查找域,去原始数据集(图6所示的手术集合)中,找到与查找域中的阈值均相等的源数据,将源数据的标识信息保存到对应的结果记录中,得到目标结果集(如图8所示的temp2),其中,每条记录信息对应的标识信息即为该条结果记录的溯源信息。

针对getavg函数和getcount函数:在求均值和统计运算中,会丢失与源数据之间的联系,而且,每一条计算结果涉及到的源数据有多条。因此,在getavg函数和getcount函数实现过程中,将首先执行对应的操作,得到中间结果集,再根据中间结果集中的主键域,去中间结果集中查找对应的源数据,并将找到源数据对应的标识信息,将标识信息保存为目标结果集的溯源信息。实现步骤具体如下:

首先,定义getavg函数和getcount函数,其中getavg定义为publicvoidgetavg(dbcollectioncollection,dbcollectionres,dbobjectgroupfields,stringavgfield),其中,形参的含义依次为:dbcollection表示被查询集合,dbcollection表示查询结果集保存的集合,dbobject表示分组域,string表示求平均值的域。getcount定义为publicvoidgetcount(dbcollectioncollection,dbcollectionres,dbobjectmatch,dbobjectgroupfields),其中,形参的含义依次为:dbcollection表示被查询集合,dbcollection表示查询结果集保存的集合,dbobject表示过滤条件,dbobject表示分组域。

在此,以getcount函数举例说明,调用mongodb的sum函数,得到对应的中间结果集。对中间结果集中的每一条结果记录,以分组域(groupfields)作为查找域,去原始数据集中,找到对应域值均相等的源数据,将所有源数据的标识信息保存到一条字符串中,每条标识信息之间用“,”做为分隔符连接,形成标识信息序列,将最终得到的标识信息序列,保存到结果记录中,该标识信息序列即为该结果记录的溯源信息。

例如,在图6所示的穿刺集合中,确定每个患者做穿刺的手术次数,以医疗卡号为分组域,确定每个医疗卡号对应的就诊次数。图9对应的是求和的中间结果集,以分组域在原始数据集中,查找每条结果记录对应的源数据的标识信息,并将源数据的标识信息添加到每条结果记录中,得到目标结果集,如图10所示。

针对join函数,具体形式为publicvoidjoin(dbdb,dbcollectioncollection2,dbobjectselect,para...query),其中,形参的含义依次为:db表示数据库,dbcollection表示查询结果集保存的集合,dbobject表示返回域,para表示单个集合查询操作条件。其中,para为自定义类,para对应的参数包括dbcollection(集合)、joinfield(连接域)、query(查询条件)、projection(返回域)。

例如,从图4中的手术集合和图11中的诊断集合中,找到手术名称为“甲状腺切除术”且“治疗结果”为“治愈”的就诊流水号。即,join(甲状腺结节,result,{“就诊流水号”:“1”,“sign”:“1”},para...query)。

其中,手术集合为原始数据集1,诊断集合为原始数据集2,查询调件query[0]的取值为(“手术”,“就诊流水号”,{“手术名称”:“甲状腺切除术”},{“就诊流水号”:,“sign”:1}),查询调件query[1]的取值为(“诊断”,“就诊流水号”,{“治疗结果”:“治愈”},{“就诊流水号”:,“sign”:1})。

首先,调用mongdb自带的find函数,从原始数据集1中获取满足query[0]的中间结果集temp1,如图12所示。然后,调用mongdb自带的find函数,从原始数据集2中获取满足query[1]的中间结果集temp2,如图13所示。

以query[0]和query[1]中的joinfield(就诊流水号)作为连接域,将中间结果集temp1和中间结果集temp2连接,将同一条结果记录对应的temp1和temp2中,两个标识信息合并成一条标识信息序列,以“,”为分割符,从而区分不同的标识信息,并将标识信息序列添加到目标结果集(如图14所示)中。此时,目标结果集中包含了查询结果以及产生该查询结果的源数据对应的标识信息。最后,根据“select”参数,更新目标结果集,只保留“select”参数中要求的域信息,并去除目标结果集中的重复记录,再将目标结果集temp3中的标识信息序列作为溯源信息保存。

在实际应用场景下,还存在复杂的查询意图,可能包含多个查询接口,形成接口调用序列。将给定复杂查询对应的接口调用序列记为{x1,…,xi,…,xt},其中xi∈ifset,其中,t表示该复杂查询所包含的查询操作的次数。依次调用该接口调用序列中的每个接口函数,得到相应的结果集,其中,每个接口函数对应的结果集中均包含了溯源信息。

以如下查询意图为例解释说明:查询检查次数超过10次的甲状腺患者的用药信息。该查询意图包含以下接口调用序列(getcount、findres、join)。该步骤具体如下:

首先,定义变量multip=null。从i=1开始,调用getcount函数,以“医疗卡号”为分组域(groupfields),对如图11所示的诊断集合做统计操作,并将查询结果写回中间结果集temp1中,如图15所示。

然后,以中间结果集temp1作为原始数据集,调用findres函数,以“count”为条件域(groupfields),查找count值大于10的文档,产生中间结果集temp2,如图16所示。此时,中间结果集temp2的标识信息中,保存中间结果集temp1中所包含的溯源信息。

调用join函数,join函数对应的参数包括数据库db,需要返回的域(药品名称),单个集合查询操作条件,其中para1的参数包括dbcollection(中间结果集temp2)、joinfield(“_id”),para2的参数包括dbcollection(图17所示的用药集合)、joinfield(“医疗卡号”)。以“_id”和“医疗卡号”作为连接域,做等值连接,得到目标结果集,如图18所示。

对目标结果集temp3中每一个元素的标识信息进行处理,以生成溯源信息。该步骤具体如下:

令目标结果集中的第j个元素,对应的演变过程信息记为p,multip=p,将multip多项式信息连同resultid,组成(resultid,multip)结构保存于how-provenance存储结构中。以上表为例(包含一条结果记录),多项式multip信息记p=θ(α(f15348,f14197,f14236,f12902,f14497,f14498,f16888,f19708,f19709,f27938,f24208))*c1024",由演变过程信息可追溯原始数据的加工过程。

解析多项式multip,得到第j个结果记录对应的标识序列(sign1,…,signk),连同结果记录对应的结果元组resultid,生成来源信息(resultid,(sign1,…,signk)),保存于why-provenance存储结构中。以目标结果集中的第3条结果记录为例,p=θ(α(f15348,f14197,f14236,f12902,f14497,f14498,f16888,f19708,f19709,f27938,f24208))*c1024",解析表达式p,得到该结果记录对应的标识信息为诊断集合中f15348、f14197、f14236、f12902、f14497、f14498、f16888、f19708、f19709、f27938、f24208对应的源数据,以及用药集合中c1024对应的源数据。

本发明的数据溯源方法,采用对每条源数据添加唯一的标识信息的方式,区分不同的源数据,同时,基于数据操作以及结果记录对应的源数据的标识信息,生成溯源信息。在数据溯源过程中,依据溯源信息中的数据操作以及源数据的标识信息,追踪结果记录的来源以及演变过程,提高了结果记录来源分析的可靠性和可信度。另外,在数据溯源过程中,将结果记录与源数据以及数据操作建立连接,简化了复杂的关联查询以及复杂的数据分析,可以有效提高数据溯源的效率。

实施例2:

请参阅图19,图19是本发明实施例提供的一种数据溯源装置的结构示意图。本实施例的数据溯源装置包括一个或多个处理器31以及存储器32。其中,图19中以一个处理器31为例。

处理器31和存储器32可以通过总线或者其他方式连接,图19中以通过总线连接为例。

存储器32作为一种基于数据溯源的非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1中的数据溯源方法以及对应的程序指令。处理器31通过运行存储在存储器32中的非易失性软件程序、指令以及模块,从而执行数据溯源方法的各种功能应用以及数据处理,实现实施例1的数据溯源方法。

其中,存储器32可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器32可选包括相对于处理器31远程设置的存储器,这些远程存储器可以通过网络连接至处理器31。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

关于数据溯源方法请参照实施例1及相关的文字描述在此,不再赘述。

值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。

本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(readonlymemory,简写为rom)、随机存取存储器(randomaccessmemory,简写为ram)、磁盘或光盘等。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

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