数据库增量

2024-05-06

数据库增量(精选八篇)

数据库增量 篇1

某局华为智能网系统进行升级,该局发行UCS卡号业务,数据量为900万,机器为HP L2000,采用informix数据库,由于当初的磁盘规划不合理,所有的数据库空间都分布在一块普通硬盘上,没有任何RAID处理,数据转移效率非常低。

割接前进行了数据迁移测试,测试的数据如下:

业务为UCS1.5, basetab_206表中900万记录,数据倒换时间如下:

1)在HP L2000单机上使用ipload倒换的时间:导出15分钟, 导入10分钟

2)在HP D280的HDR上直接倒换数据的时间:导入10000条/20秒

3)在HP L2000的HDR上直接倒换数据的时间:导入约2.5小时

4)在HP L2000的HDR上采用先倒主机(无日志)、再主机0机备份到备机恢复的时间:零级备份+恢复=90分钟

升级过程中割接时间一般是从临晨0:00到6:00,总共6小时,减去割接失败回退的时间1.5小时,整个割接过程只有4.5小时。若按普通方法进行割接,单数据倒换就至少需要2个小时,加上业务验证等其他零星工作,整个升级过程至少4个小时。如果过程中出现什么意外,几乎没有时间定位问题。为解决此问题,于是便提出了增量倒换的概念。

2 增量割接法原理

增量割接法的主要思想是提前将在线将数据进行一次完全割接,正式割接当晚,只倒换自完全割接后更新过的数据。

一般情况下,要在正式升级割接的前几天(设为n) 在线作一次数据的完全倒换。在正式割接当晚,将n+1天(1天的过渡时间,这主要是防止跨天呼叫漏掉)的更新数据导入。

简而言之,增量割接分为两个步骤,第一步做一次完全的数据割接,也就是基线建立的过程;第二步是正式割接的过程,需要找出变化过的数据,并只针对变化过的数据进行倒换。因此如何找出变化过的数据是关键。

3 增量割接法方案设计

下面以UCS业务改造为ICRAD业务,对basetab表的卡数据进行割接为例,描述增量割接法的具体实施步骤:

设UCS业务的卡号表为basetab_206, ICARD业务的卡号表为bas e tab_ccs,欲将bas e tab_206表中的数据割接到bas e tab_ccs

1)割接前基线数据的建立:正式割接前1天先做一次将UCS业务的basetab_206表的数据全部迁移到ICARD的basetab_ccs表中,因不受时间的限制,可以选择普通的unload、dbload方式进行数据的倒换;

2)找出更新过的卡数据:分析ucs业务可以得知,对bas e tab_206表中数据的更新主要有以下三点:

A新开户数据,根据bas e tab_206表的las tus e date tim e字段识别;

B普通呼叫流程在密码验证成功后,更新bas e tab_206的las-tus e date tim e;

C转帐过程中,转出帐号更新las tus e date tim e,转入帐号不更新。

找出更新过的卡数据的脚本如下(假设将这些数据倒出汇总到change dcard.unl中):

s e le ct*from bas e tab_206 w he re las tus e date tim e[1]>=[基线数据建立日期-1天];

s e le ct b.*from ucs_trans fe rlog a

le ft join bas e tab_206 b on a.accountnum be rt=b.accountnumbe r

w he re a.re gis te rdate tim e[1]>=[基线数据建立日期-1天];

3)下一步要根据选出的数据,将新表中的相关数据删除,再将这些更新数据插入,更新到基线数据建立的表上,即可完成整个倒换。具体实现如下:

A.使用dbload将change dcard.unl中的accountnum be r字段数据装入新库的一个表中,如changedcard (仅含一个字段account-num be) r

B.执行:de le te from bas e tab_206 w he re accountnum be r in (s e le ct*from change dcard)

C.将change dcard.unl装入新库的bas e tab_ccs中。注意这时bas e tab_ccs的accountnum be r要建唯一索引,以防止有重复的记录插入。

4 增量割接法的注意事项

增量割接法通过割接前的基线数据的建立,将耗费大量时间的数据迁移提前做了,正式割接时只需要将自基线数据建立以来有过更新的那部分数据进行割接,从而大大减少了正式割接时要迁移的数据量,也就达到了节约割接时间的目的。

从增量割接法的两个步骤来看,第一步是基线数据的建立,这一步的数据迁移可以在任何时间来做,只要注意不影响机器性能,可以采用HPL、SPL、ESQL/C编程、SHELL编程、unload/dbload等各种数据迁移的方法来做,因此在基线建立的过程没有制约条件的限制。

第二步是对增量数据的割接,这一步要考虑要确保能够判断出自基线数据建立后更新过的数据。首先要列举出导致数据更新的不同操作,比如开户、销户、转帐、打电话、充值等操作都会更新数据,要将可能导致数据更新的操作一一列举出来。其次,对列举出来的导致数据更新的操作要能够找出数据更新的判断条件,这很关键,一般来说业务对数据进行更新时,都会有记录更新时的时间的记载。

摘要:在智能网业务升级和割接中, 经常会遇到大量的数据割接、搬迁, 本文介绍了一种对大数据量割接也非常有效且简单易行的数据割接方法:增量数据割接法。

关键词:基线建立,增量割接,方案设计

参考文献

[1]张光业.Informix向导—Informix SQL参考与语法[M].北京:人民邮电出版社.2001.

[2]孙刚玉.Informix系统管理员指南[M].北京:科学出版社, 1999.

数据库增量 篇2

1、发明名称

一种基于全量数据的增量数据备份方案 摘要:

本发明公开了一种基于全量数据的增量备份方案,本文中采取的全量数据增量备份方案包括:读取原始数据与数据库当前数据、原始数据与数据库当前数据对比并生成对比结果日志——筛选出增量数据、按照对比结果将增量数据存入数据库临时增量表,最后将增量数据备份至数据库。整个备份过程,使用了MD5(Message Digest Algorithm MD5)信息摘要算法和二分查找算法等IT技术,极大的提高了运行效率。通过本发明可以对海量数据进行高效、可靠、快速的备份,对此类问题的解决具有普遍意义。

开始读取原始数据与数据库当前数据数据比对生成比对结果筛选增量数据增量数据存入数据库临时增量表增量数据备份至数据库结束

2、权利要求书

1.读取原始数据与数据库当前数据:使用MD5(Message Digest Algorithm MD5)信息摘要算法读取原始数据与数据库当前数据,其中数据文件为-CSV格式的文件; 2.数据比对生成比对结果筛选增量数据:原始数据MD5散列值与数据库当前数据的MD5散列值进行全量比对,生成比对结果保存在日志文件中,检索出增量数据; 3.增量数据入数据库临时增量表:按照将通过数据比对筛选出来的增量数据存入数据库临时增量表;

4.增量数据备份至数据库:按照增量表内的数据,通过增加、修改、删除操作更新数据库当前数据,实现原始数据全量备份至数据库;

3、说明书 3.1、技术领域

本申请是一种进行海量数据增量备份的方法。通过本发明可以对海量数据进行高效、可靠、快速的备份,对此类问题的解决具有普遍意义。

3.2、背景技术

目前在有着某种业务关联的分布式数据库和分布式信息系统的各类应用中,常常需要对不同的分布式数据库和信息应用系统中的一些关键数据进行同步,以维护它们之间的数据的一致性。在需要同步的数据量、信息应用系统的独立性、实时性及容错性要求不高的情况下,通常使用数据库同步、ftp、http 下载或者简单的接口调用等方法就可以满足需求。但是,一旦所涉及的数据量达到海量(数以亿计)级别而需要同步的数据仅仅为总数据量的一个很小的子集时,如何快速定位到需要同步的数据也会是一个异常突出的问题,本发明即根据此类问题的要求,通过使用MD5(Message Digest Algorithm MD5)信息摘要算法和二分查找算法等IT技术,解析读取数据,比对数据筛选出增量数据,按照增量数据更新数据,从而实现原始数据全量备份;

