一种数据库实时增量复制软件中利用Apriori算法对并行入库进行智能分组优化的技术的制作方法

文档序号:12963592阅读:468来源:国知局
本发明从属于数据库增量复制
技术领域
:,特别是关系型数据库应用领域。技术背景在企业信息应用环境中,经常会出现需要将一个应用环境中的数据移动到另一个应用环境中以供处理或使用的需求。而且在很多场景中,这样的需求还有很高的实时性要求,并且数据量往往还会很大。这一需求催生了一批基于触发器或者基于数据库事务日志获取源数据库变化信息,并把变化拷贝到目标数据库重新执行的软件。我们称之为实时增量数据复制软件,或者实时增量数据同步软件。其采取的技术相应的被称之为实时增量数据复制技术或者实时增量数据同步技术。为了保证数据业务逻辑的完整性一致性,所有的数据库都会使用事务来控制数据的修改。一个事务可以包含一个或多个修改,包含在同一个事务中的所有修改命令必须同时执行成功提交,如果有一条命令执行失败,这个事务中包含的修改命令都必须回退到事务开始前状态。复制软件为了保证复制到目标数据库的变化和源数据库完全相同,修改命令在目标数据库重做的顺序必须和在源数据库执行的顺序必须保持完全一致。在数据量很大并且数据变化频繁的环境中,这就带来了性能问题。因为源数据库往往是一个存在大量并发的并行系统,有大量的用户连接在数据库上同时执行各种修改事务。而在目标数据库上,数据复制软件为了数据和源数据库完全一致,必须保留原事务的信息并保持变化事务重新执行的顺序,故复制软件通常只建立一个到目标数据库的连接串行执行,性能极差。为了解决这个问题,部分数据复制软件提供了多连接并行执行的功能,通过建立多个到目标数据库的连接来并行执行修改命令。但是由于不同的事务之间可能修改相同的表,即使是在不同的数据库连接上执行的命令,为了保持执行的顺序,经常也需要进行等待,这样即使建立了多个数据库连接,最后变化命令在目标数据库仍然是串行执行的。虽然有些复制软件进一步提供了事务分组功能,可以用户对事务按照一些参数,比如说在源数据库执行的用户名等,进行分组,让不同组的变化事务在不同的数据库连接上执行,这样可以尽量减少事务执行间的等待。但是确定如何分组是一件很困难的工作,用户往往也并不知道该如何进行分组,故实际使用的效果仍然很差。本发明正是针对上述问题,采用apriori算法对事务中的表进行关联分析,达到复制修改命令在目标数据库并行执行的性能最优化。目前相关领域尚未检索到与本发明相同的解决方案及系统实现。技术实现要素:复制软件在平时运行过程中,采集相应的性能统计信息,如事务编号及每个事务包含的表名并保存。运用apriori算法对保存的事务信息进行分析,计算各个数据库表在同一个事务中出现的概率,从而找出表与表之间的关联关系。通过表之间的关联关系,将关联支持度大于预先设置的最小支持度的表集集合做为事务分组的基本依据,再结合表集出现的频率,把包含不同表集的事务智能分配到不同的数据库连接上,从而不同连接上执行的命令之间的干扰减到最小,从而充分利用多数据库连接并行执行来提高数据复制的性能。附图说明图1为并行数据库连接下事务等待示意图,演示了复制软件即使建立了多个目标数据库连接但是仍然只能串行执行命令的一种情况。图中复制软件建立了两个到目标数据库的连接。在源数据库中,依次执行了tran1、tran2、tran3、tran4四个事务,其中tran2、tran3、tran4都修改了t2这张表。当复制软件在目标数据库执行命令的时候,把tran1、tran2分配给第一个连接执行,把tran3、tran4分配给第二个连接执行。因为tran2和tran3修改了同一张表,如果tran1执行速度很慢,为了保持事务提交的顺序和源数据库完全一致,第二个连接即使空闲,也不能执行tran3,而是必须等待tran2执行完成之后才能执行。此时虽然有多个数据库连接,但事务的执行还是串行的。图2为使用apriori关联分析优化数据库事务在并行数据库连接上的分配示意图。复制软件从源数据库读取事务信息,将事务信息保存到事务记录表中。在积累了一定量的数据之后,启动分析引擎分析事务记录,获得最终频繁表集的集合,每个表集包含若干个有强关联性的表。将这些信息存储到连接配置表中。复制软件向目标数据库复制数据时,将事务中的表名去匹配连接配置表中的表名,从而决定将该事务分配到哪个连接上去执行。具体实施方式复制软件在平时运行过程中,采集相应的性能统计信息,如事务编号及每个事务包含的表名,保存到事务记录表中。事务记录表基本内容如下表所示:在积累了足够多的性能统计数据后,采用apriori算法计算出不同表同时出现在同一个事务中的概率。根据预先设定的最小支持度minsup,筛选出同时在一个事务中出现的概率大于最小支持度的表集。如分析结果不理想,可调整最小支持度重新计算。apriori算法缺省会从整个数据集的大小,在本专利申请中即为所有参与复制的数据表的数目,开始计算,并逐级减小数据集的大小直至空集。但在绝大多数情况下,参与复制的表的数目会很多,而每个事务当中包含的表数目确非常有限,这样分析的效率非常低。为了提高分析效率简化算法,我们队apriori算法进行部分优化。让复制软件记录过去在复制数据库执行的事务当中,最多包含多少张数据表,记为maxtabnum。当对事务记录表进行分析时,不仅仅把分析结果为空集做为分析的终止点,而是会先判断表集的大小k有没有超过maxtabnum,如果超过则直接终止分析。这样可以减少很多不必要的运算量,提高了效率,节省了分析时间。算法伪码如下:(1)l1=find_frequent_1-tablesets(t);(2)for(k=2;lk-1≠φ|k<=maxtabnum;k++){(3)ck=apriori_gen(lk-1,minsup);(4)foreachtransactiont∈t{//scantforcounts(5)ct=subset(ck,t);//getthesubsetsoftthatarecandidates(6)foreachcandidatec∈ct(7)c.count++;(8)}(9)lk={c∈ck|c.count≥minsup}(10)}(11)returnl=∪klk;其中,t为事务记录表中所有记录,minsup为用户事先定义的最小支持度,maxtabnum为一个事务中最多包含的表的个数。lk为频繁表集,l为频繁表集的集合。对计算获得的结果集l进行优化,消除合并包含相同表项的表集,获得最终的表集集合s。根据集合中表集的个数计算出并发数据库连接个数,缺省推荐取值为ceil(表集数/2),用户可定制修改。对最终集合l中的表集的支持度进行排序,依次将各个表集分配到每个数据库连接。并将表名和连接的对应信息记录在连接配置表中。连接配置表的内容如下所示:其中优先级与表集支持度对应,支持度越高的表集,对应的优先级也越高,依次类推。当有事务需要在目标数据库中执行时,复制软件会扫描连接配置表。如果事务中包含了解了配置表中列出的表,则该事务会被分配到相应的数据库连接执行。如果事务中有不止一个表出现在连接配置表中,则选择在优先级更高的连接执行。如果事务中所有的表都不在连接配置表中,则该事务会被随机分配到一个数据库连接上执行。通过合理地选择最小支持度,可以获得一个优化的数据表与数据库连接的对应关系,使得在不同连接上执行的事务之间的干扰是最小的,从而最大限度地获得并行处理的性能。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1