发明内容
本发明实施例要解决的技术问题是解决联合多表查询带来的查询低效问题,本发明的目的是提供一种关联关系的快速查询方法及装置,能够实现准确、快速、高效的关联关系查询。
为解决上述技术问题,本发明提供的实施例是通过以下技术方案实现的:
一种关联关系的查询方法,包括步骤:
接收携带对象标识和方案标识的关联关系查询请求;
从预置的关联关系表中查询与所述方案标识关联的关联关系表,如果查到则获取所述方案标识关联的关联关系表;
在所述获取到的关联关系表中查询所述对象标识对应的关联关系;
所述预置关联关系表用于保存定义的模型对象之间依存的关联关系,并保持与定义的模型对象标识之间的一致性;
所述预置关联关系表的预置方法是:用关联关系表模板给所述方案建立对应的预置关联关系表,所述的关联关系表模板是由绑定类和被绑定类构成,或者由绑定类、一至多个中间类和被绑定类构成;按照关联关系表模板,将方案涉及的对象标识,从定义模型的数据表同步映射到所述方案的预置关联关系表中。
进一步地,所述预置关联关系表的预置方法,进一步包括:
根据定义的数据模型及其为模型对象之间依存的关联关系所定义的方案,按需要设置关联关系预置标记信息,用关联关系表模板给所述有关联关系预置标记的方案建立对应的预置关联关系表;
对于有关联关系预置标记的方案,按照关联关系表模板,将方案涉及的对象标识,从定义模型的数据表同步映射到所述方案的预置关联关系表中。
进一步地,所述将方案涉及的对象标识,从定义模型的数据表同步映射到所述方案的关联关系表的方法,进一步还包括:
获取所述定义方案的对象或对象属性发生变动的信息,包括变动对象的标识、变动对象属性的标识、变动对象所属的方案标识以及对象变动类型,所述对象变动类型包括对象增加、对象删除或对象属性的修改;
根据获得的对象变动信息,检查变动对象所属的方案是否有关联关系预置标记有效,如果有效,根据所述变动对象标识,通过读取定义模型的数据表对变动的对象计算其最新的关联关系,在计算完成后按照关联关系表模板将计算结果映射到所述方案的关联关系表,并给所述方案设置最新计算完成标记。
进一步地,所述通过读取定义模型的数据表对变动的对象进行最新关联关系的计算,在计算完成后按照关联关系表模板将计算结果映射到所述方案的关联关系表,进一步包括,
组装所述变动对象的关联关系计算任务,并将携带对象变动信息的关联关系计算任务放入任务队列;
从任务队列中顺序取出关联关系计算任务;
根据组装在关联关系计算任务中的对象变动类型,将所述关联关系计算任务委托给相应的关联关系计算线程进行关联关系计算,在计算完成后按照关联关系表模板将计算结果更新到所述方案的关联关系表。
优选的,所述任务队列包括:增加队列、删除队列和修改队列,则所述将携带对象变动信息的关联关系计算任务放入任务队列具体包括:
若组装在关联关系计算任务中的对象变动类型是增加对象,则将所述携带变动对象标识及所属的方案标识的关联关系计算任务放入增加队列;
若组装在关联关系计算任务中的对象变动类型是删除对象,则将所述携带变动对象标识及所属的方案标识的关联关系计算任务放入删除队列;
若组装在关联关系计算任务中的对象变动类型是修改对象属性,则将所述携带变动对象标识、对象属性标识及所属的方案标识的关联关系计算任务拆分为两个任务,一个任务将携带变动对象标识及所述的方案标识的关联关系计算任务放入删除队列,另一个任务将携带变动对象标识及所述的方案标识的关联关系计算任务放入修改队列。
进一步地,所述从任务队列中顺序取出关联关系计算任务,并委托给相应关联关系计算线程具体包括:
从增加队列中顺序取出关联关系计算任务,并将所述关联关系计算任务委托给用于计算增加关联关系的关联关系计算线程,直到增加队列中没有关联关系计算任务;
从删除队列中顺序取出关联关系计算任务,并将所述关联关系计算任务委托给用于计算删除关联关系的关联关系计算线程,直到删除队列中没有关联关系计算任务;
从修改队列中顺序取出关联关系计算任务,将所述关联关系计算任务委托给用于计算增加关联关系的关联关系计算线程,直到修改队列中没有关联关系计算任务。
优选的,所述用于计算增加关联关系的关联关系计算线程进行关联关系计算具体包括:
关联关系计算线程根据组装在关联关系计算任务中的方案标识,读取方案涉及的定义模型数据库表,并根据组装在关联关系计算任务中的对象标识,在所述方案涉及的数据库表中查询对象的关联关系,并将查询到的关联关系添加到所述方案标识关联的关联关系表中。
同时,所述用于计算删除关联关系的关联关系计算线程进行关联关系计算具体包括:
关联关系计算线程根据组装在关联关系计算任务中的方案标识,在预置的关联关系表中获取与所述方案标识关联的关联关系表,并从所述获取到的关联关系表中删除组装在所述关联关系计算任务中的对象标识对应的关联关系。
所述的关联关系查询方法,进一步包括,检查所述方案是否完成了最新关联关系计算,如果已完成最新关联关系计算,则从关联关系数据表中查询所述方案中与所述对象标识相关联的关联关系。
所述的关联关系查询方法,还可以包括,从预置的关联关系表中查询与所述方案标识关联的关联关系表的方法,进一步包括:
根据方案标识,检查所述方案是否有关联关系预置标记有效,如果有效,表明能够查到与所述方案标识关联的关联关系表,否则,不能查到与所述方案标识关联的关联关系表。
从所述方案标识关联的关联关系表中查询所述对象标识对应的关联关系的方法,进一步包括:
根据方案标识,检查所述方案是否有关联关系预置标记有效,如果有效,继续检查所述方案是否完成了最新关联关系计算,如果已完成最新关联关系计算,则从关联关系数据表中查询所述方案中与所述对象标识相关联的关联关系。
一种关联关系的查询装置,包括模型定义单元,模型数据存储单元,对象操作单元和关联关系查询单元,其中,
模型定义单元,用于定义数据模型,包括类和方案的定义;
模型数据存储单元,用于存储定义模型的数据,包括类、对象和方案的数据;
对象操作单元,用于实现模型数据对象的增加、删除和修改;
关联关系查询单元,根据方案标识和对象标识,查询模型数据存储单元中所述方案和所述对象的数据以及与所述对象有关联关系的数据,找到所述方案标识中与所述对象标识相关联的关联关系;
其特征在于,还进一步包括,
关联关系表预置单元,给定义模型的定义方案建立预置关联关系表;所述预置关联关系表的预置方法是:用关联关系表模板给所述方案建立对应的预置关联关系表,所述的关联关系表模板是由绑定类和被绑定类构成,或者由绑定类、一至多个中间类和被绑定类构成;按照关联关系表模板,将方案涉及的对象标识,从定义模型的数据表同步映射到所述方案的预置关联关系表中;
关联关系数据存储单元,用于保存关联关系数据表;
所述的关联关系查询单元,根据接收携带对象标识和方案标识的关联关系查询请求,从关联关系数据存储单元的关联关系表中查询所述方案中与所述对象标识相关联的关联关系;还可以直接从模型数据存储单元的数据表中查询所述方案标识中与所述对象标识相关联的关联关系。
还可以进一步包括,
关联关系预置标记管理单元,根据需要给定义模型的定义方案设置关联关系预置标记信息,据此为设置关联关系标记信息的方案添加或删除关联关系预置标记;
所述的关联关系表预置单元,对添加关联关系预置标记的方案,用关联关系表模板建立所述方案对应的预置关联关系表;
所述的关联关系查询单元,根据接收携带对象标识和方案标识的关联关系查询请求,检查所述方案是否有关联关系预置标记有效,如果有效,则从关联关系数据存储单元的关联关系表中查询所述方案中与所述对象标识相关联的关联关系;还可以直接从模型数据存储单元的数据表中查询所述方案标识中与所述对象标识相关联的关联关系。
还可以进一步包括,
对象变动信息处理单元,获取模型数据存储单元数据表中的对象或对象属性发生变动的信息,包括变动对象的标识、变动对象属性的标识、变动对象所属的方案标识以及对象变动类型,所述对象变动类型包括对象增加、对象删除或对象修改;
关联关系计算单元,根据对象变动信息处理单元获得的对象变动信息,检查变动对象所属的方案是否有关联关系预置标记有效,如果有效,根据所述变动对象标识,读取当前模型数据存储单元中的数据表,对变动的对象计算其最新的关联关系,在计算完成后根据计算结果更新关联关系记录存储单元中变动对象所属方案的关联关系表,并给所述方案设置最新计算完成标记。
所述的关联关系查询单元,根据接收携带对象标识和方案标识的关联关系查询请求,检查所述方案是否有关联关系预置标记有效,如果有效,继续检查所述方案是否设置有最新计算完成标记有效,如果有效,则从关联关系数据存储单元的关联关系表中查询所述方案中与所述对象标识相关联的关联关系;还可以直接从模型数据存储单元的数据表中查询所述方案标识中与所述对象标识相关联的关联关系。
所述的关联关系查询单元,还可以是这样的,检查所述方案是否设置有最新计算完成标记有效,如果有效,根据接收携带对象标识和方案标识的关联关系查询请求,检查所述方案是否有关联关系预置标记有效,如果有效,则从关联关系数据存储单元的关联关系表中查询所述方案中与所述对象标识相关联的关联关系;还可以直接从模型数据存储单元的数据表中查询所述方案标识中与所述对象标识相关联的关联关系。
所述的关联关系计算单元进一步包括,
关系计算任务组装单元,用于在收到对象变动信息处理单元的对象变动通知时,组装所述变动对象的关联关系计算任务,调用关系计算任务添加单元;
关系计算任务添加单元,用于将携带对象变动信息的关联关系计算任务放入任务队列;
关系计算任务委托单元,用于从任务队列中顺序取出关联关系计算任务,根据组装在关联关系计算任务中的对象变动类型,将所述关联关系计算任务委托给相应的关联关系计算线程。
进一步地,所述任务队列包括:增加队列,删除队列和修改队列,则所述关系计算任务添加单元具体包括:
增加关系计算任务添加单元,用于当组装在关联关系计算任务中的对象变动类型是增加对象时,则将携带变动对象标识及所属的方案标识的关联关系计算任务放入增加队列;
删除关系计算任务添加单元,用于当组装在关联关系计算任务中的对象变动类型是删除对象时,将携带变动对象标识及所属的方案标识的关联关系计算任务放入删除队列;
修改关系计算任务添加单元,用于当组装在关联关系计算任务中的对象变动类型是修改对象属性时,将所述关联关系计算任务拆分为两个任务,一个任务将携带变动对象标识及所述的方案标识的关联关系计算任务放入删除队列,另一个任务将携带变动对象标识及所述的方案标识的关联关系计算任务放入修改队列。
进一步地,所述关系计算任务委托单元具体包括:增加关系计算任务委托单元,删除关系计算任务单元,修改关系计算任务委托单元;
所述增加关系计算任务委托单元,用于从所述增加队列中顺序取出关联关系计算任务,并将所述任务委托给用于计算增加关联关系的关联关系计算线程,直到所述增加队列中没有关联关系计算任务,则触发所述删除关系计算任务委托单元;
所述删除关系计算任务委托单元,用于从所述删除队列中顺序取出关联关系计算任务,并将所述任务委托给用于计算删除关联关系的关联关系计算线程,直到删除队列中没有关联关系计算任务,则触发所述修改关系计算任务委托单元;
所述修改关系计算任务委托单元,用于从所述修改队列中顺序取出关联关系计算任务,并将所述任务委托给用于计算增加关联关系的关联关系计算线程,直到修改队列中没有关联关系计算任务,再触发所述增加关系计算任务委托单元。
上述技术方案具有如下有益效果:
本发明提出的关联关系查询技术方案,将对象模型中方案所涉及的多张数据库表中存在的对象关联关系预先同步映射到关联关系预置表中,从而在接收到关联关系查询请求时,可以直接查询关联关系预置表,从而准确而快速地得到关联关系查询结果,克服了现有技术在收到关联关系查询请求时,即时从多表或多记录联合查询关联关系而产生的查询速度缓慢,效率低的问题,实现了准确、快速、高效的关联关系查询技术方案。同时,本发明还设计了根据需要建立关联关系预置表的技术方案,由此进一步提高了查询效率,减少关联关系预置表的占用空间。进一步地,提出了保持关联关系预置表与
具体实施方式
为了使本领域技术人员能够清楚理解本发明的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的详细说明,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参见图1,为本发明第一实施例提供的关联关系查询方法流程图,该方法包括如下步骤:
步骤101:接收携带对象标识和方案标识的关联关系查询请求;
步骤102:从预置的关联关系表中查询与所述方案标识关联的关联关系表,如果有则获取所述方案标识关联的关联关系表。
所述预置关联关系表用于保存定义的模型对象之间依存的关联关系,并保持与定义的模型对象标识之间的一致性。
在本发明实施例中,可以采用手工和自动两种方式建立及更新关联关系表,并且,一个方案对应一个关联关系表,关联关系表中保存了最新的关联关系数据记录,即一个对象与其他相关对象的关联关系的数据记录。
为便于获取所述方案标识的关联关系表,在预先建立关联关系表的过程中,可以采用如下方法建立关联关系表标识:
第一、将方案标识直接设置为关联关系表标识;
第二、将方案标识按照预置的规则映射为关联关系表标识。
依此,可以为每一个方案建立一个关联关系表。
如果在预置关联关系表的过程中采用第一种方法,则从预置的多个关联关系表中获取所述方案标识的关联关系表具体为:从预置的多个关联关系表中获取表标识与所述方案标识相同的关联关系表;
如果在预置关联关系表的过程中采用第二种方法,则从预置的多个关联关系表中获取所述方案标识的关联关系表具体为:从预置的多个关联关系表中获取表标识符合预置映射规则的关联关系表。
步骤103:在所述获取到的关联关系表中查询所述对象标识对应的关联关系。
如果从关联关系表中没有查询到所述对象标识对应的关联关系,则应用现有技术方法,从定义模型的数据表中查询所述方案标识中与所述对象标识相关联的关联关系。
也就是说,对于某个对象的关联关系查询请求来说,如果关联关系在接收查询请求之前已提前预置完成,那么从预置的关联关系表中查询关联关系是有效的。
以上为本发明第一实施例提供的关联关系查询方法。本发明第一实施例提供的方法是从方案对应的一张关联关系表中直接查询对象的关联关系,克服了现有技术中对与对象关联的多表进行联合查询关联关系所表现出的查询速度缓慢,效率低的问题,实现了快速、高效的关联关系查询。
进一步地,如果每个对象的关联关系都是从关联关系表中查询,则需要为每个方案都生成一张关联关系表,而大量的关联关系表会占用较多的存储空间,而且也会降低查询效率。在实际应用中,往往仅关注一部分对象的关联关系,因此提供一部分关注对象的关联关系表就可以满足应用需要。
请参见图2,为本发明第二实施例提供的关联关系查询方法流程图,该方法包括:
步骤201:接收携带对象标识和方案标识的关联关系查询请求。
步骤202:判断请求查询的方案标识的关联关系预置标志是否被标记为有效,如果被标记有效,表明可以查询到与所述方案标识关联的关联关系表。如果被标记无效,转到步骤205。
在本发明实施例中,所述预置关联关系表用于保存定义的模型对象之间依存的关联关系,并保持与定义的模型对象标识之间的一致性。所述预置关联关系表的方法如下:
根据定义的数据模型及其为模型对象之间依存的关联关系所定义的方案,按应用需要为方案设置关联关系预置标记信息,用关联关系表模板给所述有关联关系预置标记的方案建立对应的关联关系表;所述的关联关系表模板是由绑定类和被绑定类构成,或者由绑定类、一至多个中间类和被绑定类构成。
在本发明实施例中,首先根据应用需要,为需要预置关联关系的方案,设置关联关系预置标记信息,比如,将关联关系预置标志置为1,表示关联关系预置标志被标记为有效,表明需要预置关联关系;将关联关系预置标志置为0,表示关联关系预置标志被标记为无效,表明不需要预置关联关系。然后识别关联关系预置标记有效的方案,自动建立方案的关联关系表,并且,一个方案对应一个关联关系表,每一个关联关系表可以由绑定类和被绑定类构成,或者由绑定类、一至多个中间类和被绑定类构成。例如表1所示的关联关系表模板结构描述的关联关系为:绑定类与被绑定类关联。表2所示的关联关系表模板结构描述的关联关系为:绑定类通过中间类与被绑定类关联。
表1
表2
这样,对于所有已经做了关联关系预置标记的方案,会自动建立如表1所示的包含绑定类与被绑定类的关联关系表,或者如表2所示的包含绑定类、中间类与被绑定类的关联关系表。
那么,从预置的关联关系表中查询与所述方案标识关联的关联关系表,就可以通过查询关联关系预置标志是否被标记为有效,如果被标记有效,表明可以查询到与所述方案标识关联的关联关系表,如果被标记无效,表明不能查询到与所述方案标识关联的关联关系表。
步骤203:从预置的关联关系表中获取与所述方案标识关联的关联关系表。
根据定义的数据模型及其为模型对象之间依存的关联关系所定义的方案只描述类之间的关联关系,并没有描述对象之间的关联关系。比如,方案只描述主机通过信号传输线与显示器相连,但方案并没有描述是哪一台主机通过哪一条信号传输线与哪一台显示器相连。因此,根据方案描述的类之间的关联关系和关联关系表模板生成的关联关系表是一张没有对象关联关系数据记录的空表。
步骤202中说明了用于给有关联关系预置标记的方案建立空白的关联关系表。
进一步地,预置关联关系表用于保存定义的模型对象之间依存的关联关系,并保持与定义的模型对象标识之间的一致性。预置关联关系表中的数据保持与定义的模型对象标识之间的一致性的方法是:
对于有关联关系预置标记的方案,按照关联关系表模板,将方案涉及的对象标识,从定义模型的数据表同步映射到所述方案的预置关联关系表中。
例如,某定义模型的方案A中有3个类,相互之间有关联关系,对象1、对象2和对象3分别是这3个类的对象,对象标识分别为a、b、c,如果给方案A设置了关联关系预置标记,则按照关联关系表模板定义的绑定类、中间类和被绑定类模式,将方案涉及的对象标识,从定义模型的数据表同步映射到所述方案的预置关联关系表A’中,自动生成表3所示的数据记录。
表3
绑定类 |
中间类 |
被绑定类 |
a(对象1的对象标识) |
b(对象2的对象标识) |
c(对象3的对象标识) |
那么,可以查询到方案A设置了关联关系预置标记,并查询到方案A对应的关联关系表A’。
步骤204:从步骤203获取到的关联关系表中查询所述对象标识对应的关联关系。转步骤206。
例如,定义模型1的方案B,包括类1,类2、类3和类4,类1、类2、类3有关联关系,类1、类4有关联关系,类2、类3、类4有关联关系,对象1是类1的一个对象,对象2是类2的一个对象,对象3是类3的一个对象,对象4是类4的一个对象,假设对象标识与所述对象名相同,如对象1的标识就是对象1。那么如果给方案B设置了关联关系预置标记,则为方案B建立预置关联关系表B’,生成如表4的表结构和数据记录:
表4
绑定类 |
中间类 |
被绑定类 |
对象1 |
对象2 |
对象3 |
对象1 |
|
对象4 |
对象2 |
对象3 |
对象4 |
如果要从关联关系表B’中查找对象1对应的关联关系,从表4可知,可以查到对象1与对象2和对象3有关联关系,而且,对象1与对象4也有关联关系。
步骤205:查询关联关系预置标志,如果被标记无效,表明不能查询到与所述方案标识关联的关联关系表,则即时从定义模型的数据表中查询所述方案标识中与所述对象标识相关联的关联关系。
步骤206:返回查询结果。
以上本发明第二实施例提供了另一种关联关系查询方法,该方法应用标记来标识是否预置了关联关系表,实现将部分方案生成关联关系表的情况,实现了进一步提高查询速度,减少占用的存储空间。如果标记没有预置关联关系表,则即时从定义模型的数据表中查询所述方案标识中与所述对象标识相关联的关联关系,从而使得查询过程更为智能。
在实际应用中,对象的关联关系反映为随着对象的增删改操作而动态变化的,由此,关联关系表如果能够动态更新,则将进一步提高关联关系表的查询效率。
请参见本发明第三实施例,该方法包括:
步骤301:接收携带对象标识和方案标识的关联关系查询请求;
步骤302:判断请求查询的方案标识的关联关系预置标志是否被标记为有效,如果被标记有效,表明可以查询到与所述方案标识关联的关联关系表。如果被标记无效,转到步骤305。
预置关联关系表的方法参见实施例二的步骤202所述。
根据定义的数据模型及其为模型对象之间依存的关联关系所定义的方案,按应用需要为方案设置关联关系预置标记信息,用关联关系表模板给所述有关联关系预置标记的方案建立对应的关联关系表;所述的关联关系表模板是由绑定类和被绑定类构成,或者由绑定类、一至多个中间类和被绑定类构成。
步骤303:从预置的关联关系表中获取与所述方案标识关联的关联关系表。
预置关联关系表中的数据记录的方法可以进一步优化为:
根据定义的数据模型及其为模型对象之间依存的关联关系所定义的方案,获取所述定义方案的数据对象或数据对象属性发生变动的信息,包括变动数据对象的标识及其所属的方案标识以及对象变动类型,所述对象变动类型包括对象增加、对象删除或对象修改;
根据获得的对象变动信息,检查变动对象所属的方案是否有关联关系预置标记有效,如果有效,根据所述变动对象标识,通过读取定义模型的数据表对变动的对象计算其最新的关联关系,在计算完成后按照关联关系表模板将计算结果映射到所述方案的关联关系表,并给所述方案设置最新计算完成标记。
由于关联关系预置标记设置是可以更新的,随着定义模型的对象操作的动态性,不论是对象添加、删除还是修改,那么对于做了新的关联关系预置标记的方案,计算其有关对象的最新关联关系变化,更新的计算结果就被自动地反映到关联关系表中了。
步骤304:从步骤303获取到的关联关系表中查询所述对象标识对应的关联关系。转步骤306。
根据以上所述,从获取到的关联关系表中获取到的所述方案标识关联的关联关系表数据,将会准确地反映出关联关系表中的数据动态更新情况。
步骤305:查询关联关系预置标志,如果被标记无效,表明不能查询到与所述方案标识关联的关联关系表,则即时从定义模型的数据表中查询所述方案标识中与所述对象标识相关联的关联关系。
步骤306:返回查询结果。
进一步地,关于对变动的对象计算其最新的关联关系的计算方法的优化实现,预置或更新关联关系表中的数据记录的方法可以进一步优化为:
根据定义的数据模型及其为模型对象之间依存的关联关系所定义的方案,获取所述定义方案的数据对象或数据对象属性发生变动的信息,包括变动数据对象的标识及其所属的方案标识以及对象变动类型,所述对象变动类型包括对象增加、对象删除或对象修改。
根据获得的对象变动信息,检查变动对象所属的方案是否有关联关系预置标记,如果有,读取所述变动对象的数据记录,对变动的对象计算其最新的关联关系。
当变动对象的类型是对象增加时,计算所述增加对象的关联关系,计算完成后,按照关联关系表模板将新增关联关系添加到关联关系记录存储单元中,并给所述方案设置最新计算完成标记。
当变动对象的类型是对象删除时,计算所述删除对象的关联关系,计算完成后,按照关联关系表模板删除关联关系记录存储单元中的相关内容,并给所述方案设置最新计算完成标记。
当变动对象的类型是对象修改时,计算所述修改对象的关联关系,计算完成后,按照关联关系表模板修改关联关系记录存储单元中的相关内容,并给所述方案设置最新计算完成标记。
进一步地,在接收到关联关系查询请求时,可能会存在请求查询的关联关系正在进行计算,计算结果还没有更新到关联关系表的情况,此时,如果直接从关联关系表中查询关联关系,则会产生查询结果不准确的问题。
为进一步提高关联关系查询准确度,可以在前文已述实施例三、四中增加判断请求查询的关联关系是否完成计算的步骤,具体的方法如下:
从所述方案标识关联的关联关系表中查询所述对象标识对应的关联关系的方法,进一步包括,
根据方案标识,检查所述方案是否有关联关系预置标记有效,如果有效,继续检查所述方案是否完成了最新的关联关系计算,如果已完成最新的关联关系计算,则从预置的关联关系数据表中查询所述方案中与所述对象标识相关联的关联关系。
例如,对于本发明第二或第三实施例提供的方法,在步骤201或步骤301接收到携带对象标识和方案标识的关联关系查询请求后,在步骤202或步骤302可以先检查所述方案是否有关联关系预置标记有效,如果有效,则判断请求查询的所述方案的关联关系计算是否已完成,如果完成了关联关系计算,则可利用更新后的关联关系数据表表内容查询所述方案中与所述对象标识相关联的关联关系,如果关联关系没有完成最新计算,那么执行步骤205或步骤305将即时从定义模型的数据表中查询所述方案标识中与所述对象标识相关联的关联关系,例如多表联合查询关联关系的方法。
在实际应用中可以采用设置关联关系计算完成标记判断请求查询方案的关联关系是否完成最新计算,如下方法详细说明了具体的实现方式:
使用关系计算计数器来标记关联关系计算完成的情况,将一个方案的关系计算计数器的初始值设为零,每次对该方案中对象准备开始进行关联关系计算时将计数器加一,每次对该方案中对象完成关联关系计算时将计数器减一,当对该方案中对象的所有关联关系计算完成时关系计算计数器归零。判断所述方案标识对应的关联关系计算计数器是否为零,如果为零,则说明请求查询所述方案的关联关系完成最新计算,如果不是零,则说明请求查询所述方案的关联关系没有完成最新计算。
为更清楚的说明本发明实施例提供的关联关系查询方法,以下举例说明。
表5是记录显示器,主机和信号传输线之间关联关系的关联关系表,并且,表标识与对应的方案标识同为“129”。当用户想查询显示器1是通过哪条信号传输线连接哪一台主机时,则发送携带显示器1标识和方案标识(129)的关联关系查询请求至系统侧,系统侧在收到上述关联关系查询请求后,先在预置的关联关系表中查找表标识为“129”的关联关系表如表5,然后,在表5中查找显示器1标识对应的表项,至此,用户可得知显示器1通过信号传输线2与主机3相连。
表5
绑定类 |
中间类 |
被绑定类 |
显示器1 |
信号传输线2 |
主机3 |
显示器2 |
信号传输线5 |
主机6 |
前文已述本发明实施例提供的关联关系表可以采用手工和自动两种方式生成及更新,以下结合附图对本发明第四实施例提供的自动生成及更新关联关系表的方法进行详细介绍。
请参见图3,为本发明第四实施例提供的生成及更新关联关系表的方法,该方法包括如下步骤:
步骤401:接收携带对象标识和方案标识的关联关系查询请求;
步骤402:判断请求查询的方案标识的关联关系预置标志是否被标记为有效,如果被标记有效,表明可以查询到与所述方案标识关联的关联关系表。如果被标记无效,转步骤406。
步骤403:判断请求查询的方案标识的关联关系计算是否完成,如果没有完成,转步骤406。
步骤404:从预置的关联关系表中获取与所述方案标识关联的关联关系表。
步骤405:从步骤404获取到的关联关系表中查询所述对象标识对应的关联关系。如果查到所述对象标识对应的关联关系,转407。
步骤406:即时从定义模型的数据表中查询所述方案标识中与所述对象标识相关联的关联关系。
步骤407:返回查询结果。
需要说明的是,本发明主要提出的关联关系查询方法基于预置的关联关系表机制,而且能够实现预置关联关系表的动态更新,为了更清楚地说明本发明的实现机理,下面用本发明第五实施例进一步说明预置关联关系表及其动态更新的方法。所述的预置关联关系表及其动态更新的方法可以独立于关联关系查询方法。
步骤501:根据定义的数据模型及其为模型对象之间依存的关联关系所定义的方案,按应用需要设置关联关系预置标记信息。
步骤502:用关联关系表模板给所述有关联关系预置标记的方案建立对应的关联关系表。所述的关联关系表模板是由绑定类和被绑定类构成,或者由绑定类、一至多个中间类和被绑定类构成。
步骤503:取一个有关联关系预置标记的方案,获取所述定义方案的对象或对象属性发生变动的信息,包括变动对象的标识、变动对象属性的标识、变动对象所属的方案标识以及对象变动类型,所述对象变动类型包括对象增加、对象删除或对象修改;
步骤504:当变动对象的类型是对象增加时,通过读取定义模型的数据表计算所述增加对象的关联关系,计算完成后,按照关联关系表模板将新增关联关系添加到关联关系记录存储单元中,并给所述方案设置最新计算完成标记,转步骤503;
当变动对象的类型是对象删除时,通过读取定义模型的数据表计算所述删除对象的关联关系,计算完成后,按照关联关系表模板删除关联关系记录存储单元中的相关内容,并给所述方案设置最新计算完成标记,转步骤603;
当变动对象的类型是对象修改时,通过读取定义模型的数据表计算所述修改对象及修改对象属性的关联关系,计算完成后,按照关联关系表模板修改关联关系记录存储单元中的相关内容,并给所述方案设置最新计算完成标记,转步骤503;
步骤503至步骤504用于完成变动对象的关联关系动态更新,还可以实现为:根据所述定义方案的对象或对象属性发生变动的信息,判断变动对象或变动对象的属性是否属于关联关系预置标记有效的方案所涉及的类或属性。如果是,根据所述变动对象标识或/和变动对象属性的标识,通过读取定义模型的数据表对变动的对象计算其最新的关联关系,在计算完成后按照关联关系表模板将计算结果映射到所述方案的关联关系表,并给所述方案设置最新计算完成标记;对于增加和删除对象,根据所述变动对象标识计算其最新的关联关系,对于修改对象,则根据所述变动对象标识及变动对象属性的标识,计算其最新的关联关系。
以上结合附图对本发明实施例提供的关联关系查询方法进行了详细介绍。以下结合附图4对本发明第六实施例提供的自动生成及更新关联关系表的方法再进行详细介绍。
步骤601:在方案确定后,判断该方案是否被标记关联关系预置有效,如果是,则进入步骤602,如果否,则判断下一个方案;
在实际应用中,如果所有方案都需要生成关联关系表,则步骤601为非必要步骤。
如果该方案被标记关联关系预置有效,则根据方案描述的类之间的关联关系及预置的关联关系表模板,生成该方案的预置关联关系表。
用户建立的方案只描述类之间的关联关系,并没有描述对象之间的关联关系。比如,方案只描述主机通过信号传输线与显示器相连,但方案并没有描述是哪一台主机通过哪一条信号传输线与哪一台显示器相连。因此,根据方案描述的类之间的关联关系和关联关系表模板生成的关联关系表是一张没有对象关联关系记录的空表。若进行了对象操作,比如,增加了对象,删除了对象,修改了对象属性,则需要对空白的关联关系表,或者,对已有记录的关联关系表进行计算,并将计算结果更新到关联关系表中。
步骤602:判断被操作的对象是否属于关联关系预置标记有效的方案所涉及的类,如果是,则进入步骤603,如果否,则判断下一个对象;
值得注意的是,如果所有对象的关联关系都属于关联关系预置标记有效的方案,则步骤602为非必要步骤;
步骤603:判断对象操作类型,如果对象操作类型是修改对象,则进入步骤604,如果对象操作类型是增加对象或者删除对象,则进入步骤605;
步骤604:判断被修改的对象属性是否属于涉及关联关系的属性,如果是,则进入步骤605,如果否,则判断下一个被修改属性的对象;
假设,方案描述的类之间的关联关系是:A.a=B.b1and B.b2=C.c,a,b1,b2和c字段记录的属性是涉及关联关系的属性。因此,可以采用如下方式判断被修改的对象属性是否属于涉及关联关系的属性:
判断被修改的对象属性是否为方案中描述的属性,如果是,则说明被修改的对象属性是涉及关联关系的属性,如果否,则说明被修改的对象属性不是涉及关联关系的属性。
进一步,在实际应用中,如果被修改的对象属性通常都是涉及关联关系的属性,则可不执行步骤603和604而直接执行步骤605,并不影响本发明实施例的实现。
步骤605:组装对象的关联关系计算任务,将该关联关系计算任务放入任务队列,并将该对象所属方案的关联关系计数器加1;
其中,组装在关联关系计算任务中的信息可以包括:对象标识,对象属性的标识,对象所属类标识,对象所属方案标识以及对象操作类型。但是,组装在关联关系计算任务中的信息可以按照关联关系计算需要进行选择,而不必在每个关联关系计算任务中组装全部上述信息。比如,增加一个标识为123的对象,对象所属方案标识为456,则组装一个对象标识为123,方案标识为456以及对象操作类型为增加的关联关系计算任务。再比如,修改一个对象标识为123,对象属性标识为456,对象所属方案标识为789,则组装一个对象标识为123,对象属性标识为456,对象所属方案标识为789以及对象操作类型为修改的关联关系计算任务。
步骤607:从任务队列中顺序取出关联关系计算任务;
步骤608:根据组装在所述关联关系计算任务中的对象操作类型,将所述关联关系计算任务委托给相应的关联关系计算线程;
步骤609:关联关系计算线程根据组装在关联关系计算任务中的信息,计算关联关系并更新相应的关联关系表,并将该对象所属的方案的关联关系计数器减1。
上述实施例中采用关联关系计数器作为关联关系计算完成的标记,当关联关系计数器的值归零时,表明关联关系计算完成,否则表明关联关系计算未完成。
在实际应用中,如果对象变动类型是增加对象,则将所述关联关系计算任务委托给用于计算增加关联关系的关联关系计算线程,若关联关系计算任务组装了对象标识和方案标识,则所述关联关系计算线程先根据组装在关联关系计算任务中的方案标识获取方案涉及的原始数据库表,然后,根据对象标识,在方案涉及的原始数据库表中查询对象的关联关系,最后,将查询到的关联关系添加到方案标识关联的关联关系表中。
如果对象变动类型是删除对象,则将所述关联关系计算任务委托给用于删除关联关系的关联关系计算线程,所述关联关系计算线程根据组装在关联关系计算任务中的方案标识,在预置的关联关系表中获取方案标识关联的关联关系表,然后,从所述关联关系表中删除组装在关联关系计算任务中的对象标识对应的关联关系。
如果对象变动类型是修改对象属性,则将所述关联关系计算任务委托给用于计算被修改关联关系的关联关系计算线程,所述关联关系计算线程先根据组装在关联关系计算任务中的方案标识,在预置的关联关系表中查找表标识与方案标识相同或与方案标识关联的关联关系表,并从所述关联关系表中删除组装在关联关系计算任务中的对象标识对应的关联关系,最后,所述关联关系计算线程根据组装在关联关系计算任务中的方案标识获取方案涉及的数据库表,然后,根据对象标识,在方案涉及的数据库表中查询对象的关联关系,并将查询到的关联关系添加到方案标识关联的关联关系表中。
以上为本发明第六实施例提供的生成及更新关联关系表的方法。在实际应用中,将对象变动类型不同的关联关系计算任务放入了同一个任务队列,可能会产生关联关系计算异常的问题,为避免该问题,提高关联关系计算的准确度,本发明第七实施例提供了一种更新关联关系表的方法,该方法与本发明第六实施例提供的更新关联关系表方法的区别在于,第七实施例中将一个任务队列分成了增加队列,删除队列和修改队列三个队列,并且:
在组装对象的关联关系计算任务后,或者,在从任务队列中顺序取出关联关系计算任务后,先根据组装在关联关系计算任务中的对象变动类型,将关联关系计算任务放入不同的队列,具体为:
如果对象变动类型是增加对象,则将所述关联关系计算任务放入增加队列;如果对象变动类型是删除对象,则将所述关联关系计算任务放入删除队列;如果对象变动类型是修改对象属性,由于修改对象属性后,需要先将该对象原有的关联关系从关联关系表中删除,然后,再将重新计算出的关联关系添加到关联关系表中,因此,将该对象的关联关系计算任务拆分为两个任务,一个任务将携带删除对象标识及所述的方案标识的关联关系计算任务放入删除队列,另一个任务将携带增加对象标识及所述的方案标识的关联关系计算任务放入修改队列。
当增加队列、删除队列或修改队列中有关联关系计算任务后,则顺序从上述三个队列中取出关联关系计算任务,并根据组装在关联关系计算任务中的对象变动类型,将关联关系计算任务委托给相应的关联关系计算线程。值得注意的是,将关联关系计算任务放入增加队列、删除队列或修改队列的过程可以和从增加队列、删除队列、修改队列中取出关联关系计算任务进行关联关系计算的过程同步进行。
在实际应用中,从增加队列、删除队列或修改队列取出关联关系计算任务进行关联关系计算的顺序会影响关联关系计算的准确度,本发明经过反复实验,提供了一种较优的从增加队列,删除队列及修改队列取出关联关系计算任务并进行关联关系计算的顺序,具体如下:
先从增加队列中顺序取出关联关系计算任务,进行关联关系计算,直到增加队列中没有关联关系计算任务,然后,从删除队列中顺序取出关联关系计算任务,进行关联关系计算,直到删除队列中没有关联关系计算任务,再从修改队列中顺序取出关联关系计算任务,进行关联关系计算,直到修改队列中没有关联关系计算任务,其中,从修改队列中取出的关联关系计算任务是委托给前文已述的用于计算增加关联关系的关联关系计算线程,然后,再返回增加队列重复上述流程。
另外,在关联关系计算过程中,可能会发生系统崩溃,或其他导致关联关系计算中断的情况,为保证所有关联关系计算任务都能完成,在将关联关系计算任务放入队列的同时,还可以进一步将关联关系计算任务记入数据库,后续,如果关联关系计算任务被完成,则在数据库中标记该任务被完成,或者,将该关联关系计算任务从数据库中删除,如果发生了导致关联关系计算中断的情况,则在系统重启后,进一步将数据库中记录的未被完成的关联关系计算任务放入队列,从而保证了所有关联关系计算任务都能被完成。
在实际应用中,存在着大量的保持有固定关联关系的数据,能够在一段时间内保持相对稳定的关联关系,例如省市之间的关联关系,那么,反复从多表联合查询相同的关联关系就浪费了不必要的查询时间,因此,本发明基于现有技术的关联关系查询装置,提出了一种改进的关联关系查询装置。
请参见图5,现有技术的关联关系查询装置,包括:
模型定义单元801,用于定义数据模型,包括类和方案的定义;
模型数据存储单元802,用于存储定义模型的数据,包括类、对象和方案的数据;
对象操作单元803,用于实现模型数据对象的增加、删除和修改;
关联关系查询单元8041,根据方案标识和对象标识,查询模型数据存储单元中所述方案和所述对象的数据以及与所述对象有关联关系的数据,找到所述方案标识中与所述对象标识相关联的关联关系。
本发明实施例八在现有装置基础上还进一步包括,
关联关系表预置单元805,给定义模型的定义方案建立预置关联关系表;
关联关系数据存储单元806,用于保存关联关系数据表。
所述改进的关联关系查询单元8042,根据接收携带对象标识和方案标识的关联关系查询请求,从关联关系数据存储单元的预置关联关系表中查询所述方案标识关联的关联关系表,并在所述获取到的关联关系表中查询与所述对象标识相关联的关联关系;还可以直接从模型数据存储单元的数据表中查询所述方案标识中与所述对象标识相关联的关联关系。
所述装置能够实现从方案标识对应的一张关联关系表中直接查询对象的关联关系,克服了现有技术中对与对象关联的多表进行联合查询关联关系所表现出的查询速度缓慢,效率低的问题,实现了快速、高效的关联关系查询。
进一步地,如果每个对象的关联关系都是从关联关系表中查询,则需要为每个方案都生成一张关联关系表,而大量的关联关系表会占用较多的存储空间,而且也会降低查询效率。在实际应用中,往往仅关注一部分对象的关联关系,因此提供一部分关注对象的关联关系表就可以满足应用需要。
因此,本发明又提出进一步的优化装置,请参见本发明实施例九,结构示意图见图6,所述装置还进一步包括,
关联关系预置标记管理单元807,根据需要给定义模型的定义方案设置关联关系预置标记信息,据此为设置关联关系标记信息的方案添加或删除关联关系预置标记。
在实际应用中,可以给关注的方案添加关联关系预置标记。
所述的关联关系表预置单元805,对添加关联关系预置标记的方案,用关联关系表模板建立所述方案对应的预置关联关系表,所述的关联关系表模板是由绑定类和被绑定类构成,或者由绑定类、一至多个中间类和被绑定类构成。
所述的关联关系查询单元8043,根据接收携带对象标识和方案标识的关联关系查询请求,检查所述方案是否有关联关系预置标记有效,如果有效,则从关联关系数据存储单元的关联关系表中查询所述方案中与所述对象标识相关联的关联关系,否则,即时从模型数据存储单元的数据表中查询所述方案标识中与所述对象标识相关联的关联关系。
为了提高关联关系查询结果的准确度,在对对象进行增删改操作的同时,能够实现预置关联关系表与模型数据表的数据一致性更新,请参见图7,作为本发明第十实施例,上述关联关系查询装置还可以进一步包括:
对象变动信息处理单元808,获取模型数据存储单元数据表中的对象或对象属性发生变动的信息,包括变动对象的标识、变动对象属性的标识、变动对象所属的方案标识以及对象变动类型,所述对象变动类型包括对象增加、对象删除或对象修改;
关联关系计算单元809,根据对象变动信息处理单元获得的对象变动信息,检查变动对象所属的方案是否有关联关系预置标记有效,如果有效,根据所述变动对象标识,读取当前模型数据存储单元中的数据表,对变动的对象计算其最新的关联关系,在计算完成后根据计算结果更新关联关系记录存储单元中变动对象所属方案的关联关系表,并给所述方案设置最新计算完成标记。
所述的关联关系查询单元8044,根据接收携带对象标识和方案标识的关联关系查询请求,检查所述方案是否有关联关系预置标记有效,如果有效,继续检查所述方案是否设置有最新计算完成标记有效,如果有效,则从关联关系数据存储单元的关联关系表中查询所述方案中与所述对象标识相关联的关联关系,否则,即时从模型数据存储单元的数据表中查询所述方案标识中与所述对象标识相关联的关联关系。
另外,所述的关联关系查询单元也可以是这样的实施方案:检查所述方案是否设置有最新计算完成标记有效,如果有效,根据接收携带对象标识和方案标识的关联关系查询请求,检查所述方案是否有关联关系预置标记有效,如果有效,则从关联关系数据存储单元的关联关系表中查询所述方案中与所述对象标识相关联的关联关系,否则,即时从模型数据存储单元的数据表中查询所述方案标识中与所述对象标识相关联的关联关系。
请参见图8,作为本发明的第十一实施例,所述关联关系查询装置中的关联关系查询单元的详细结构示意图,包括,
查询请求接收单元,用于接收携带对象标识和方案标识的关联关系查询请求;
关联关系表获取单元,用于从预置的关联关系表中获取与所述方案标识关联的关联关系表;
关联关系查询单元,用于在所述获取到的关联关系表中查询所述对象标识对应的关联关系。
为了提高关联关系查询结果的准确度,上述关联关系计算装置还可以进一步包括:
关联关系计算结果判断单元,用于判断请求查询的关联关系是否完成计算,如果关联关系完成计算,则触发所述关联关系表获取单元。
为了节省存储空间,上述关联关系计算装置还可以进一步包括:
关联关系预置判断单元,用于判断请求查询的方案标识的关联关系预置标记是否有效,如果有效,则触发所述关联关系表获取单元,或者,触发所述关联关系计算结果判断单元。
以上为本发明实施例提供的关联关系查询装置。由于对象随时可能进行增删改操作,此时,需要对对象的关联关系进行重新计算,从而将新的计算结果映射更新到关联关系表,为了在关联关系查询装置中实现关联关系表的动态更新功能,上述关联关系查询装置的关联关系计算单元可以进一步分解为如下单元:
关系计算任务组装单元,用于在增加对象、删除对象或者修改对象属性后,组装所述对象的关联关系计算任务;
关系计算任务添加单元,用于将所述关联关系计算任务放入任务队列;
关系计算任务委托单元,用于从任务队列中顺序取出关联关系计算任务,根据组装在关联关系计算任务中的对象变动类型,将所述关联关系计算任务委托给相应的关联关系计算线程。
进一步,由于将所有关联关系计算任务放入同一个任务队列,可能会导致产生关联关系计算异常的情况,为避免上述情况,可以将所述任务队列分为:增加队列、删除队列和修改队列,此时,所述关系计算任务添加单元具体包括:
增加关系计算任务添加单元,用于当组装在关联关系计算任务中的对象变动类型是增加对象时,将所述关联关系计算任务放入增加队列;
删除关系计算任务添加单元,用于当组装在关联关系计算任务中的对象变动类型是删除对象时,将所述关联关系计算任务放入删除队列;
修改关系计算任务添加单元,用于当组装在关联关系计算任务中的对象变动类型是修改对象属性时,将所述关联关系计算任务拆分为两个任务,一个任务放入删除队列,另一个任务放入增加队列。
并且,所述关系计算任务委托单元具体包括:增加关系计算任务委托单元,删除关系计算任务单元,修改关系计算任务委托单元;
所述增加关系计算任务委托单元,用于从所述增加队列中顺序取出关联关系计算任务,并将所述任务委托给用于计算增加关联关系的关联关系计算线程,直到所述增加队列中没有关联关系计算任务,则触发所述删除关系计算任务委托单元;
所述删除关系计算任务委托单元,用于从所述删除队列中顺序取出关联关系计算任务,并将所述任务委托给用于计算删除关联关系的关联关系计算线程,直到删除队列中没有关联关系计算任务,则触发所述修改关系计算任务委托单元;
所述修改关系计算任务委托单元,用于从所述修改队列中顺序取出关联关系计算任务,并将所述任务委托给用于计算增加关联关系的关联关系计算线程,直到修改队列中没有关联关系计算任务,再触发所述增加关系计算任务委托单元。
以上对本发明所提供的一种关联关系查询方法及装置进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。