4、发明内容

4.1、发明的目的

解决海量数据的增量备份。

4.2、实现的步骤

本方案包括:解析、读取原始数据与数据库当前数据、数据比对生成比对结果筛选增量数据、增量数据入数据库临时增量表、增量备份至数据库。

其中筛选增量数据分为筛选:需要在当前数据库内增加的数据、需要根据原始数据在当前数据库内修改的数据、需要在当前数据库内删除的数据,下文将根据以上三种情况来分类阐述本方案中的“解析、读取原始数据与数据库当前数据、数据比对生成比对结果筛选增量数据”步骤,“增量数据入数据库临时增量表、增量备份至数据库”步骤不再分类阐述。4.2.1、读取原始数据与数据库当前数据

开始读取当前数据库中的一条记录,将主键值与其对应的整条记录的值转化成MD5散列值读取原始数据中的一条记录,将主键值与其对应的整条记录的值转化成MD5散列值否业务主键MD5散列值存入字符串数组YS1,整条记录的MD5散列值存入字符串数组YS1业务主键MD5散列值存入字符串数组TS1,整条记录的MD5散列值存入字符串数组TS1否文件是否读完是是文件是否读完结束

上图为读原始数据与数据库当前数据流程图,详细步骤如下:首先根据业务确定资源对象的业务主键,依次读取当前数据库中的每一条记录,抽取其业务主键值和整条记录的值,通过MD5(Message Digest Algorithm MD5)信息摘要算法将业务主键值与其对应的整条记录的值转化成MD5散列值,分别存入到字符串数组YS1和YS2中。

采用上述同样的数据读取方式,将原始CSV格式的数据文件,依次读出并通过MD5算法转化成MD5散列值,分别存入字符串数组TS1和TS2。4.2.2、数据比对生成比对结果-筛选增量数据

为了提高全量比对效率,系统采用多进程、多线程操作系统,将参与全量比对的对象随机分配在5个不同的线程队列中,相比于单线程全量比对操作系统,效率提高5倍;

数据比对进行需两次比对,第一次比对筛选出增加的数据、修改的数据,第二次比对筛选出删除的数据,两次比对详细描述如下。

4.2.2.1、筛选出增加的数据、修改的数据

开始YS1和YS2字符串数组排序读取原始数据中的一条记录,将主键值与其对应的整条记录的值转化成MD5散列值主键值在YS1中查找存在整条记录值在YS2中查找存在不存在在LOG文件中记录该条记录实际值并标识位A否不存在在LOG文件中记录该条记录实际值并标识位M数据是否读完结束 上图为筛选增加数据、修改数据的流程图,详细描述如下: 首先将字符串数组YS1和YS2排序,依次使用原始数据一条记录的业务主键MD5散列值在YS1中使用二分查找算法查找,分以下情况:

 若不存在,则说明该条原始数据为新增的数据,并在LOG文件中记录原始数据中该条据的实际值,以A(add)进行标记;

 若存在,则使用原始数据中该记录的整条记录的MD5散列值--TS2在YS2中折半查找:若不存在,则说明该条数据为需要在当前数据库中除业务主键外其他信息需要修改的数据,并在LOG文件中记录原始数据中该条据的实际值,以M(modify)进行标记;

若原始数据该条记录的业务主键MD5散列值、整条记录MD5散列值,即存在于YS1又存在于YS2中,则说明该条记录无变化,无需更新。

4.2.2.2、筛选出删除的数据

开始将TS1排序读取当前数据库的一条记录,将字符串转换成MD5散列值否主键值在TS1中查找存在在LOG文件中记录该条记录实际值并标识位D不存在数据是否读完结束 上图为筛选删除数据的流程图,详细描述如下:

首先将字符串数组TS1和TS2排序,依次使用数据库一条记录的业务主键MD5散列值在TS1中使用二分查找算法查找,若不存在则说明该条数据为需要在当前数据库中删除的数据,并在LOG文件中记录当前数据库中该条据的实际值,以D(delete)进行标记;

4.2.3、增量数据入数据库临时增量表

当前数据库执行存储过程,将比对过程生成的LOG文件中的数据读入到数据库临时增量表中,按照LOG文件中的标识码在临时增量表中的每条记录后面添加一个属性值其中:LOG文件中‘A’对应临时增量表中‘I’(insert 新增的数据)、LOG文件中‘M’ 对应临时增量表中‘U’(update更新的数据)、LOG文件中‘D’ 对应临时增量表中‘D’(delete删除的数据);

4.2.4、增量备份至数据库

当前数据库执行存储过程,读取数据库临时增量表中一条记录,标识码在当前数据库相对应的表中做增删改操作,如下:

 若临时增量表中标识码为‘I’则在当前数据库相对应的表中插入该条记录;  若临时增量表中标识码为‘D’则在当前数据库相对应的表中删除该条记录;  若临时增量表中标识码为‘U’则在当前数据库相对应的表中先删除当前数据库该条记录,再把原始数据中与该条记录的业务主键值相等的记录插入到数据库中; 按照以上操作实现全量数据增量备份。

5、附录

5.1、MD5(Message Digest Algorithm MD5)信息摘要算法

所谓MD5,即“Message-Digest Algorithm 5(信息-摘要算法)”,它由MD2、MD3、MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著名的公钥加密算法标准RSA的第一设计者R.Rivest于上个世纪90年代初开发出来的。MD5的最大作用在于,将不同格式的大容量文件信息在用数字签名软件来签署私人密钥前“压缩”成一种保密的格式,关键之处在于——这种“压缩”是不可逆的。

MD5信息-摘要算法,用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。

MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的 MD5信息摘要。

5.2、二分查找算法

折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如 果xa[n/2],则我们只要在数组a的右 半部继续搜索x。

二分查找的基本思想是:(设R[low..high]是当前的查找区间)

(1)首先确定该区间的中点位置:

(2)然后将待查的K值与R[mid].key比较:若相等,则查找成功并返回此位置,否则须确定新的查找区间,继续二分查找,具体方法如下:

①若R[mid].key>K,则由表的有序性可知R[mid..n].keys均大于K,因此若表中存在关键字等于K的结点,则该结点必定是在位置mid左边的子表R[1..mid-1]中,故新的查找区间是左子表R[1..mid-1]。②类似地,若R[mid].key

一种改进的增量数据挖掘算法 篇3

关键词:数据挖掘,算法,关联规则,哈希表

0 引 言

Apriori算法[1]是一种最有影响的挖掘关联规则频繁项集的算法,然而该关联规则挖掘的算法是基于两个共同的前提:

1) 数据库中的元组数不变;

2) 最小支持度(min_sup)和最小置信度(min_conf)也不变。

在关联规则的实际挖掘过程中,一方面用户往往需要对最小支持度和最小置信度这两个阈值进行不断调整来寻找真正感兴趣的规则;另一方面数据库的数据是不断进行添加、修改和删除的,这是一个动态的交互过程,随着时间的改变,关联规则随之不断地更新。针对这两种情况,可以把关联规则的维护更新问题归纳为四种情况:

1) 在最小支持度和最小置信度不变的情况下,当数据库DB被添加、删除或修改时,如何生成更新后的数据库的关联规则。

2) 在数据库DB不变的情况下,当最小支持度和最小置信度发生变化时,如何生成DB中的关联规则。

3) 在最小支持度和最小置信度发生变化的同时,数据库DB也相应的变化,如何生成更新后的数据库的关联规则。

4) 在数据库DB被频繁地进行更新时,如何高效地生成更新后的数据库的关联规则。

为了解决以上问题,人们提出很多算法。如与Apriori算法框架相一致的FUP算法[2],以及针对数据库保持不变,支持度发生变化的情况提出关联规则更新算法IUA[3]等。

从结构上来说,FUP算法与Apriori算法基本相同,都是通过多次迭代产生长度更长的频繁集,最后利用频繁集生成关联规则。

