发明内容
本发明的目的是提供一种监视内存数据库的方法,使其既支持内存数据库的全库高效监视,也可以灵活配置被监视数据的范围;使用可重用的逻辑,自适应不同的表结构,不必针对每一张表分别设计监视模块,便于实现和维护。
为解决上述技术问题,本发明提供一种监控系统内存数据库监视系统,其特征在于,包括以下功能模块:
应用接口:与应用程序交互的接口,应用程序通过应用接口配置内存数据库需监视的部分;监视模块通过应用接口发布监视报告。
结构信息表:包括内存数据库中表结构、列结构相关的信息;
生成模块:用于在内存数据库中针对每张数据表自动生成相应的监视模块;
监视模块:嵌入到需要监视的数据表中,截获数据表的变化信息;
监视报告:用于描述内存数据库数据变化的结构。
同时,本发明提供一种监控系统内存数据库监视方法,其特征在于:包括以下步骤:
(1)定义监视报告结构;
(2)向内存数据库创建生成模块;
(3)通过应用接口配置监视范围,由生成模块自动产生相应的监视模块;
(4)向内存数据库创建监视模块;
(5)当监视模块监视到内存数据库数据发生变化时,产生监视报告,由应用接口发布监视报告,提交给应用程序按需求处理。
前述的监控系统内存数据库监视方法,在所述步骤(1)中,根据内存数据库的属性来描述修改操作,所述属性包括:时间、位置、操作类型、定位、详细描述。
前述的监控系统内存数据库监视方法,所述步骤(2)还包括以下步骤:
(2.1)内存数据库校验生成模块的正确性;
(2.2)如果校验通过,将生成模块的内容插入到内存数据库特定区域中;如果校验不能通过,则返回重新创建生成模块。
前述的监控系统内存数据库监视方法,所述步骤(4)还包括以下步骤:
(4.1)内存数据库校验监视模块的正确性;
(4.2)如果校验通过,将监视模块的内容插入到内存数据库特定区域中,如果校验不能通过,则返回重新创建监视模块。
前述的监控系统内存数据库监视方法,所述步骤(5)包括以下步骤:
由应用程序操作内存数据库,如果内存数据库有修改操作,通过事件触发方法捕获变化内容,产生并发布监视报告。
本发明所达到的有益效果:
本发明通过事件触发机制,来截获内存数据库数据的变化。使用本发明的方法可以避免定时查询内存数据库带来的开销问题,提高系统运行的效率,实现全库高效监视;通过应用接口配置监视范围,增加了灵活性;所有的监视模块都可以自动生成,大大降低了监视模块维护的工作量。
具体实施方式
图1是本发明的内存数据库监视方法相关模块结构示意图。图1中所示结构包括:
监视报告:描述内存数据库数据变化的结构,包括时间、位置、操作类型、定位、详细描述信息。
应用接口:与应用程序交互的接口。应用程序通过应用接口配置内存数据库需监视的部分;监视模块通过应用接口发布监视报告。
监视模块:嵌入到需要监视的数据表中,截获数据表的变化信息;
结构信息表:包括内存数据库中表结构、列结构相关的信息;
生成模块:其可以针对每张数据表自动生成相应的监视模块。
图2是本发明的内存数据库监视方法流程图。以下结合附图2详细描述本发明的具体实施方式。
如图2所示,本发明监控系统内存数据库监视方法的核心思想是:在内存数据库中创建生成模块,应用接口将内存数据库中有监视需求的部分(或全库)名称发送给生成模块。生成模块按照需求生成相应的监视模块,向内存数据库创建生成的监视模块。当内存数据库被监视部分发生数据变化时,通过事件触发机制捕获变化内容,生成监视报告。本方法主要包括以下步骤:
步骤1.定义监视报告结构;
内存数据库中一般需要多个属性来描述修改操作,这些属性应该包括:
时间:修改发生的时间;
位置:修改发生的数据表;
操作类型:发生的是insert(插入)、delete(删除)还是update(更新)类型的修改;
定位:数据表里发生修改的记录定位;
详细描述:记录里发生修改的字段定位,以及具体变化描述。
步骤2.向内存数据库创建生成模块;
图3为本发明中生成模块工作流程图。
生成模块的内容如下:生成模块从内存数据库结构信息表中获取表结构信息和列结构信息,利用动态取得的表结构信息和列结构信息作为监视模块取字段值的索引,针对每一张数据表自动生成监视模块的相关语句。包括:
取字段值语句。根据操作类型区别插入、删除和更新三种情况,取字段值:对插入操作,只取修改后的值;对删除操作,只取修改前的值;对更新操作,同时取修改前和修改后的值。
变化字段比较语句。根据操作类型区别插入、删除和更新三种情况,进行字段值的比较:对插入操作,需要将插入的新值和空值作比较;对删除操作,需要将已删除的旧值和空值作比较;对更新操作,需要将修改前的旧值和修改后的新值作比较。比较结果不相等则判断该字段的值发生了变化。
拼结构语句。生成填充监视报告结构各个属性的语句。
向内存数据库中创建生成模块时需对其中时间、位置、操作类型的值以及字段名进行合法性校验,判断所有数据表和定位的信息是否存在。在生成模块的内容通过校验后,将创建内容插入到内存数据库的特定区域中。
步骤3.由应用接口配置监视范围,由生成模块自动产生相应的监视模块;
应用接口配置内存数据库需要监视的范围,将监视范围发送通知消息给生成模块,生成模块接收到应用接口的通知后生成相应的监视模块。
应用接口配置内存数据库的哪些部分(或全库)需要监视,将监视范围发送通知消息给生成模块。生成模块接收到应用接口的通知后按照步骤2生成相应的监视模块。
步骤4.向内存数据库创建监视模块;
对于内存数据库内部的触发关系而言,图4展现了两种监视模式:源头监视(图4-a)和目的地监视(图4-b)。a模式针对一种特定的操作设计通知机制,由发起操作的数据表产生这种特定的操作的描述(描述内容包括被操作的数据表),b模式忽略操作的特异性,由被操作的数据表表全面监视本表的变化。
由于源头监视只需针对特定的情况设计,而目的地监视需要考虑通用性,所以对于规模很小,结构简单的内存数据库监视而言,a模式花费的成本要小于b模式。但是随着内存数据库规模的增加(主要表现为数据表数量和事件触发数量增长),操作特异性显现(主要表现为数据表结构多样,事件触发逻辑变得复杂),使用a模式创建监视的复杂程度和工作量均会急剧增加。
考虑一个有N张数据表,数据表两两之间均存在事件触发关系的内存数据库模型(图4-c)。采用a模式需创建N×(N-1)个监视模块,并且每一个监视模块都需要处理操作特异性,制定特定的通知机制;采用b模式需要创建N个监视模块,每一个监视模块均采取相互类似的通知机制。例如当N=5时,可以减少100%-(N÷(N×(N-1)))=75%的工作量。在c所示的5张表触发关系中,若采用a所示源头监视模式,须创建5*4=20个监视模块;若采用b所示目的地监视模式,须创建5个监视模块。可见,与a模式相比,b模式可以按指数规律减轻工作量。若同时使用本发明中生成模块,自动生成b模式中的监视模块,效率可以再次得到大幅度提升。
本发明中使用目的地监视模式,即监视模块仅监视本表。
向内存数据库中创建监视模块时需对其中时间、位置、操作类型的值以及字段名进行合法性校验,判断相关数据表和定位的信息是否存在。创建过程中内存数据库还要检查创建内容,防止重复创建相同的或者相互冲突的监视模块。在监视模块的内容通过校验后,将创建内容插入到内存的特定区域中。
步骤5.当内存数据库数据发生变化时,记录监视信息报告。
应用程序操作内存数据库时,内存数据库通过事件触发机制判断是否有修改操作,如果有修改操作,内存数据库在系统特定区域检索发生修改的数据表下是否创建了监视模块,如果已经创建了相应的监视模块则执行监视模块。
监视模块首先判断操作类型:对于插入操作,监视模块将插入的新值和空值作比较;对于删除操作,监视模块将删除的旧值和空值作比较;对于更新操作,监视模块将修改前的旧值和修改后的新值作比较。比较结果不相等则判断该字段的值发生了变化。若本数据表发生变化则,参照图5所示的规则,根据不同的操作类型,使用变化的具体信息选填监视报告结构的各个属性:时间、位置、操作类型、定位、详细描述。由应用接口发布监视报告,提交给应用程序按需求处理。
监视模块使用行级别的事件触发,当且仅当数据发生变化时才会触发监视功能。如果添加监视模块前的事件触发流程为:声明事件触发逻辑变量→执行事件触发逻辑。那么添加监视模块后的事件触发流程为:声明事件触发逻辑变量→声明监视模块变量→执行监视模块逻辑→执行事件触发逻辑。可见,监视模块的添加不会对内存数据库里原有事件触发逻辑造成任何影响。
本发明的监视内存数据库的方法自适应数据表结构为内存数据库中结构内容不同的数据表自动生成相应的监视模块,避免频繁的人工参与,大幅减轻了工作量,有效防止了人为错误的发生。由应用接口配置生成监视模块,增加了系统的灵活性。通过本发明的方法,在内存数据库初建时可以自动完成所有表的监视模块创建工作;在内存数据库使用的过程当中可以灵活的改变监视范围;在内存数据库里数据表结构发生变化时能够方便的一次性更新所有已创建的监视模块。大大降低了内存数据库维护的工作量。
以上已以较佳实施例公开了本发明,然其并非用以限制本发明,凡采用等同替换或者等效变换方式所获得的技术方案,均落在本发明的保护范围之内。