发明内容
本申请提供一种复合模型数据处理方法及系统,能够解决复杂应用场景下因复合模型数据关系复杂、查询数据频繁而大量占用系统资源的问题。
为了解决上述问题,本申请公开了一种复合模型数据处理方法,包括以下步骤:
接收并解析客户端传入的初始查询条件和要求返回的对象;
基于所述初始查询条件确定初始模型,基于所述要求返回的对象确定目标模型;
基于预定的模型关系确定所述目标模型与初始模型的关联关系,并根据所述关联关系确定从初始模型到目标模型的查询路径;
获取查询路径中各模型的查询方法;
按照所述查询路径的顺序自动查询各模型的数据,其中,初始模型数据通过将初始查询条件传入初始模型对应的查询方法获取,查询路径中其余的模型所需要的查询条件从上一模型数据中提取,并通过将提取的查询条件分别传入各模型对应的查询方法来获取对应的模型数据;
从所有的模型数据中提取要求返回的对象,并返回给客户端。
进一步地,所述根据所述关联关系确定从初始模型到目标模型的查询路径包括:
若初始模型和目标模型直接关联,查询路径为初始模型到目标模型;
若初始模型和目标模型间接关联,之间还包括中间模型,查询路径为初始模型到中间模型到目标模型。
进一步地,所述根据所述关联关系确定从初始模型到目标模型的查询路径包括:
选取中间模型数量最少的路径为查询路径。
进一步地,所述根据所述关联关系确定从初始模型到目标模型的查询路径包括:
将各模型的关联关系读取到模型无向图数据结构中;
遍历所述模型无向图获取从初始模型到目标模型的查询路径。
进一步地,所述方法还包括:
采用DSL定义各模型的关联关系。
进一步地,所述各模型的查询方法采用统一语言定义。
进一步地,所述方法还包括:
采用DSL定义各模型的查询方法。
进一步地,所述接收并解析客户端传入的初始查询条件和要求返回的对象包括:
通过统一的客户端API接收并解析客户端传入的初始查询条件和要求返回的对象。
为了解决上述问题,本申请还公开了一种复合模型数据处理系统,包括:
数据接收模块,用于接收并解析客户端传入的初始查询条件和要求返回的对象;
查询模型确定模块,用于基于所述初始查询条件确定初始模型,基于所述要求返回的对象确定目标模型;
查询路径确定模块,用于基于预定的模型关系确定所述目标模型与初始模型的关联关系,并根据所述关联关系确定从初始模型到目标模型的查询路径;
查询方法获取模块,用于获取查询路径中各模型的查询方法;
数据查询模块,用于按照所述查询路径的顺序自动查询各模型的数据,其中,初始模型数据通过将初始查询条件传入初始模型对应的查询方法获取,查询路径中其余的模型所需要的查询条件从上一模型数据中提取,并通过将提取的查询条件分别传入各模型对应的查询方法来获取对应的模型数据;
数据返回模块,用于从所有的模型数据中提取要求返回的对象,并返回给客户端。
进一步地,所述查询路径确定模块包括:
路径选择单元,用于选取中间模型数量最少的路径为查询路径。
进一步地,所述查询路径确定模块包括:
处理单元,将各模型的关联关系读取到模型无向图数据结构中,遍历所述模型无向图获取从初始模型到目标模型的查询路径。。
进一步地,所述系统还包括:
关系定义模块,用于采用DSL定义各模型的关联关系和查询方法。
与现有技术相比,本申请包括以下优点:
本申请的复合模型数据处理方法和系统通过统一语言来编写各种模型的查询方法以及模型关联关系的方式来实现模型数据的自动获取。客户端只需要通过统一的输入接口,输入单个查询条件和要求返回的对象,系统便可以根据模型关联关系以及查询方法实现自动化的数据路由,从而自动获取到所有关联模型的数据,并根据客户端要求对获取到的数据进行处理,返回客户端所需要的数据。避免针对不同的模型开发不同的接口调用代码,在实际数据获取时需要多次调用的情况而造成的开发效率低和成本高的情况。大大地加快了复杂场景数据聚合的开发效率和成本,同时提高了复杂应用场景下复合模型数据查询及处理的效率。
另外,当应用场景中的相关模型发生变化时,例如新增或减少模型、或者模型间的关联关系发生变化时,只需要加入或减少该模型对应的查询方法以及修改关联关系,无需重新编写或者删除调用代码,提高系统后续的维护效率,降低维护成本。
优选地,通过模型无向图的方式来唯一确定模型关联关系,可以实现数据的快速处理,避免出现错误,提高查询准确性。另外,无向图结合DSL的方式,可以快速的获取模型数据,从而能够快速对客户端请求进行响应。
当然,实施本申请的任一产品不一定需要同时达到以上所述的所有优点。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
本申请的复合模型数据处理方法及系统用于对复杂应用场景中的多个模型数据的查询。客户端通过系统提供的统一查询接口输入单一的初始查询条件以及要求返回的对象,系统自动根据该初始查询条件确定初始模型、根据要求返回的对象确定目标模型,并根据预先存储的各模型关联关系来确定从初始模型到目标模型的所需要经过的所有模型,从而确定以初始模型为起点、目标模型为终点的查询路径。在整个查询路径中,从上一模型数据中提取下一模型所需要的查询条件,从而获取下一模型数据,直到获取到目标模型数据。最后,根据要求返回的对象对所有获取到的模型数据进行处理来获取客户端需要的返回结果。在整个过程中,只需要输入初始查询条件,系统便能够实现自动查询。
参照图1,示出本申请的一种复合模型数据处理方法实施例一,包括以下步骤:
步骤101,接收并解析客户端传入的初始查询条件和要求返回的对象。
查询系统中预先设置统一的查询接口,来接收客户端传入的查询请求。也即,无论是需要查询应用场景中哪一个模型数据都通过该统一的查询接口传入。
查询系统在接收客户端传入的参数后,会对其进行解析,获取其中的初始查询条件和要求返回的对象。本申请适用于任何数量模型中数据的查询,但是对于两个及以上数量的模型具有很好的效果,尤其是数量众多的模型数据,查询效果明显。因此,在本申请中,初始查询条件为一个模型的查询条件,要求返回的对象至少会包括两个模型的数据。
步骤102,基于所述初始查询条件确定初始模型,基于所述要求返回的对象确定目标模型。
其中,每一个模型都会设定对应的查询方法和条件,当获取到某一模型的查询条件,便可以根据其设定的查询方法来获取其中的数据。因此,初始查询条件可以确定一个初始模型。根据要求返回的对象中所需要的信息属于哪一个模型,则该模型为目标模型,目标模型的数量根据要求返回的对象数量确定。一般情况下,当用户通过客户端输出查询条件和要求返回的对象时,会直接输入其中一个目标模型对应的查询条件,也即,在大部分情况下,初始模型会是所有目标模型中的一个。
步骤103,基于预定的模型关系确定所述目标模型与初始模型的关联关系,并根据所述关联关系确定从初始模型到目标模型的查询路径。
因为所有模型都在同一应用场景下,会共享该应用场景下的数据,任何一个模型都会至少与一个模型共享部分数据,即直接关联,因此,在同一应用场景下,通过一个模型可以关联到应用场景下的任何一个模型,那么任何两个模型之间都能够联系起来,即都具有关联关系。例如,模型A与模型B直接关联,模型B和模型C直接关联,即使模型A和模型C并没有直接关联,模型A也能够通过模型B间接关联到模型C。
因此,通过对同一应用场景下各模型之间关联关系的梳理,并预先存储在系统中。当确定目标模型与初始模型后,从系统中可以直接获取两者的关联关系。根据关联关系确定查询路径包括:若初始模型与目标模型为直接关联,那么,查询路径为:初始模型->目标模型;若初始模型与目标模型为间接关联,即二者之间还需要中间模型来建立关联,那么查询路径为:从初始模型->中间模型->目标模型。其中,中间模型的数量可能为一个也可能为多个。
另外,在某些情况下根据关联关系可以确定出不止一条查询路径,为了便于管理和提高系统处理数据的效率,系统可以自动选取最短的一条查询路径,即中间模型数量最少的一条查询路径。
优选地,在建立关联关系的时候,还可以对关联关系进行处理,使任何两个模型之间的关联关系唯一,即通过关联关系只能唯一确定一条查询路径。其中,关联关系可以通过DSL(Domain Specific Language,领域专用语言)。通过关联关系确定查询路径可以通过将模型间的关联关系读取到一个模型无向图数据结构中来实现。具体可以通过如下方式实现:
将各模型的关联关系读取到模型无向图数据结构中;
遍历所述模型无向图获取从初始模型到目标模型的查询路径。
步骤104,获取查询路径中各模型的查询方法,所述各模型的查询方法采用统一语言定义。
同一应用场景下,各模型对应的查询方法并不相同,在系统中预先定义各模型对应的查询方法,在进行模型数据查询之前,首先获取各模型的查询方法,根据查询方法在模型数据中自动提取查询条件,并将提取的查询条件传入该查询方法进行查询,从而实现模型数据的自动查询。其中,,从而在后续自动查询中能够实现快速和自动查询。优选地,各模型的查询方法通过DSL来定义。
步骤105,按照所述查询路径的顺序自动查询各模型的数据,其中,初始模型数据通过将初始查询条件传入初始模型对应的查询方法获取,查询路径中其余的模型所需要的查询条件从上一模型数据中提取,并通过将提取的查询条件分别传入各模型对应的查询方法来获取对应的模型数据。
因为查询方法中定义了各种模型的查询条件,当获取到某一模型数据后,便可以根据对应的查询方法来提取其中所需要的查询条件,并通过高级语言反射机制将查询条件传入对应的查询方法来自动获取模型数据。查询方法采用统一语言定义,在自动查询的过程中,可以实现自动快速的查询,无需重新针对各模型编写接口调用代码。
步骤106,从所有的模型数据中提取要求返回的对象,并返回给客户端。
在整个查询过程中获取到的所有模型数据都会暂时存储,当查询结束后,系统会根据要求返回的对象来对模型数据进行提取,获取客户端所需要的数据,并返回给客户端。因为在查询过程中,若利用到中间模型,则也会获取到中间模型数据,而这些数据并不是客户端所需要的,通过对模型数据的处理,能够保证准确的返回客户端所需要的数据。假设在某一应用场景下包括如下模型:商品模型O、交易模型T、会员模型M、模型G、模型P、模型C、模型X、模型A以及模型D,根据各模型之间的关联关系建立如图2所示的模型无向图。可以看出,任何两个模型之间只能唯一确定一条路径。其中,应用场景下的各模型是根据其业务类型来进行划分的,每个模型都包含有与各自业务相关的信息。例如,商品模型包含的商品的基本信息以及其他动态信息(如交易信息等等),交易模型包含的是交易双方以及商品信息、会员模型包含的是会员的基本信息及其行为信息。以此类推,若应用场景下还包含有其他业务类型,那么便可以包含有对应的模型,该模型所包含的信息即是与该业务相关的信息。
在进行数据处理之前,首先需要在系统中定义各模型的查询方法以及各模型的关联关系。客户端通过系统提供的统一的客户端API传入初始的查询条件和要求返回的对象。其中,在具体实现时,统一的客户端API可以以查询界面的形式出现,用户只要在查询界面的对应输入框中输入需要查询和返回的信息即可。用户可以在查询界面选择查询选项和要求返回的对象,并将查询条件的具体信息输入选择的查询选项中。系统对传入的初始查询条件和要求返回的对象进行解析,遍历模型无向图确定所需要查询的模型列表,即确定出所有的查询路径。
例如,初始查询条件为商品ID,要求返回的对象为商品和会员。那么,用户可以在系统的查询界面中选中商品ID这一选项,并在这一选项对应的输入框中填入具体的商品ID数值,同时在查询界面中要求返回的对象栏中选择商品和会员两个模型。在所有信息输入完成后,可以点击提交或确定等按钮来向系统提交查询请求。当系统接收到该查询请求时,首先确定初始查询条件可以直接查询的初始模型为商品模型,要求返回的对象所需要的目标模型为商品模型和会员模型。那么系统会从预存的模型无向图中确定从商品模型到会员模型的查询路径,如图2所示,两者为直接关联,即查询路径为商品模型到会员模型。
系统在确定路径的同时会获取路径中各模型的查询方法,然后开始进行查询。首先会根据商品ID和商品模型的查询方法来获取商品模型数据,然后从获取的商品模型数据中提取会员模型所需要的查询条件,例如,会员ID,通过高级语言反射机制来调用会员模型的查询方法并将提取的会员ID传入会员模型的查询方法中来获取会员模型数据。当获取两个模型的数据之后,根据要求返回的对象对数据进行处理和组装,返回给客户端。具体的,返回结果可以是包含模型对象结果集的哈希表。
可以理解,对于有中间模型的查询路径来说,例如,初始查询条件为会员ID,要求返回的对象为会员模型和交易模型,那么商品模型为中间模型,在查询过程中需要获取商品模型数据,并从中提取交易模型的查询条件,但是商品模型数据并不需要返回给客户端,因此,在数据查询完毕后,还需要对处理进行处理和组装,只提取会员模型数据和交易模型数据返回给客户端,而商品模型的数据则无需返回,其只是作为提取交易模型数据的辅助数据。优选地,对于整个查询过程中所获取的数据可以暂时存储在预设位置,从而便于后续处理。
参照图3,示出本申请的一种复合模型数据处理系统,包括数据接收模块10、查询模型确定模块20、查询路径确定模块30、查询方法获取模块40、数据查询模块50和数据返回模块60。
数据接收模块10,用于接收并解析客户端传入的初始查询条件和要求返回的对象。
查询模型确定模块20,用于基于所述初始查询条件确定初始模型,基于所述要求返回的对象确定目标模型。
查询路径确定模块30,用于基于预定的模型关系确定所述目标模型与初始模型的关联关系,并根据所述关联关系确定从初始模型到目标模型的查询路径。优选地,查询路径确定模块包括路径选择单元或处理单元。路径选择单元,用于选取中间模型数量最少的路径为查询路径。处理单元,用于将各模型的关联关系读取到模型无向图数据结构中;遍历所述模型无向图获取从初始模型到目标模型的查询路径。
查询方法获取模块40,用于获取查询路径中各模型的查询方法,所述各模型的查询方法采用统一语言定义。
数据查询模块50,用于按照所述查询路径的顺序自动查询各模型的数据,其中,初始模型数据通过将初始查询条件传入初始模型对应的查询方法获取,查询路径中其余的模型所需要的查询条件从上一模型数据中提取,并通过将提取的查询条件分别传入各模型对应的查询方法来获取对应的模型数据。
数据返回模块60,用于从所有的模型数据中提取要求返回的对象,并返回给客户端。
优选地,该系统还包括定义单元,用于采用DSL定义各模型的关联关系和查询方法。
本申请的复合模型数据处理方法和系统通过统一语言来编写各种模型的查询方法以及模型关联关系的方式来实现模型数据的自动获取。客户端只需要通过统一的输入接口,输入单个查询条件和要求返回的对象,系统便可以根据模型关联关系以及查询方法实现自动化的数据路由,从而自动获取到所有关联模型的数据,并根据客户端要求对获取到的数据进行处理,返回客户端所需要的数据。避免针对不同的模型开发不同的接口调用代码,在实际数据获取时需要多次调用的情况而造成的开发效率低和成本高的情况。大大地加快了复杂场景数据聚合的开发效率和成本,同时提高了复杂应用场景下复合模型数据查询及处理的效率。
另外,当应用场景中的相关模型发生变化时,例如新增或减少模型、或者模型间的关联关系发生变化时,只需要加入或减少该模型对应的查询方法以及修改关联关系,无需重新编写或者删除调用代码,提高系统后续的维护效率,降低维护成本。
优选地,通过模型无向图的方式来唯一确定模型关联关系,可以实现数据的快速处理,避免出现错误,提高查询准确性。另外,无向图结合DSL的方式,可以快速的获取模型数据,从而能够快速对客户端请求进行响应。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本申请所提供的复合模型数据处理方法及系统进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。