算法IUA采用了一个独特的候选频繁项集生成算法iua_gen,在每一次对数据库扫描之前生成较小的候选频繁项集,从而提高了算法的效率。IUA算法的基本框架也和Apriori算法一致,也需要对目标数据库进行多趟扫描[4]。

Apriori、FUP、IUA算法的结构相同,它们的核心都是多次迭代,通过每次迭代产生数目更大的频繁集。他们都存在各自的不足之处:

Apriori是一种宽度优先算法。增量数据挖掘时Apriori以新的最小支持度重新运行一遍。这种方法虽然简单明了,却有着明显的不足。因为最初用来发现旧的频繁项集的计算都将被浪费,所有的频繁项集都必须从头开始计算,浪费时间。

FUP在旧有的资料项目组中,有些可能成为日后大项目组的资料集,会在最初的挖掘过程中遭到删除,对于新增的数据项目集中,也无法达到使用着预设的支持度门槛值,而被误认为不重要的关联规则,因而无法有效地挖掘出其中的关联规则。

IUA算法在iua_gen函数的第2步修剪中,会将Ck3中由L1中的k-1个项目与L″1中的一个项目所构成的k-项目集和由L″1中的一个项目与L″1中的k-1个项目所构成的k-项集全部修剪掉,这样导致关联规则在更新时会使一些频繁项目集以及一些有效规则挖掘不出来,故此算法不是关联规则的增量式更新的有效算法。

上述算法效率都是较高的,但其都没有解决在最小支持度和最小置信度发生变化的同时,数据库DB也相应的变化,如何生成更新后的数据库的关联规则。维护更新算法的核心就是利用已挖掘的关联规则为基础,在变化了的数据库/参数上发现新的关联规则,删除失效的关联规则,进一步解决关联规则的维护更新问题。在目前的许多关联规则的算法中,大多数的维护算法都是以Apriori算法为核心进行的改进与优化。但Apriori算法没有充分利用以前的挖掘结果,增加很多不必要的运算时间。针对现行增量挖掘算法的困难和不足,提出了一种改进算法,该算法可以高效解决这一类问题,并通过对其测试结果与Apriori算法的测试结果进行比较,进一步证明了该算法的高效性。

1 改进算法基本思想

该改进算法将链表插入、删除以及哈希定位的高效性结合起来,在数据挖掘的过程中充分保存以前已经挖掘出来的信息,来提高随后的增量挖掘的效率。算法主要由以下三步组成。

1.1 扫描DB(旧的数据库)

首先根据用户输入的物品的种类数目n建立n个哈希表Hash[n],Hash[i](1≤in)的数据结构如表1和表2所示。表1中结点的域用来指示该哈希表中哈希地址为j(0≤j≤哈希表长-1)的结点。表2所示的结点包含两个域:Item域用来存放物品组合的名称;Item_Count域用来存放对应物品的支持度。Hash[i]用来存放i-itemset(i-项集)的所有情况。

然后扫描库里第一条事务,得出这条事务所有非空子集(非空子集代表这条事务中所有物品的组合情况),根据非空子集中物品个数放入到对应哈希表中[5]。例如:假设n=7,p1=1,p2=Λ=p6=1/3,p6=p7=0,{2,3,4}是某条事务其中一个子集由于它包含三个物品:2、3、4,根据哈希函数hash(x1,x2,K,xk)=order(x1)2k-1+Λ+order(xk)20)mod(prime(pk*))得:(式中函数order(xk)返回项xk的编号:即k,kx1,x2,Λ,xk的个数,n为物品的个数,pkk种物品的结合度(0≤pk≤1)函数prime(x)返回不大于x的最大素数。哈希地址为7。所以子集{2,3,4}应放入Hash[3](因为子集{2,3,4}有3项)中哈希地址为7的线性链表中,如果此链表已经包含该子集,则将对应的Item_Count+1;如果此链表不包含该子集,则在链表尾加入该子集,同时将对应的Item_Count置1。依此类推,接着扫描库里的第二条事务直到最后一条事务,并对每条事务都进行类似的处理。

1.2 扫描db(新增加的数据库)

可用处理DB的方法扫描db,将每一个事务的每一个子集放入到对应的已保存的DB的结果哈希表中。其处理方法类似扫描DB的处理方法,即:如果此链表已经包含该子集,则将对应的Item_Count+1;如果此链表不包含该子集,则在链表尾加入该子集,同时将对应的count置1。

1.3 扫描ddb(新删除的数据库)

由于是删除原有的数据库,因此ddb中所有事务的所有子集均已在哈希表中,故先在哈希表中找到该子集,然后分两种情况进行讨论:

1) 若某个ItemItem_count≥2,将其Item_Count值减1;

2) 若某个ItemItem_Count=1,将其直接删除。

2 算法描述

2.1 扫描DB(旧的数据库)

For (i=1;i<n;i++) //n代表所有物品的种类数目

{creat hash[i]; //建立n个哈希表

For (j=0;j<hash[i].size;j++)

hash[i][j]=NULL; //对每一个哈希表初始化为空}

For all T∈DB do //T为DB中的事务

{for all_subset∈T do //subset代表非空子集

{count x=subset.num; //计算当前非空子集的项集个数

county=subset.hashadress; //计算当前非空子集的哈希地址

if subset∈hash[x][y] //如果当前子集在第x个哈希表的第y条链中

hash[x][y].subset.Item_Count++;

else insert end of hash[x][y];}}

2.2 扫描db(新增加的数据库)

for_all T∈db do //T为db中的事务

{for_all subset∈db do

{count x=subset.num; //计算当前非空子集的项集个数

Count y=subset.hashadress; //计算当前非空子集的哈希地址

If subset∈hash[x][y] //如果当前子集在第x个哈希表的第y条链中

hash[x][y].subset.Item_Count++;

else insert end of hash[x][y];}}

For (i=1;i<n;i++) //输出频繁项集

{for (j=0;j<hash[i].size;j++)

while(hash[i][j]->next!=NULL)

{if (hash[i][j]->Item_Count>min_sup) //判断是否大于最小支持度

{输出hash[i][j].Item;

hash[i][j]->next;}

Else continue;}}

2.3 扫描ddb(所要删除的数据库)

for_all T∈ddb do //T为ddb中的事务

{for_all subset∈ddb do

{count x=subset.num; //计算当前非空子集的项集个数

Count y=subset.hashadress; //计算当前非空子集的哈希地址

hash[x][y].subset.Item_Count--;

if hash[x][y].subset.Item_Count==0

del hash[x][y].subset.Item;}}

For (i=1;i<n;i++) //输出频繁项集

{for (j=0;j<hash[i].size;j++)

While (hash[i][j]->next!=NULL)

{if (hash[i][j]>Item_Count>min_sup) //判断是否大于最小支持度

{输出hash[i][j].Item;

hash[i][j]->next;}

Else continue;}}

由于库里存储的是海量数据,改进算法将面临以下两方面的问题:一方面,海量数据挖掘后的海量结果的保存以及内存一次容纳不下海量挖掘结果怎么办。另一方面,改进算法要涉及到对每一个事务的每一个子集查找是否在对应的哈希表中存在,因此查找效率的高低将直接影响算法效率的高低[6]。第一个问题,随着目前硬件配置的价格日趋下降的趋势来看,数据存放空间已经不是一个严重的问题了,另外由于算法中的每一个哈希表都是独立的,若内存一次容纳不了挖掘结果,可以考虑并行处理。第二个问题,由于改进算法采用的是哈希存储结构,第k个哈希表的长度为prime(pk*)(式中,n为物品的个数,pkk种物品的结合度(0≤pk≤1)函数prime(x)返回不大于x的最大素数),因此每一次查找成功时平均查找长度为1/2pk,而顺序查找长度为的表,在等概率条件下查找成功时的平均查找长度为(+1)/2,显然,顺序查找效率要低得多。正是由于改进算法采用了哈希的存储结构,从而使得增量挖掘的效率又进一步得到了提高。

3 算法实现

3.1 数据库的设计

数据库Transaction包含5个表:Transaction(存放旧事务的数据表,即DB);NewTransactionDB(存放新增事务的数据表,即db);DelTransactionDB(存放删除事务的数据表);Hash(存放DB挖掘结果的哈希表,将hash[i]存放在表中);HashNew(存放增量挖掘结果的哈希表)。其中Transaction、NewTransactionDB与DelTransactionDB的结构相同,如表3所示。Hash与HashNew的结构相同,如表4所示。

3.2 数据结构设计与建立

1) 哈希链表的节点结构体定义

