多方数据联合查询方法、装置、服务器和存储介质与流程

文档序号:21408489发布日期:2020-07-07 14:43阅读:189来源:国知局
本发明实施例涉及数据处理
技术领域
:,尤其涉及一种多方数据联合查询方法、装置、服务器和存储介质。
背景技术
::随着互联网技术的快速发展,企业之间需要共享数据。通常情况下,企业之间共享的数据都是十分重要的数据,诸如用户身份证信息、手机号和银行卡号等。因此如何在企业之间进行共享数据查询的同时,保护查询数据的安全性是十分重要的。而现有的传统查询方式在保证查询数据安全性的前提下,查询效率随着数据量的增大会不断的降低,查询响应时间会越来越慢,亟需改进。技术实现要素:本发明实施例提供了一种多方数据联合查询方法、装置、服务器和存储介质,实现了一种保护提供方数据安全性的多方计算方法,在保证查询数据安全性的前提下,提高了数据查询效率。第一方面,本发明实施例提供了一种多方数据联合查询方法,由管理方执行,该方法包括:解析多方联合查询语句,得到逻辑执行计划;根据所述逻辑执行计划中各节点所属的提供方进行处理,得到各提供方的物理执行计划;根据各提供方的物理执行计划,生成各提供方的查询指令,并且向各提供方发送所述查询指令,其中所述查询指令用于指示各提供方协同进行查询。第二方面,本发明实施例提供了一种多方数据联合查询方法,由提供方执行,该方法包括:接收管理方下发的本地提供方的查询指令,其中所述查询指令由所述管理方通过如下方式确定:解析多方联合查询语句,得到逻辑执行计划;根据所述逻辑执行计划中各节点所属的提供方进行处理,得到各提供方的物理执行计划;根据各提供方的物理执行计划,生成各提供方的查询指令;执行接收的查询指令,得到查询结果。第三方面,本发明实施例还提供了一种多方数据联合查询装置,配置于管理方,该装置包括:逻辑计划确定模块,用于解析多方联合查询语句,得到逻辑执行计划;物理计划确定模块,用于根据所述逻辑执行计划中各节点所属的提供方进行处理,得到各提供方的物理执行计划;指令生成发送模块,用于根据各提供方的物理执行计划,生成各提供方的查询指令,并且向各提供方发送所述查询指令,其中所述查询指令用于指示各提供方协同进行查询。第四方面,本发明实施例还提供了一种多方数据联合查询装置,配置于提供方,该装置包括:查询指令接收模块,用于接收管理方下发的本地提供方的查询指令,其中所述查询指令由所述管理方通过如下方式确定:解析多方联合查询语句,得到逻辑执行计划;根据所述逻辑执行计划中各节点所属的提供方进行处理,得到各提供方的物理执行计划;根据各提供方的物理执行计划,生成各提供方的查询指令;查询指令执行模块,用于执行接收的查询指令,得到查询结果。第五方面,本发明实施例还提供了一种服务器,包括:一个或多个处理器;存储装置,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明任意实施例所述的多方数据联合查询方法。第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所述的多方数据联合查询方法。本发明实施例的方案,通过对多方联合查询语句解析得到的逻辑执行计划进行处理,得到各提供方的物理执行计划,进而生成各提供方的查询指令,并发送至各提供方。实现了一种保护提供方数据安全性的多方计算方法,在保证查询数据安全性的前提下,提高了数据查询效率。附图说明图1是本发明实施例提供的两方数据联合查询的整体查询流程框图;图2a是本发明实施例一提供的一种多方数据联合查询方法的流程图;图2b是本发明实施例一提供的多方联合查询语句解析得到的逻辑执行计划的示意图;图2c是本发明实施例一提供的优化后的逻辑执行计划的示意图;图3a是本发明实施例二提供的一种多方数据联合查询方法的流程图;图3b是本发明实施例二提供的标注有算子标记类型的物理执行计划的示意图;图4是本发明实施例三提供的一种多方数据联合查询方法的流程图;图5是本发明实施例四提供的一种多方数据联合查询方法的流程图;图6是本发明实施例五提供的一种多方数据联合查询装置的结构示意图;图7是本发明实施例六提供的一种多方数据联合查询装置的结构示意图;图8是本发明实施例七提供的一种服务器的结构示意图。具体实施方式下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。在介绍本发明各实施例之前,先对本发明实施例的应用场景进行说明,本发明实施例的多方数据联合查询方法、装置、服务器和存储介质可以适用于对多个数据提供方针对多方联合查询语句协同进行数据查询的场景,如多个数据提供方针对多方联合查询语句协同进行多提供方的隐私数据查询的情况。具体的,各数据提供方的数据都存储在各自的数据仓库(各自的安全域)中,各提供方需要公开的原数据(meta)信息可以相同,也可以是不同。多方联合查询语句只有在各数据提供方审核通过后方可进行数据查询,各提供方的数据可以是各种隐私数据,通过多方联合查询能够对各提供方的数据进行统计查询,计算过程不泄漏原数据,计算结果对各提供方公开。示例性的,进行多方数据联合查询的具体过程如图1所示。管理方10包括:原数据信息模块和驱动模块。原数据信息模块用于负责收集管理原数据,驱动模块用于将查询语句解析成执行计划,管理方10将解析后的执行计划发送给数据提供方a11和数据提供方b12,针对各数据提供方,都包括提供方执行模块,数仓(数据仓库)模块。由提供方执行模块基于其数仓模块和接收到的执行计划进行多方计算,进而完成数据查询操作。其中,提供方执行模块可以是部署在当前数据提供方的多方计算程序。基于此,以下对本发明实施例的技术方案进行介绍。实施例一图2a为本发明实施例一提供的一种多方数据联合查询方法的流程图,图2b为本发明实施例一提供的多方联合查询语句解析得到的逻辑执行计划的示意图;图2c为本发明实施例一提供的优化后的逻辑执行计划的示意图。本实施例可适用于对多方数据进行联合查询的情况,例如,对多方隐私数据进行联合查询的情况。该方法可以由本发明实施例提供的管理方的多方数据联合查询装置或服务器来执行,该装置可采用硬件和/或软件的方式实现。其中,管理方可以是提供数据查询服务的管理方服务器,其可以对用户发送的查询语句进行分析后,生成针对不同数据提供方的数据查询指令,由各数据提供方之间相互协同完成本次数据的查询。如图2a-2c所示,具体包括如下步骤:s201,解析多方联合查询语句,得到逻辑执行计划。其中,多方联合查询语句可以是指关于多个提供方的数据查询语句,数据查询语句可以是基于数据库查询和程序设计语言,针对当前查询需求,通过程序代码编写成的数据查询语句。如可以是针对查询数据的需求,编写成的sql语句。可选的,接下来本发明实施例以sql语句为查询语句进行多方数据联合查询方案的介绍,但是并不限于仅为sql语句。逻辑执行计划可以是指针对查询语句设置的执行计划,即一整条查询语句应该如何执行,每一个关键字、子句部分在什么时刻执行的具体执行计划,该计划本身是一个有向无环图。可选的,本发明实施例中,解析多方联合查询语句的过程可以是:对多方联合语句中的每一个代码进行切分解析,确定每一个代码的含义、执行该代码的算子以及什么时候执行,进而整理出具体执行该查询语句的逻辑执行计划。例如,若多方联合查询语句为sql语句:selectsum(a.x*b.y)fromaa,bbwherea.userid=b.useridanda.x>500。对该sql语句进行分析可以看出,该语句有两个提供方,一个是提供方a的表a,一个是提供方b的表b,该语句最终要执行的是对a表中的数据x和b表中的数据y做乘积后求和的操作,即sum(a.x*b.y),且对做乘积运算的表a和表b有两个限定要求:1)进行乘积求和运算的两表的userid字段相同,即a.userid=b.userid;2)进行乘积求和运算的表a中的x值大于500,即a.x>500。通过上述分析可以确定出执行“a.userid=b.userid”代码的算子为“求交(join)算子”、执行“a.x>500”代码的算子为“过滤(filter)算子”、执行“sum(a.x*b.y)”代码的算子为“表达式(project)算子和聚合(agg)算子”。确定代码执行顺序时,需要先执行“a.userid=b.userid”和“a.x>500”,确定出满足做乘积求和的a表数据和b表数据后,再执行“sum(a.x*b.y)”运算,而在执行“sum(a.x*b.y)”运算时,需要先执行乘积运算,再执行求和算法。故得到逻辑执行计划如图2b所示,即通过节点24和节点25获取提供方a和提供方b的数据,然后通过节点23确定出a表和b表中userid字段相同的数据,从确定出的数据中基于节点22选出a表中x值大于500的数据,执行节点21计算x和y值的乘积,最后执行节点20进行乘积求和运算。具体的,可以是管理方设备使用开源antlr工具对sql语句进行切分解析,将sql转化成抽象语法树(ast),使用calcite对抽象语法树编辑成逻辑执行计划。可选的,在解析多方联合查询语句,得到逻辑执行计划后,还可以包括:采用优化规则对得到的逻辑执行计划进优化操作,具体的,可以对得到的逻辑执行计划从以下几个方面进行优化:表达式简化、谓词下推、查询字段去掉无用字段等。例如,上述图2b中的逻辑执行优化操作后结果如图2c所示,增加了节点26和节点27,提供方a先在本地依次进行节点24、节点26以及节点22的运算,提高方b先在本地依次进行节点25和节点27的运算,然后再进行后续节点23、节点21以及节点20的双方协同运算。s202,根据逻辑执行计划中各节点所属的提供方进行处理,得到各提供方的物理执行计划。其中,物理执行计划可以是查询语句真正被执行时的顺序,它是由各数据库系统的关系引擎中的语句分析器、优化器等等组件经过大量计算、分析决定的。可选的,根据逻辑执行计划中各节点所属的提供方进行处理可以是根据逻辑执行计划中涉及的各提供方,针对逻辑执行计划中每一个节点在进行算法计算时,根据节点对应的提供方进行处理,生成各提供方对应的物理执行计划,针对图2c所示的逻辑执行计划,其中包括提供方a和提供方b,针对每个节点对应的提供方对逻辑执行计划进行处理,得到每一个提供方(即提供方a和提供方b)的物理执行计划。可选的,各提供方对应的物理计划可以是相同的物理计划。示例性的,针对每一个提供方来说,可以是由sparkstrategies类实现逻辑执行计划处理得到物理执行计划的过程,具体的,可以是管理方设备内部基于catalyst提供的strategy接口,该接口通过实现一些策略,用于分析逻辑执行计划(原始生成的逻辑执行计划或优化后的逻辑执行计划),并把逻辑执行计划映射到物理执行操作类这部分,再确定各提供方的物理执行计划中各节点算子的标记类型,从而得到最终的物理执行计划。其中,标记类型为单方计算算子,多方非混合算子或多方混合列算子。具体的,如何确定各提供方的物理执行计划中各算子的标记类型,在下述实施例进行详细介绍。s203,根据各提供方的物理执行计划,生成各提供方的查询指令,并且向各提供方发送查询指令,其中查询指令用于指示各提供方协同进行查询。其中,查询指令可以是用来指示各提供方进行数据查询的具体指令,其中至少包括执行数据查询操作的算子、查询数据、物理执行计划以及操作方等等。可选的,根据各提供方的物理执行计划,生成各提供方的查询指令的过程可以是,针对每一个提供方,根据该提供方的物理执行计划,基于管理方设备上的预设接口,将该物理执行计划转换成json格式的查询指令。并将转化后的执行命令发送至对应的提供方,由各提供方之间协同合作进行数据的查询。可选的,针对一个提供方,由物理执行计划生成的查询指令可以是由多个子执行命令构成,各子执行命令可以是按照物理执行计划进行排序后生成查询指令,也可以是每个子执行命令标注有其执行的顺序,当提供方节点接收到该查询指令后,根据各子执行命令标注的执行顺序,依次执行各子执行命令。本实施例提供了一种多方数据联合查询方法,通过对多方联合查询语句解析得到的逻辑执行计划进行处理,得到各提供方的物理执行计划,进而生成各提供方的查询指令,并发送至各提供方。实现了一种保护提供方数据安全性的多方计算方法,在保证查询数据安全性的前提下,提高了数据查询效率。实施例二图3a是本发明实施例二提供的一种多方数据联合查询方法的流程图,3b为本发明实施例二提供的一种标注有算子标记类型的物理执行计划的示意图。该方法在上述实施例的基础上进一步的优化,具体给出了根据逻辑执行计划中各节点所属的提供方进行处理,得到各提供方的物理执行计划的情况介绍。如图3a-3b所示,该方法可以包括:s301,解析多方联合查询语句,得到逻辑执行计划。s302,根据逻辑执行计划,分别生成各提供方的物理执行计划。示例性的,根据逻辑执行计划,分别生成各提供方的物理执行计划可以是:根据逻辑执行计划,由sparkstrategies类实现逻辑执行计划处理得到物理执行计划的过程,具体的,管理方设备内部基于catalyst提供的strategy接口,该接口通过实现一些策略,用于分析逻辑执行计划(原始生成的逻辑执行计划或优化后的逻辑执行计划),并把逻辑执行计划映射到物理执行操作类这部分生成该提供方的物理执行计划。可选的,在根据逻辑执行计划,分别生成各提供方的物理执行计划之前,还包括:若逻辑执行计划中任一节点属于唯一提供方,则合并该节点以及该节点的子节点,作为单方计算节点。具体的,可以是针对逻辑执行计划,从上至下判断各节点涉及的数据是否为同一个提供方,若是则将该节点和该节点的各子节点作为单方计算节点,不在进行后续判断。否则,该节点为多方计算节点,继续判断该节点的子节点是否是单方计算节点。例如,如图2c所示,节点20、节点21和节点23涉及的数据均包括提供方a和提供方b,并不唯一,所以节点20、节点21和节点23属于多方节点,而节点22涉及数据属于唯一提供方a,则节点22及其子节点26和节点24作为单方(提供方a)计算节点。节点27涉及数据属于唯一提供方b,则节点27及其子节点25作为单方(提供方b)计算节点。此时,得到的物理执行计划为图3b所示,其中,节点33为图2c中节点22及其子节点26和节点24合并后的单方计算节点,节点34为图2c中节点27及其子节点25合并后的单方计算节点。s303,确定各提供方的物理执行计划中的各算子的标记类型,其中,标记类型为单方计算算子,多方非混合算子或多方混合列算子。其中,物理执行计划中的各算子都是对数据表中的数据进行计算,各数据表通常是存储有多列数据的数据表。单方计算算子(即lo算子)可以是指该算子在进行计算后,得到的计算结果(即得到的数据表)中的数据属于唯一提供方,即整个数据表中所有列都来自于同一提供方。多方非混和计算算子(即smlo算子)可以是指该算子在进行计算后,得到的计算结果(即得到的数据表)中同一列的数据来源于一方,例如,若某一算子的计算结果表有5列数据,1-3列数据来源提供方a,4-5列数据来源于提供方b,则该算子为多方非混和计算算子。多方混合列算子(即smco算子)可以是指该算子在进行计算后,得到的计算结果(即得到的数据表)中同一列数据的计算结果来源于多个提供方,例如,若某一算子的计算记过表中存储的一列数据中,是根据提供方a和提供方b的数据计算得到的,则该算子为多方混合列算子。可选的,确定各提供方的物理执行计划中各算子的标记类型时,可以根据各算子进行计算后得到的数据表中数据对应的提供方的数量来确定,若数据表中的数据都对应一个提供方,则该算子为单方计算算子,例如,图3b中的物理执行计划中节点33中的scantable算子计算后得到的数据表中的数据属于提供方a,则该节点33中的scantable算子的标记类型为单方计算算子。若数据表中的同一列数据都对应一个提供方,则该算子为多方非混和计算算子,例如,图3b中的物理执行计划中节点32中的join算子,其进行交集运算后,得到的数据表中一列为提供方a的表a中的数据值,另一列为提供方b的表b中的数据值,针对同一列来说,数据的提供方是唯一的,则节点32中的join算子的标记类型为多方非混和计算算子。若数据表中同一列数据的来源对应多个提供方,则该算子为多方混合列算子,例如,图3b中的物理执行计划中节点31中的project算子,其进行乘积运算后,得到的数据是根据表a中x值和的表b中y值计算得到的,即该结果的来源供方a和提供方b双方,则节点31中的project算子的标记类型为多方混合列算子。而节点30中的agg算子是对节点31中的progect算子的计算结果求和得到,由于progect算子的计算结果的数据中一列的数据来源于多个提供方,所以节点30中的agg算子求和后的计算结果中一列的数据同样也来源于多个提供方,因此,节点30中的agg算子的类型标记为多方混合列算子。可选的,在确定了物理执行计划中各算子的标记类型后,为各提供方的物理执行计划中各算子标记上确定的标记类型。s304,根据各提供方的物理执行计划,生成各提供方的查询指令,并且向各提供方发送查询指令,其中查询指令用于指示各提供方协同进行查询。示例性的,根据各提供方的物理执行计划,生成各提供方的查询指令时,可以是根据各提供方的物理执行计划,以及各计划中的各算子的标记类型,生成标注各算子标记类型的查询指令,即查询指令中针对每一执行命令对应的算子都标注有该算子对应的标记类型。向各提供方发送标注有各算子标记类型的查询指令,以使各提供方根据标注有各算子标记类型的查询指令,执行相应的查询操作。本实施例提供了一种多方数据联合查询方法,通过对多方联合查询语句解析得到的逻辑执行计划进行处理,得到各提供方的物理执行计划,确定各物理计划中各算子的标记类型,根据各提供方的物理执行计划,以及各计划中的各算子的标记类型,生成标注各算子标记类型的查询指令发送至各提供方。管理方发送给各提供方的查询指令中包含各算子的标记类型,可以使各提供方根据算子标记类型的不同,采用不同的执行方法,从而进一步提高执行数据查询的效率。实施例三图4是本发明实施例三提供的一种多方数据联合查询方法的流程图,本实施例可适用于在上述各实施例的管理方生成提供方的查询指令,并发送给各提供方之后,各提供方如何根据接收到的查询指令进行数据查询的情况。该方法可以由本发明实施例提供的提供方的多方数据联合查询装置或服务器来执行,该装置可采用硬件和/或软件的方式实现。如图4所示,具体包括如下步骤:s401,接收管理方下发的本地提供方的查询指令,其中查询指令由管理方通过如下方式确定:解析多方联合查询语句,得到逻辑执行计划;根据逻辑执行计划中各节点所属的提供方进行处理,得到各提供方的物理执行计划;根据各提供方的物理执行计划,生成各提供方的查询指令。示例性的,管理方对接收到的多方联合查询语句进行解析得到逻辑执行计划,对得到的逻辑执行计划进行优化后,采用优化的后逻辑执行计划,根据各节点所属的提供方进行处理,得到各提供方的物理执行计划,并确定各提供方的物理执行计划中各算子的标记类型,得到最终的物理执行计划,进而生成各提供方的查询指令,发送给对应的各提供方,各提供方接收管理方下发给本地提供方的查询指令。需要说明的是,管理方生成本地提供方的查询指令的具体过程可以与上述各实施例相同,对此不再赘述。可选的,在提供方接收到任务后,可以先由各提供方的数据仓库管理员进行审核,审核后将开启多方计算任务等待对方协同执行。s402,执行接收的查询指令,得到查询结果。可选的,由于本发明实施例中的查询指令中各算法都标注有该算法的标记类型,所以在执行接收的查询指令时,可以是:根据查询指令中待执行的当前算子的标记类型和数据提供方,执行当前算子。具体的,当前算法的标记类型有单方计算算子、多方非混合算子以及多方混和列算子。对于一个查询指令来说,提供方需要针对不同标记类型的算子采用不同的执行方式进行计算;针对同一标记类型的算子,根据该算子的具体算法,也可能是采用不同的执行方式进行计算。具体的本地提供方如何根据各种不同算子的标记类型和数据提供方,执行当前算子的具体执行方式,将在下述实施例进行详细介绍。示例性的,各提供方在接收到其对应的查询指令后,根据查询指令中待执行的当前算子的标记类型和数据提供方,执行当前算子,协同进行数据的查询。可选的,各提供方节点在协同进行数据查询时,要先保证各提供方之间网络链接联通,在接收到的查询指令时,根据物理执行计划按照后续遍历顺序(即先执行物理执行计划中的叶子节点后执行根节点的顺序)依次遍历执行各节点算子,从而完成协同执行数据的查询操作。在完成本次数据查询后,若最上层的节点类型为smlo节点,则由数据的一方将结果同步给另一方;若最上层的节点类型为smco节点,则根据多方计算协议显示查询结果数据。本实施例提供了一种多方数据联合查询方法,通过接收管理方下发的标注有各算子标记类型的查询指令,根据查询指令中待执行的当前算子的标记类型和数据提供方,执行当前算子,协同进行数据的查询。实现了一种保护提供方数据安全性的多方计算方法,根据算子标记类型的不同,采用不同的执行方法,从而进一步提高执行数据查询的效率。实施例四图5是本发明实施例四提供的一种多方数据联合查询方法的流程图,该方法在上述各实施例的基础上进一步的优化,具体给出了根据查询指令中待执行的当前算子的标记类型和数据提供方,执行当前算子的情况介绍。如图5所示,该方法包括:s501,接收管理方下发的本地提供方的查询指令,其中所述查询指令由所述管理方通过如下方式确定:解析多方联合查询语句,得到逻辑执行计划;根据所述逻辑执行计划中各节点所属的提供方进行处理,得到各提供方的物理执行计划;根据各提供方的物理执行计划,生成各提供方的查询指令。s502,依次确定查询指令中各算法的标记类型。示例性的,针对每一个提供方,在执行接收的查询指令时,按照后续遍历顺序依次遍历该提供方的物理执行计划的各节点算子,确定当前要执行的算子的标记类型,根据当前算子的标记类型和具体的数据提供方,来确定具体执行当前算子的方法,具体包括以下几种执行方法。s503,若当前算子的标记类型是单方计算算子,则判断当前算子的数据来源是否为本地提供方,若是,则执行s504,若否,则执行s505。若当前算子的标记类型是单方计算算子,则判断当前算子要执行的查询操作涉及的数据是否都来源与本地提供方(即数据来源于自己的数据仓库),若是,则执行s504,执行该单方计算算子,若否,则执行s505拒绝执行单方计算算子。s504,若当前算子的标记类型是单方计算算子,且当前算子的数据来源于本地提供方,则执行单方计算算子。示例性的,若图3b所示的标注有算子标记类型的物理执行计划为提供方a的物理计划,在执行该物理执行计划的节点33中的scantable算子时,由于该算子的数据来源是提供方a的表a中的数据,即数据来源于本地提供方,则此时提供方a执行该单方计算算子(即scantable算子),查询出表a中x值大于500的各数据值。s505,若当前算子的标记类型是单方计算算子,且当前算子的数据来源于其他提供方,则拒绝执行单方计算算子。示例性的,若图3b所示的标注有算子标记类型的物理执行计划为提供方b的物理计划,在执行该物理执行计划的节点34中的scantable算子时,由于该算子的数据来源是提供方a的表a中的数据,即数据来源于非本地提供方,则此时提供方b拒绝执行该单方计算算子(即scantable算子)。s506,若当前算子的标记类型是多方非混合算子,则判断当前算子是否为求交算子,若是,则执行s507,若否,则执行s508。示例性的,若当前算子的标记类型是多方非混合算子,则判断当前算子是否是求交算子(即执行求交集运算的算子),若是,则执行s507,执行该单方计算算子,若否,则执行s508,对其进行不同于求教算子的单方计算算子的执行方法。s507,若当前算子的标记类型是多方非混合算子,且当前算子是求交算子,则基于隐私求交算法执行求交计算,得到包括原数据表行号信息的求交结果;其中求交结果中来源于其他提供方的数据使用占位符表示。其中,隐私求交算法可以是对隐私数据执行求交运算的算法,可以是diffie-hellman快速求交算法,还可以是其他算法,对此本实施例不进行限定。原始数据表行号数据,可以是对于数据表中的某一个数据,其在数据表中所在行数或列数的具体信息。示例性的,若图3b所示的标注有算子标记类型的物理执行计划,在执行该物理执行计划的节点32中的求交算子时,对本次交算子运算所对应的a表的userid字段所在行数和b表的userid字段所在行数采用diffie-hellman快速求交算法(即隐私求交算法)执行求交计算。求交结果中保留原来数据表的行号信息;再根据隐私求交算法执行求交计算的计算结果(包括交集数据以及该交集数据的行号信息)重新构建数据,得到包括原始数据表行号信息的求交结果。例如,若a表userid字段数据为1,2,3,4,5;b表userid字段数据为2,4,5,6,7,则采用diffie-hellman快速求交算法执行求交运算后,得到交集数据2、4、5,将交集数据2、4、5及其所在行号信息作为求交结果。其中,图3b中,提供方a和提供方b都执行该求交算子,但各提供的求交结果来源与另一方的数据使用占位符标识(如stub),来表示。s508,若当前算子的标记类型是多方非混合算子,且不是求交算子,则对当前算子中来源于本地提供方的数据进行计算,得到本地计算结果;获取其他提供方对当前算子中来源于其他提供方的数据进行计算,得到的其他计算结果,其中其他计算结果中包括原数据表行号信息。其中,当前算子为非求交算子的其他算子,可以包括但不限于:表达式计算算子,过滤算子,排序算子和聚合算子中的至少一种。示例性的,若当前算算子是非求交算子的其他多方非混合算子,则当前算子对源于本地数据仓库中的数据进行计算,对于其他提供方的数据拒绝执行运算,等待其他提供方对当前算子中来源于其他各提供方的数据进行计算,并获取他算提供方的计算结果。可选的,每一个提供方在当前算子中来源与本地数据仓库中的数据计算完成后,都将本次计算结果同步给其他各提供方,以使其他各提供方接收后进行当前算子计算结果的数据同步。为了保证各提供方数据的隐私性,各提供方向其他提供方发送计算结果时,只发送原数据表的行号信息,不发送具体的数据,其他各提供方在接收到当前算子的计算结果进行计算结果同步时也只同步行号,不同步具体的数据值。具体的,若当前算子为表达式(project)算子,且执行该算子的数据来源于本地数据仓库,则从本地数据仓库中获取对应的数据执行该project算子,并将计算结果的原数据表的行号信息发送给其他提供方;若执行该算子的数据来源于其他提供方的数据仓库,则接收其他提供方发送的计算结果的原数据表的行号信息,其他计算结果中数据使用占位符表示,即其他提供方计算结果中的具体数据在本地提供方采用占位符标识标识。若当前算子为过滤(filter)算子,且执行该算子的数据来源于本地数据仓库,则从本地数据仓库中获取对应的数据进行该过滤算子运算后,将运算结果的原数据表的行号信息过滤发送给其他各提供方;若执行该算子的数据来源于其他提供方的数据仓库,则接收其他提供方发送的其他计算结果的原始数据表的行号信息。例如,filter算子对应提供方a,提供方a执行filter算子后的过滤后剩下的结果为1,3,4行的数据,然后将结果1,3,4行的行号传递给提供方b,即而使得提供方b同步本次过滤结果。可选的,其他计算结果中的数据也可以使用占位符表示。若当前算子是排序(sort)算子或聚合(agg)算子,且执行该算子的数据来源于本地数据仓库,则从本地数据仓库中获取对应的数据,针对sort算子或agg算子对获取的数据按列分别进行排序或聚合运算,并将计算结果的原数据表的行号信息发送至其他提供方;若执行该算法的数据来源于其他提供方的数据仓库,则接收其他提供方发送的其他计算结果的原数据表的行号信息,例如,若当前算子为排序算子,且本地提供方将原数据:100,33,444执行排序算子后,得到排序结果为33,100,444,本次排序是将原数据的行号信息从1,2,3变成了2,1,3,将新排序后的行号信息2,1,3同步给协同进行数据查询的各其他提供方。若当前算子为聚合算子,且本地提供方的原数据为:1,2,33,55,55groupbycountry(*),则执行聚合算子后,得到的结果为1,2;33,1;55,2,本次进行聚合算子后的数据行号变成了:1,1,2;3,3;4,4,5,将聚合后的行号信息1,1,2;3,3;4,4,5同步给协同进行数据查询的各其他提供方。可选的,其他计算结果中的数据也可以使用占位符表示。可选的,若当前算子为排序算子或聚合算子时,各提供方在获取其他提供方对所述当前算子中来源于其他提供方的数据进行计算,得到的其他计算结果之后,还包括:对本地计算结果和其他计算结果进行排序或聚合处理。从而得到最终的处理结果。具体的,排序算子和聚合算子的计算结果需要由本地提供方和其他提供方的所有计算结果进行汇总处理后才可以得到最终的计算结果。即若当前算子为排序算子,则对本地排序结果和接收到的各提供方的排序结果进行汇总排序后得到最终的排序结果;若当前算子为聚合算子,则对本地聚合结果和接收到的各提供方的聚合结果进行汇总聚合后得到最终的聚合结果。例如,以当前算子为排序算子,提供方a本地的排序结果是将表a中100,33,444的排序结果变为33,100,444;接收到的提供方b的排序结果是将表b中的23,56,111的排序结果变为56,111,23;此时提供方a需要对本地排序结果和提供方b的排序结果进行总和,即将表a中行号信息变为2,1,3以及将表b中的行号信息变为2,3,1作为最终的排序结果。若当前算子为极限(limit)算子,则本地提供方直接从本地数据仓库中获取对应的数据进行极限算子运算,提取该极限算子对应的数据作为计算结果。例如,极限算子为limit5,则本地提供方要获取数据表中前5行的数据作为计算结果,若极限算子为limit5,10,则本地提供方要获取数据表中第5行到第10行的数据作为计算结果。s509,若当前算子的标记类型是多方混合列算子,则根据多方计算协议执行当前算子。示例性的,若当前算子的标记类型为多方混合列算子,如图3b中的节点30中的agg算子和节点31中的project算子,则数据提供方a和数据提供方b基于多方计算协议来执行agg算子或project算子。其中多方计算协议可以是现有技术中任何一种约定多方协同进行数据查询的协议,对此本实施例不进行限定。具体的,可以包括以下几个步骤:查看当前数据是否已进行秘密共享,若没有进行则需要先对当前数据进行秘密共享,在当前数据进行秘密共享后,各提供方都持有多方混合列算子进行计算所需数据,然后再针对具体的算子(如表达式算子、过滤算子、排序算子、聚合算子以及求交算子等)基于多方计算协议进行计算。本实施例提供了一种多方数据联合查询方法,给出了提供方接收管理方下发的标注有各算子标记类型的查询指令后,针对具体的每一种标记类型的算子如何执行运算进行了详细介绍,从而实现各提供方协同进行数据的查询。根据算子标记类型的不同,采用不同的执行方法,从而进一步提高执行数据查询的效率。实施例五图6是本发明实施例五提供的一种多方数据联合查询装置的结构示意图,该装置可执行本发明实施例一或实施例二任意实施例所提供的多方数据联合查询方法,该装置配置于管理方,具备执行方法相应的功能模块和有益效果。如图6所示,该装置包括:逻辑计划确定模块601,用于解析多方联合查询语句,得到逻辑执行计划;物理计划确定模块602,用于根据所述逻辑执行计划中各节点所属的提供方进行处理,得到各提供方的物理执行计划;指令生成发送模块603,用于根据各提供方的物理执行计划,生成各提供方的查询指令,并且向各提供方发送所述查询指令,其中所述查询指令用于指示各提供方协同进行查询。本实施例提供了一种多方数据联合查询装置,通过对多方联合查询语句解析得到的逻辑执行计划进行处理,得到各提供方的物理执行计划,进而生成各提供方的查询指令,并发送至各提供方。实现了一种保护提供方数据安全性的多方计算方法,在保证查询数据安全性的前提下,提高了数据查询效率。进一步的,上述物理计划确定模块602具体用于:根据所述逻辑执行计划,分别生成各提供方的物理执行计划;确定各提供方的物理执行计划中的各算子的标记类型,其中,所述标记类型为单方计算算子,多方非混合算子或多方混合列算子。进一步的,上述装置还包括:节点合并模块,用于若所述逻辑执行计划中任一节点属于唯一提供方,则合并该节点以及该节点的子节点,作为单方计算节点。实施例六图7是本发明实施例六提供的一种多方数据联合查询装置的结构示意图,该装置可执行本发明实施例三或实施例四任意实施例所提供的多方数据联合查询方法,该装置配置于提供方,具备执行方法相应的功能模块和有益效果。可选的,上述实施例五所述的配置于管理方的多方数据联合查询装置可以生成各提供方的查询指令发送至各提供方,本实施例中配置于各提供方的多方数据联合查询装置具体来接收并执行该查询指令。如图7所示,该装置包括:查询指令接收模块701,用于接收管理方下发的本地提供方的查询指令,其中所述查询指令由所述管理方通过如下方式确定:解析多方联合查询语句,得到逻辑执行计划;根据所述逻辑执行计划中各节点所属的提供方进行处理,得到各提供方的物理执行计划;根据各提供方的物理执行计划,生成各提供方的查询指令;查询指令执行模块702,用于执行接收的查询指令,得到查询结果。本实施例提供了一种多方数据联合查询装置,通过接收管理方下发的标注有各算子标记类型的查询指令,根据查询指令中待执行的当前算子的标记类型和数据提供方,执行当前算子,协同进行数据的查询。实现了一种保护提供方数据安全性的多方计算方法,根据算子标记类型的不同,采用不同的执行方法,从而进一步提高执行数据查询的效率。进一步的,上述查询指令执行模块702具体用于:根据所述查询指令中待执行的当前算子的标记类型和数据提供方,执行所述当前算子。进一步的,上述查询指令执行模块702具体用于:若当前算子的标记类型是单方计算算子,且当前算子的数据来源于本地提供方,则执行所述单方计算算子;若当前算子的标记类型是单方计算算子,且当前算子的数据来源于其他提供方,则拒绝执行所述单方计算算子。进一步的,上述查询指令执行模块702具体用于:若当前算子的标记类型是多方非混合算子,且当前算子是求交算子,则基于隐私求交算法执行求交计算,得到包括原数据表行号信息的求交结果;其中所述求交结果中来源于其他提供方的数据使用占位符表示。进一步的,上述查询指令执行模块702具体用于:若当前算子的标记类型是多方非混合算子,则对所述当前算子中来源于本地提供方的数据进行计算,得到本地计算结果;获取其他提供方对所述当前算子中来源于其他提供方的数据进行计算,得到的其他计算结果,其中所述其他计算结果中包括原数据表行号信息。其中,所述当前算子是表达式计算算子,过滤算子,排序算子和聚合算子中的至少一种。进一步的,上述装置还排序集合处理模块,用于若当前算子是排序算子或聚合算子,则获取其他提供方对所述当前算子中来源于其他提供方的数据进行计算,得到的其他计算结果之后,对本地计算结果和其他计算结果进行排序或聚合处理。实施例七图8为本发明实施例七提供的一种服务器的结构示意图。图8示出了适于用来实现本发明实施方式的示例性服务器80的框图。图8显示的服务器80仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图7所示,该服务器80以通用计算设备的形式表现。该服务器80的组件可以包括但不限于:一个或者多个处理器或者处理单元801,系统存储器802,连接不同系统组件(包括系统存储器802和处理单元801)的总线803。总线803表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(isa)总线,微通道体系结构(mac)总线,增强型isa总线、视频电子标准协会(vesa)局域总线以及外围组件互连(pci)总线。服务器80典型地包括多种计算机系统可读介质。这些介质可以是任何能够被服务器80访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。系统存储器802可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(ram)804和/或高速缓存存储器805。服务器80可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统806可以用于读写不可移动的、非易失性磁介质(图8未显示,通常称为“硬盘驱动器”)。尽管图8中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如cd-rom,dvd-rom或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线803相连。系统存储器802可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。具有一组(至少一个)程序模块807的程序/实用工具808,可以存储在例如系统存储器802中,这样的程序模块807包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块807通常执行本发明所描述的实施例中的功能和/或方法。服务器80也可以与一个或多个外部服务器809(例如键盘、指向设备、显示器810等)通信,还可与一个或者多个使得用户能与该设备交互的设备通信,和/或与使得该服务器80能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口811进行。并且,服务器80还可以通过网络适配器812与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图8所示,网络适配器812通过总线803与服务器80的其它模块通信。应当明白,尽管图中未示出,可以结合服务器80使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。处理单元801通过运行存储在系统存储器802中的程序,从而执行各种功能应用以及数据处理,例如,若服务器80配置于管理方,则实现本发明实施例一或实施例二所述的多方数据联合查询方法;若服务器80配置于提供方,则实现本发明实施例三或实施例四所述的多方数据联合查询方法。实施例八本发明实施例八还提供了一种计算机可读存储介质,其上存储有计算机程序,若该计算机可读存储介质为管理方的计算机可读存储介质,则该程序被处理器执行时可实现本发明实施例一或实施例二所述的多方数据联合查询方法;若该计算机可读存储介质为提供方的计算机可读存储介质,则该程序被处理器执行时可实现本发明实施例三或实施例四所述的多方数据联合查询方法。本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。上述实施例序号仅仅为了描述,不代表实施例的优劣。本领域普通技术人员应该明白,上述的本发明实施例的各模块或各操作可以用通用的计算装置来实现,它们可以集中在单个计算装置上,或者分布在多个计算装置所组成的网络上,可选地,他们可以用计算机装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或操作制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间的相同或相似的部分互相参见即可。以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1