Struct Node{

String Item //用来存放物品组合的名称

Long Count} //用来存放对应物品的支持

2) 哈希表的定义

list<Node>**Hash;

(3) 哈希表的建立

Hash=new list<Node>*[LongTranNum];

//LongTranNum用来记录最长事务中包含物品的个数

For (int i=0;i<LongTranNum;i++)

Hash[i]=new list<Node>[Prime[i]]; //Prime[i]用来记录每个哈希表的长度

For (int i=0;i<LongTranNum;i++)

For (int j=0;j<Prime[i];j++)

Hash[i][j].clear(); //对每一个哈希表清空

4 挖掘过程

1) 挖掘旧数据库

旧数据库如表5所示,n=7。

首先根据物品个数建立n个哈希表,然后扫描旧数据库中第一条事务,得出其所有非空子集{2},{3},{4},{2,3},{2,4},{3,4},{2,3,4}。假设p1=1,p2=Λ=p6=1/3,p6=p7=0利用哈希函数:

hash(x1,x2,k,xk)=order(x1)2k-1+Λ+order(xk)20mod(prime(pk*))得:

Hash[1](2)=(2*20)mod 7=2

Hash[1](3)=(3*20)mod 7=3

Hash[1](4)=(4*20)mod 7=4

Hash[2](2,3)=(2*21+3*20)mod 7=0

Hash[2](2,4)=(2*21+4*20)mod 7=1

Hash[2](3,4)=(3*21+3*20)mod 7=2

Hash[3](2,3,4)=(2*22+3*21+4*20)mod 11=7

将其放入哈希表hash[1],hash[2],hash[3]中得哈希表如图1所示。

同理,接着扫描旧数据库中第二条事务,得出其所有的非空子集{2},{4},{6},{2,4},{2,6},{4,6}{2,4,6},将其分别加入到Hash[1],Hash[2],Hash[3]中得如图2所示的哈希表。

依次处理其它事务,直到处理完最后一条事务。此时每一个哈希表的每一条线性链表中大于等于min_supItem即为旧数据库的所有频繁项集,将所有哈希表进行保存。

2) 挖掘db增加后的数据库

首先将旧数据库的挖掘结果读入到哈希表中,然后用处理旧数据库DB的方式处理新增数据库db的每一条事务,在此不再重述。处理完最后一条事务后,每一个哈希表的每一条线性链表中大于等于min_supItem即为增加db后的所有频繁项集。同样,将所有哈希表进行保存。

3) 挖掘ddb删除后的数据库

同理,首先将上次挖掘的结果读入到哈希表中,扫描数据库ddb中第一条事务,得出其所有的非空子集,对于每一个子集利用哈希函数快速进行定位,找到后将其对应的Item_Count值减1。若减1后其Item_Count为零,则将其删除;若减1后其Item_Count不为零,则将其保留,直到处理完ddb中最后一条事务。至此,每一个哈希表的每一条线性链表中大于等于min_supItem即为删除ddb后的所有频繁项集。

上述三个步骤可以只做第1)和第2)步,表示对DB∪db进行增量挖掘;也可以只做第1)步和第3)步,表示对DB-ddb进行增量挖掘;还可以1)、2)、3)步都做,表示对DB∪db-ddb进行增量挖掘。并且,在挖掘数据库时,由于每一个哈希表都是独立的且每一条事务都是独立的,因此可以并行处理。

5 测试结果比较

5.1 挖掘DB

5.1.1 |DB}=14最小支持数等于3

1) 用Apriori算法挖掘DB实验结果如图3所示。

所耗费的时间为0.047秒。所挖掘的频繁3项集为:{I1,I2,I5},{I1,I3,I6},{I2,I3,I9}。

2) 用改进算法挖掘DB,实验结果如图4所示。

所耗费的时间为0.0037秒。所挖掘的频繁3项集为:{I1,I2,I5},{I1,I3,I6},{I2,I3,I9}。

5.1.2 |DB}=100最小支持数等于10

1) 用Apriori算法挖掘DB,实验结果为:

所耗费的时间为0.156秒。所挖掘的频繁3项集为:{I1,I2,I4},{I1,I3,I4},{I2,I3,I4},{I2,I4,I6},{I3,I5,I8},{I4,I5,I6},{I5,I6,I8}。

2) 用改进算法挖掘DB,实验结果为:

所耗费的时间为0.021秒。所挖掘的频繁3项集为:{I1,I3,I4},{I2,I3,I4},{,I5,I6,I8},{I2,I4,I6},{I4,I5,I6},{I1,I2,I4},{I3,I5,I8}。

5.1.3 |DB}=1000最小支持数等于100

1) 用Apriori算法挖掘DB,实验结果为:

所耗费的时间为1.203秒。所挖掘的频繁3项集为:{I2,I3,I4},{I2,I4,I6},{I2,I6,I7},{I3,I6,I7},{I4,I5,I6},{I5,I6,I8}。

2) 用改进算法挖掘DB,实验结果为:

所耗费的时间为0.2秒。所挖掘的频繁3项集为:{I2,I3,I4},{I5,I6,I8},{I2,I4,I6},{I4,I5,I6},{I2,I6,I7},{I3,I6,I7}。

5.2 挖掘DB∪db

|DB|=900,|db|=100,最小支持数等于100

1) 用Apriori算法挖掘DB∪db,实验结果为:

所耗费的时间为1.203秒。所挖掘的频繁3项集为:{I2,I3,I4},{I2,I4,I6},{I3,I6,I7},{I4,I5,I6},{I5,I6,I8}。

2) 用改进算法挖掘DB∪db,实验结果为:

所耗费的时间为:0.019秒。所挖掘的频繁3项集为:{I2,I3,I4},{I5,I6,I8},{I2,I4,I6},{I4,I5,I6},{I3,I6,I7}。

5.3 挖掘DB-db

|DB|=1100,|db|=100,最小支持数等于100。

1) 用Apriori算法挖掘DB-db,实验结果为:

所耗费的时间为1.187秒。所挖掘的频繁3项集为:{I2,I3,I4},{I2,I4,I6},,{I2,I6,I7},{I3,I6,I7},{I4,I5,I6},{I5,I6,I8}。

2) 用改进算法挖掘DB-db,实验结果为:

所耗费的时间为0.0187秒。所挖掘的频繁3项集为:{I2,I3,I4},{I5,I6,I8},{I2,I4,I6},{I4,I5,I6},{I2,I6,I7},{I3,I6,I7}。

6 实验小结

6.1 挖掘 DB

Apriori算法与改进算法挖掘DB运行时间对比,如表6所示。

6.2 挖掘DB∪db

Apriori算法与改进算法挖掘DBdb运行时间对比,如表7所示。

6.3 挖掘DB-db

Apriori算法与改进算法挖掘DB-db运行时间对比,如表8所示。

从以上对比看出,改进算法具有以下优点:

1) 不用生成候选项集。

2) 充分利用以前的挖掘结果,不用重新扫描旧事务数据库且只扫描新增事务数据库一次。

3) 结合了哈希定位的高效性以及链表插入删除的高效性。

4) 比重新运行Apriori算法的效率要高。

因此改进算法比重新运行Apriori算法的效率要高,且实验证明也是如此。

7 结 语

考虑了数据库发生变化(增加或删除),同时最小支持度也发生变化(增大或减少)的情况下,对于关联规则的更新问题。一种可能的方法就是将关联规则的挖掘用Apriori算法重新计算一遍[7],方法虽然简单,但其缺陷也是显然的。因为原来计算出的结果将会变得无用,那么如何更好地利用原来的结果求新的关联规则就成为各种算法讨论的重点[8]。提出的该改进算法将以前挖掘的结果充分保存,进行增量挖掘时不用再扫描旧的数据库。此外,算法还可以解决数据库发生变化(增加或删除)的同时最小支持度也发生变化(增加或降低)的增量数据挖掘。经过实验证明,该改进算法比重新运行Apriori算法的效率要高。

参考文献

[1]Agrawal R,Srikant R.Fast algorithms for mining association rules[C]//Proc.of the 20th Int.Conf.on Very Large Databases(VLDB’94).Santiago,Chile:[s.n.],1994:487-499.

[2]Cheng D W,Han J,Ng V,et al.Maintenance of discovered associationrules in large databases:an incremental updating technique[C]//Proc1996 Int'1 Conf on Data Engineering,New Orleans,Louisiana,1996.

[3]冯玉才,冯剑林.关联规则的增量式更新算法[J].软件学报,1998,9(4):301-306.

[4]夏火松.数据仓库与数据挖掘技术[M].北京:科学出版社,2009.12-26.

[5]胡侃,夏绍玮.基于大型数据仓库的数据采掘[J].软件学报,1999(1):53-63.

[6]张贞梅.关联规则挖掘算法的研究[D].山东科技大学.2003:410.

[7]康晓东.基于数据仓库的数据挖掘技术[M].北京:机械工业出版社,2004.147-150.

增量工程申请 篇4

二郎镇人民政府:

郎城路玉林段泥结石路基长1.2公里,因县交通局列出的工程量清单未包含路基挡墙工程,且项目合同价款(壹拾陆万元整)未包含路基挡墙工程项目及修建款项,为防止大雨天气冲毁路基,延长路基使用寿命,保证人车正常通行,现需新增路基挡墙工程。我方根据实际情况测算,新增挡墙工程约120m³,按单价250元/m³,涉及款项约叁万元整,请镇政府实地测量后批准。

附:增加工程量明细

玉林村村民委(签字盖章):

施工方代表:

数据库增量 篇5

随着时代的发展, 信息化正在成为一股潮流影响到世界的各个角落, 21世纪也在朝着一个信息化的世纪而不断迈进。信息化就意味着大量的数据的采集, 这些大量的数据除了反映各种业务状况的基本信息外, 如果不被深层次地加工和进一步地利用, 将会成为垃圾数据而逐步被删除和遗弃。而数据只有进行加工后才能转化为信息和知识。

商业智能作为进行数据分析的一个重要知识体系, 已经在各行各业发挥着重要的作用, 著名的“啤酒与尿布”故事作为商业智能的一个典型案例已经被广泛传颂, 不管该故事的真实性如何, 但至少已经体现出了商业智能的强大力量与作用。

二、商业智能的应用

1、商业智能的概念

商业智能的技术体系主要有数据仓库、联机分析处理 (OLAP) 以及数据挖掘三部分组成。数据仓库中的数据是根据历史数据整合而成的, 数据整合的核心工作是通过抽取、转换和加载 (ETL, Extract-Transformation-Load) 操作实现数据仓库的建立, 其本质是实现从操作型数据源到分析型数据变换。数据整合的结果为数据仓库和面向主题的数据集市, 具体体现为数据立方体等。

数据立方体 (Data Cube) 是数据集市的一种表现形式, 也是数据仓库的一种应用模式。数据立方体的技术核心是“维 (Dimension) ”和“事实 (Fact) ”的概念, 通过把一个实体的多项重要属性定义为多个维, 使用户能够针对不同维上的数据进行比较。数据立方体是OLAP进行各种操作以实现各种类型分析的对象和依据, 数据立方体的数据来源于数据仓库, 数据粒度较粗, 数据量较小, 便于实现快速查询。

2、SAP商业智能

SAP是当今全球最大的应用软件供应商, 其产品除了在ERP、CRM等领域占有巨大的市场份额外, 在商业智能领域, 其产品SAP BW (Business Data Warehouse) 也具有一定的影响。

SAP BW在技术实现上, 遵行标准的数据仓库技术规范, 除此之外, 还有一定的扩展。如在数据立方体星型结构的基础上, 通过设置特性的属性对特性的信息进行扩充, 并可以参与到OLAP的数据分析中, 另外, 增加除数据立方体外新的数据存储方式——数据存储对象DSO (DataStore Object) 等。

3、商业智能的应用

商业智能的应用已经有很多成功的案例。零售商业企业可以分析商品的进货、销售、库存等业务及其相关的指标;客户服务企业可以分析客户和VIP用户的满意度、客户消费偏好、客户贡献度等指标;酒店企业可以分析客房状态、营业收入、翻台率、平均房价等指标。通过这些指标的分析, 可以掌握一定时间范围内的指标趋势变化, 以及指标同比或环比的变化情况, 企业决策者可以根据此发现影响企业经营的制约因素, 从而对企业的经营过程进行调整, 以期达到改善经营、增长利润的目的。

三、数据增量抽取的实现

1、数据抽取存在的问题

在商业智能的应用中, 数据仓库是基础, 数据的ETL是数据仓库的核心工作内容。整个ETL过程实现了从数据源读取数据、对数据进行转换、把数据加载到信息包中等过程。通过ETL过程, 源系统中的数据传输到了数据仓库中。

在SAP BW系统中, 源系统中的数据在加载到数据仓库后, 首先存储在PSA (Persistent Staging Area) 中, 而PSA是以信息包的形式存在的。PSA中的数据可以根据需要传输到信息立方体或DSO中。

对于数据量大的系统, 必须考虑增量抽取。增量抽取的优点在于:

(1) 可以缩短数据抽取的时间, 最大限度地降低数据抽取过程对源系统得影响;

(2) 可以缩短数据在网络中的传输时间及数据加载到数据仓库中的时间, 避免在一个工作周期内无法完成所有数据项目的抽取, 这在大型应用中尤其重要;

(3) 可以减少数据在PSA中的数据存储量, 最大限度地降低数据占用空间;

(4) 提高系统数据处理的性能。

如果源系统是SAP系统本身, 因SAP本身存在数据标识, 数据仓库系统可以根据标识自行解决数据增量问题, 而如果源系统是非SAP系统的第三方系统, 数据增量问题则需要特殊的技术处理才能实现。

在源系统中, 需要增量抽取的数据源一般存在两种情况:

(1) 数据源中记录有业务发生或数据变化的时间, 可以用作增量的标志, 每次抽取时根据这个时间去确定需要抽取的记录。

(2) 数据源中未记录数据业务发生或数据变化的时间, 无数据字段可以判断变化的数据。

在这两种情况下, 数据增量处理则是数据仓库建模的一项重要任务。

2、数据源具有增量特征字段的抽取实现

数据源中的增量特征字段一般为日期字段, 日期字段记录了数据库记录发生的日期或时间, 日期字段可以作为增量抽取的依据。如:零售企业中的销售数据, 销售日期可以作为增量字段。

首先要建立数据源, 确定所读取的源系统中的表或视图。然后建立该数据源的信息包, 作为PSA存储读取的源系统中的数据。

在数据源的属性中, 设置日期字段为增量抽取字段。在信息包的数据选择中, 通过编写代码实现增量抽取。ABAP代码如下:

在本例代码中, sy-datum表示当天的日期, 通过本段代码可以实现每天抽取数据时抽取最近10天的数据。如果抽取当天数据不会出现数据遗漏的可能, 也可以每天抽取当天的数据, 此时, l-data1=sy-datum-1。

这样, 在设置完成后, 执行信息包, 则SAP系统从源系统中按指定的增量日期字段读取日期范围内的数据, 并加载到PSA信息包中。

源系统中的数据加载到信息包后, 可以进行后续的处理, 如加载到信息立方体或DSO中。

3、数据源无增量特征字段的抽取实现

在源系统中, 如果没有可供使用的增量字段, 可以考虑采用SAP BW中的DSO的特性来模拟实现数据增量抽取。

DSO是SAP系统对标准数据仓库技术规范的扩展, 它主要适用于存储比较明细的数据, 它的特点是加载到DSO中的数据可以按关键字段进行覆盖或累加更新, 而不象Cube那样只能进行累加更新。实现数据增量抽取正是利用该特性:源系统中的数据每次都采用完成抽取的模式加载到PSA中, 再从PSA中加载到DSO中, 因DSO的覆盖特性, 重复抽取的数据在DSO中仅出现一次, 不存在数据重复, 这样就确保了DSO中的数据与源系统中的数据是一致的。这样从DSO向Cube进行数据加载时, 系统就采用内部的增量机制进行数据加载了。

具体实现的步骤如下:

首先, 在SAP系统中建立数据源, 并为该数据源建立信息包, 确定所读取的源系统中的表或视图, 执行数据完全抽取。

然后, 建立DSO及PSA与DSO的数据转换关系, 设置数据字段的更新方式为“覆盖”。执行数据加载, 则PSA中的数据传输到DSO中。

最后, 利用DSO中的数据进行其它的后续处理, 如加载到信息立方体或其它DSO中。

四、结论

商业智能是一个技术性比较强的应用, 海量数据存储的数据仓库是商业智能的数据基础, 强大数据分析的OLAP是商业智能的数据分析引擎, 改善数据存储和提高数据处理和分析性能是商业智能工程的一项重要工作。

因第三方源系统数据的差异性较大, 无法进行增量抽取的情况普遍存在, 给商业智能的信息化工作产生了一定的影响。通过这两种数据增量抽取方式的实现, 避免了数据存储和系统性能可能存在的隐患, 为商业智能的广泛应用创造了条件。

摘要:数据ETL是商业智能应用的一个重要环节, 数据增量抽取和更新可以提高系统的性能和降低数据存储空间, 但大部分外部数据源均无法直接实现增量抽取, 利用SAPBW产品的特性并通过编程可以实现数据的增量抽取和更新。

数据库增量 篇6

关键词:货币增量,通货膨胀,物价时滞

一、货币增量与通货膨胀二者关系

对于通货膨胀的概念, 一般指的是, 在信用货币制度下, 流通中的货币数量超过经济实际需要而引起的货币贬值和物价水平普遍而持续的上涨。现代货币主义学派认为, 通货膨胀随时随地都是一种货币现象, 就是说, 如果货币数量的增长快于产量的增加, 就会发生通货膨胀。可见, 传统经济学理论认为, 通货膨胀是指纸币的发行量超过流通中所需要的数量而导致的。

二、模型的实证

(一) 原始模型构建及回归结果分析

1. 模型构建

在此, 笔者构建简单回归模型π=β1+β2* (ΔM) +μ, 其中π为通货膨胀率 (取CPI数据) , M为货币增长率 (取广义货币M2同期增长率数据) , 结合2009-2014年各期相关数据做回归分析。

2. 回归结果

3. 回归结果分析

斜率系数-1.794271表明, 货币增长率同通货膨胀是成反向变动关系, 这以传统的理论来说是相违背的。从拟合优度看, 可决系数R-squared值很小。t0.025 (40) =2.021, 截距项与斜率项的T检验值中, 都是不显著的。笔者考虑是因为存在政策作用时滞的问题。

(二) 模型修正

1. 模型修正的原因分析

传统经济学理论认为, 货币政策存在时滞问题, 指的是货币当局从指定政策到政策取得实施效果的时差。从其内容上, 它可分为内部时滞、中间时滞和外部时滞三部分。

内部时滞一般指的是从政策制定到货币当局采取措施的这段时间。其长短取决于货币当局对经济形势发展的预见能力、制定政策的效率和行动的决心。包括:认识时滞、决策时滞和行动时滞。认识时滞是指经济金融情况变化需要货币当局采取行动到货币当局认识到这种变化并承认需要调整货币政策间的时间间隔。行动时滞是指货币当局认识到需要调整货币政策到实际采取行动之间的时间间隔。

中间时滞是指自中央银行采取行动以至对金融机构发生影响, 使金融机构改变其利率和信用情况, 以便对整个经济社会产生影响力的时间过程。

外部时滞, 指从货币当局采取行动直到对政策目标产生影响为止这段过程。主要由客观经济和金融条件决定, 不论货币是供应量还是利率, 它们的变动都立即影响到政策目标。通常是散步时滞 (distributed lag) :一旦采取政策行动, 它对经济的影响要经过一定的时间。外部时滞又可分为操作时滞和市场时滞两个阶段。从调整货币政策工具到其对中介指标发生作用所耗费的时间, 称为操作时滞。从中介变量发生反应到其对目标变量产生作用所需耗费的时间, 称为市场时滞。

外部时滞是货币政策时滞的主要部分, 也是最具有变异性的部分。它主要受经济金融体制和客观经济状况以及各经济主体对于货币政策中介指标的反应及决策行为所影响, 较少受货币当局控制。

笔者认为, 货币供应量的增加到引起通货膨胀现象这期间存在着时滞, 这就是市场时滞即物价时滞。采用滞后数据作回归分析会比较合理。模型改为:

2. 修正后的模型回归结果

(1) 当t=6时, 回归结果如下:

(2) 当t=12时, 回归结果如下:

(3) 当t=18时, 回归结果如下:

(4) 当t=24时, 回归结果如下:

3. 修正后模型回归结果分析

(1) 滞后6期、12期、18期、24期时, 货币增量ΔM前的系数均为正数, 表示货币增量与通货膨胀率二者呈正方向变动关系, 这和传统理论是相吻合的。

(2) 从拟合优度看, 可决系数R-squared最大的是滞后18期, 然后依次是滞后24期、滞后12期、滞后6期。t0.025 (40) =2.021, 截距项与斜率项的T检验值中, 滞后18期, 滞后24期都是显著的。

三、模型结论的意义——治理通货膨胀需要重视物价时滞问题

现代货币主义学派认为, 通货膨胀随时随地都是一种货币现象, 就是说, 如果货币数量的增长快于产量的增加, 就会发生通货膨胀。通过建立模型进行回归分析, 货币量的增加不会马上引起通货膨胀, 而是有一定的时滞。回归结果表明, 货币增发后在6个月后开始显现效果, 18个月左右效果最显著, 验证了货币增量与通货膨胀二者的正相关关系和货币政策的市场时滞问题。所以, 政府在治理通货膨胀时, 要重视货币政策的市场时滞, 即物价时滞问题。

如果政府把抑制通货膨胀作为货币政策的目标, 就要关注物价时滞的长短。物价时滞表明, 本年的高通胀率不一定是本年度的货币超量发行的结果, 一般来说是上一年度或更长一段时间的货币超量发行的结果。当前的通货膨胀率不高不能说明就没有通胀的隐患, 如果之前货币超量发行, 就迟早要通货膨胀, 如果等到通胀高涨再来实行紧缩政策, 通胀势必要继续蔓延一段时间, 如果又形成了心理预期, 就不好处理。所以就要求央行必须要根据物价时滞适时地调整货币政策, 才能有效地防止和治理通货膨胀, 否则往往会出现较长时间的高通货膨胀率。

参考文献

[1]张成思.中国通胀惯性特征与货币政策启示[J].经济研究, 2008, (02) .

[2]周小川.当前研究和完善货币政策传导机制应关注的几个问题[N].金融时报, 2004-04-14.

[3]郝雁.对中国货币政策效应时滞的实证分析[J].南开经济研究, 2004, (03) :109.

[4]夏德仁, 李念斋.货币银行学 (第二版) [M].中国金融出版社, 242-243.

[5]曹家和.货币政策效应的非对称性紧缩时期我国货币政策中介目标的可性研究[J].中国软科学, 2004, (04) .

[6]王志伟等.现代西方经济学主要思潮及流派第一版[M].高等教育出版社, 2004.

数据库增量 篇7

随着互联网技术的发展,Web服务数量的增长速度不断加快,对于越来越多的Web服务请求,如何保障用户所需要响应速度以及查询准确度来说是个巨大的挑战[1,2]。网络系统在保障用户的Web服务请求时,通常采用数据挖掘的方法处理大规模的Web服务请求数据[3]。

聚类算法是数据挖掘领域的一个重要研究内容,通过多个作为聚类中心的数据样本与其他数据样本之间的相似性程度,使数据样本向聚类中心靠拢,从而形成多个簇结构[4]。现有的经典聚类算法有K⁃means,QIDB⁃SCAN,PAM,AP等聚类算法[5,6,7,8]。以上一些方法没有利用本体等技术从语义层次进行匹配计算来实现服务聚类,影响了服务聚类的准确性;另外一些方法在利用传统的聚类方法实施服务聚类时,计算服务间的相似度所耗时间比较长,影响了服务聚类的效率。综上,这些算法应用为搜索引擎时,存在着精确度不高、召回率低、信息过载和淹没的问题。文献[9]提出一种基于RDB中自身连接的Web服务聚类方法,该方法利用本体概念间的语义推理关系,并设计一种基于关系数据库,快速准确实施Web服务聚类,但也存在着服务种类设定单一固定,没有考虑服务特性信息,实际应用性不高的问题。

针对上述聚类算法在应用中的问题,本文提出一种新的Web数据聚类算法,首先对于Web数据在Web服务的时间序列上的聚类过程进行了定义和分析,接着提出了增量式时间序列聚类方法,该部分包括了数据压缩和数据聚类,确保在数据挖掘前期处理掉重复的数据,利用时间相似度矩阵,对聚类任务进行分组,进一步确保所设计算法的准确度。然后依据最佳任务调度策略实现Web集群服务中的最佳负载运算状态,进一步保证本文所设计方法的快速高效。整个系统算法系统框图见图1。

1 基于时间序列的Web数据聚类定义

对于Web数据在Web服务的时间序列上的聚类过程,定义如下:

定义1 时间序列。文中时间序列K={k1,k2,⋯,kt}表示在Web服务的总的寿命轨迹中,任何时间t内表示样本数据时间特性的数字有序集合。

定义2 时间序列聚类。给定N个对象的数据集,则N={K1,K2,⋯,KN},表示一个时间集。以作为一个聚类中心,基于相似信息均匀的时间序列数据被集中在一起,这就是时间序列聚类。

定义3 相似信息。两个时间序列之间的相似性是基于它们的子序列之间的相似性。

定义4 子集群。一个子集群GCi是一组单独的在时间上具有相似性的时间序列数据,并表示为一个单一的原型。时间序列数据根据与它们的子集群紧密度被附加到新的子集群。

定义5 聚类能力。时间序列ki与一个子集群GCi的紧密度被定义为:

式中:Xij表示ki与kj之间的相似度;|GCi|表示时间序列数据的数目;A(ki)是用来区别具有低紧密度的时间序列数据,并把它们放到一个新的子集群中。

2 增量式时间序列聚类算法

时间序列分析(Time Series Analysis)是一种动态数据处理的统计方法,而本文采用的增量式时间序列聚类是采用聚类的方法先对总的数据进行时间序列的分析,从而根据时间相似性将数据分成多个子集群,再对各个子集群数据进行相似性分析。而且本文的增量式时间序列聚类方法还加入了数据压缩技术,有效减少算法运算的复杂性,减少聚类时间。该算法的流程包括数据压缩和时间序列数据聚类2个步骤。

2.1 数据压缩

对于非常相似的时间序列数据,基于增量式时间序列聚类方法首先计算出时间序列数据之间的相似度矩阵,以一个紧密度阈值为标准,通过比较阈值的大小来确定时间序列数据是否达到一定的相似程度,当数据达到一定的相似度时,通过移除这部分相似数据,从而尽可能地减少重复的无用数据,实现Web数据的压缩。

先采用数据压缩的方法可以有效地减少Web数据的复杂性[10,11]。时间序列数据首先通过归一化法而被标准化,防止时间序列数据在压缩时发生比例变化和偏移。假如K={k1,k2,⋯,kt}是一个时间序列,则时间序列数据通过归一化定义为:

式中:ai表示数据点的算术平均值;λ是在给定的时间序列内所有数据点的标准偏差。

时间序列数据之间的相似性被计算出来并存储在一个N×N的相似度矩阵XN×N中,假设DN×N为一个距离矩阵,由于Xij表示ki与kj之间的相似度,则Dij用来表示ki与kj之间的欧几里得距离,Dij的计算公式为:

当给定一个相似度矩阵XN×N,其阈值范围为(0,1)的紧密度,算法通过从一个子集群移除时间序列数据来实现数据压缩。

2.2 时间序列数据聚类

在步骤1中,时间序列数据是基于时间的相似性进行分组。当两个时间序列数据在结构信息上是相似时,在时间上并不一定相似,而只有考虑到时间序列上的相似性,才更加符合实际的Web数据聚类情况。因此,子集群之间的相似性被计算出来,并且存储在一个M×M的相似性矩阵中,用YM×M表示。Yij代表着子集群GCi与GCj之间的相似度。子集群之间的欧几里得距离是被计算出来构建相似性矩阵YM×M的。为了计算子集群GCi与GCj之间的距离,需要计算子集群GCi中所有数据点与子集群GCj中所有数据的欧几里得距离的平均值。得到距离方程:

式中:n(GCi),n(GCj)分别表示子集群GCi和GCj的数据点数量。

3 最佳任务调度

在进行Web的集群服务时,服务器的装载量平衡可以被描述为:N个任务需要分配到M个节点服务器,并且用不同的装载量和处理量进行处理,为了找到一个优化调度,以最小化总完工时间。该系统的数学模型表示如下[12,13]:

假设有M个服务器(或节点)和N个任务,并且每个任务必须被分配给一个服务器。在此采用F={f1,f2,⋯,fM}代表服务器,并用L={l1,l2,⋯,lM}表示当前的负载,N个任务表示为Y={y1,y2,⋯,yN},建立一个M×N的矩阵来表示任务和服务器,用gij表示任务yi在服务器fj的两种状态:

假设任务yi在服务器fj执行所需要的时间为tij,定义进行任务调度时最佳的系统状态具有以下条件:

(1)整个系统具有相对短的处理时间;

(2)整个系统的吞吐量在任务执行时是较大的。

采用一个函数W(yi,li,fi),它可以反映整个系统处理任务的能力:

式中:μ1和μ2分别表示一个常数;li反映当前服务器fj的负载能力;表示系统当前所有服务器的负载能力;中的ft表示对应服务器f处理每个任务的时间间隔;则表示系统在处理任务过程中的总间隔时间;的值越大,说明该系统在完成任务上花费的时间越多,则说明该系统的运算能力越差。越大,则说明系统的负载能力越强。因此这里的W(yi,li,fi)反映的是在处理每一个任务时系统在运算及负载上的综合能力,并用它来反映整个系统处理任务的能力,W(yi,li,fi)越小,则系统处理任务的能力越好。当处于任务执行状态且服务器的负载能力达到最大时,该系统处在最佳的运行状态。假设每个服务器作为一个聚类中心,任务以服务器的执行能力作为衡量紧密度的一个标准,紧密度越高的服务器,任务就会向其聚拢,但服务器每增加一个任务时,根据式(8)可知其执行能力会逐渐下降。在本文的Web数据聚类算法中,实现任务的最佳调度的步骤如下:

步骤1:在进行Web的集群服务时,对于M个服务器F={f1,f2,⋯,fM},根据式(8)计算其当前的执行能力。

步骤2:对于N个任务Y={y1,y2,⋯,yN},任务yi根据紧密度的大小σij而选择是否需要向服务器fj聚拢,σij的计算公式为:

式中:ζ(fj)表示服务器fj的最大吞吐量;loadj表示服务器fj当前的负载量;n(fj)表示当前服务器fj所接收的任务数量。

4 实验仿真及分析

4.1 仿真环境及场景设置

为了验证本文提出的基于增量式时间序列和最佳任务调度的Web数据聚类算法,在CPU为Intel Core i5,主频3.3 GHz,内存为4 GB的PC机上对算法进行了Matlab编程仿真,采用了OWLS⁃TC数据库的数据资源,本文所进行的仿真实验的Web服务总数最大为300,服务器数量为60,仿真数据取20次运行的平均结果。文献[14]提出了GACH:基于网格的高维数据的层次聚类算法;文献[15]提出了基于多目标模糊聚类的增量学习数据分类算法,本文的算法与这两篇文献中的算法进行了性能比较。

4.2 聚类时间

聚类算法完成每一次数据聚类的时间是衡量该聚类算法聚类性能的一个重要指标,为了测试本文算法的聚类性能,在仿真实验中对系统提供的数据进行了聚类,并得出算法所需的聚类时间,得到图2的结果。从图2的曲线可以看出,在服务总数增大的情况下,本文算法的聚类时间保持着较小的增长趋势,最大的聚类时间不超过200 s,而文献[14]算法和文献[15]算法的聚类时间随服务总数的增加有明显的增长趋势,且最大的聚类时间均超过500 s。可以看出,本文算法所需的聚类时间相对较少,在这方面的性能相比文献[14,15]算法具有一定的优势。因为文献[14]是一种基于网格的方法来对高维数据进行划分,网格方法虽然在数据分类上复杂度较低,但计算量较大。文献[15]采用的是模糊聚类的方法,并结合学习的方法实现数据分类,因此数据分类的迭代次数较多,运算量大。而本文的方法先对数据进行了压缩,减少了运算量,缩短了聚类时间。

4.3 聚类精确度

聚类精确度是衡量聚类算法有效性的关键,聚类精度越高说明该聚类算法能够更加有效地对样本进行分类。为了验证算法的聚类精确度,在服务总数逐渐增多的情况下,统计了三种算法的聚类精度,并得到了图3的结果。从图3中可以看出,服务总数的增加使得算法的聚类精度有下降的趋势,其中本文算法的下降幅度相对较小,从60的服务总数增多至240的服务总数时,本文算法的聚类精度下降了9%,最终处在86.7%。文献[14]的算法和文献[15]的算法则分别下降了20.3%和21.4%,最终分别处在66.4%和68.5%。从对比数据可以看出,本文算法的聚类精确度较高。文献[14]的方法只采用基于网格的方法,单一地考虑了数据的结构性特征,因此聚类精度最低。文献[15]结合聚类和机器学习的方法,在一定程度上提高了聚类精度,但相比本文的方法,缺少了对数据在时间相似度上的考虑,因此聚类精度相比本文的方法不占优势。

4.4 服务执行成功率

服务执行成功率表示对服务任务进行调度时,给服务器所分配的服务任务能够执行成功的数量与总分配的服务任务的比值,从服务执行成功率可以说明该任务调度方法是否有效。为了对这一问题进行验证,在服务总数增多的情况下,对三种算法就服务执行成功率问题进行了仿真实验。从得到的图4的结果可以看出,在服务总数增多的情况下,算法的服务成功率会出现波动的趋势,并且会有一定的下降幅度,图4中本文的算法在服务总数为30时服务执行成功率高于85%,之后下降到78%,而文献[14]和文献[15]的方法在服务总数为30时服务执行成功率均低于75%,之后分别下降到59%和53%。因此本文算法的服务执行成功率相对来说较高。

4.5 聚类失真度

聚类失真度是反映聚类算法性能的一个重要指标,失真度越小说明相似点聚在一个类中程度越高,聚类的效果就越好。在实验中失真度定义为每个点和它所属聚类的代表点之间距离的平方和,在改变数据聚类的个数的情况下,记录聚类算法的失真度,并得到了图5的结果。

从图5中可以看出,随着聚类数量的增多,聚类算法的失真程度会逐渐降低,这是因为在整体数据量不变的情况下,根据数据的特性划分的聚类数更多,则每个聚类所包含的范围越小,在某一个聚类中的数据就越接近所属聚类的代表点。图5中本文算法的聚类失真度最低达到了5.4%,而文献[14]算法达到了8.3%,文献[15]达到了7.1%,相比较这两个对比算法,本文算法的失真度更小,聚类的效果就越好。

5 结论

不再以“增量”论英雄 篇8

“十二五”期间, 无机盐行业工作重点是实现两个转型:产业结构转型和产品结构转型。在产业结构转型方面, 目前无机盐行业整体仍然存在生产厂点多、企业规模小的问题, 全行业虽产能和产量位居世界前列, 但企业平均规模却远低于世界发达国家水平。部分生产资源型产品的企业远离资源地, 大量基础产品生产与下游原料加工产品分散, 造成企业物流量大、运输成本高, 资源配置不合理。

在产品结构转型方面, 无机盐行业无论在产品质量还是在规格品种上, 都尚未形成具有一定梯度的产品体系, 存在产品结构雷同、中低档产品偏多的问题, 一旦市场发生变化, 大宗通用产品市场萎缩, 就会危及行业全局和大多数企业的生存发展。

为实现行业转型升级, 无机盐协会明确了“十二五”发展目标:行业工业增加值能耗下降20%;主要产品能耗降低15%, 主要污染物排放总量降低15%, 其中铬盐含铬废渣处置利用率达100%, 危险固体废渣处置率达100%, 化学需氧量排放量降低8%;无机盐产品精细化率由目前的35%左右提高到50%以上, 出口产品结构中精细化产品比重达到40%以上等。

要实现行业“十二五”目标, 要从四个方面着手。

一是要严格控制过剩产能的发展。对列入《产业结构调整和指导目录 (2010年本) 》淘汰类和限制类的无机盐产品, 3年内要逐步退出市场, 特别是列入环保部“双高”产品名录的产品, 其落后产能要坚决淘汰。严格执行行业准入政策, 遏制产能盲目扩张。

二是优化企业结构, 要通过淘汰落后、兼并重组、资产整合等, 减少企业数量, 提高产业集中度。到2015年, 要形成若干具有核心竞争力和资源优势的大型企业集团及若干产业集聚区, 培育一批知名品牌的龙头企业, 大幅度提高行业前3名企业销售收入在行业总量中的比重, 扩大销售过百亿元企业的数量。资源型产品要进一步向原料产地集中, 铬盐、钾盐钾肥、钡盐、锶盐、二硫化碳、钙镁盐、无水硫酸钠和硫化钠等行业要继续推进生产基地建设。磷化工、硅酸盐、氯酸盐、过氧化物、锰盐等要形成一批与市场联系紧密、具有不同特色的产业园区。

三是要努力提高精细化率。发展重点包括以下领域:超细粉体材料、分子筛等微孔材料、碳纤维等高性能增强无机纤维、高性能结构材料、电子信息材料、无公害涂料和颜料、阻燃材料、水处理材料、贮能功能材料、试剂和高纯物、其他精细功能材料等。近期重点发展的新产品包括:无水碳酸镁—无机阻燃产品, 阻燃剂氢氧化镁产品, 镁质排烟脱硫、废水治理产品, 水菱镁石, 镁盐晶须产品, 六氟磷酸锂, 电子级氢氟酸等。

上一篇:城市下沉式广场设计下一篇:责任政府建设