聚集目標(biāo)表在DB2中的關(guān)鍵作用分析
導(dǎo)讀:在DB2數(shù)據(jù)庫中有一種比較特殊的表,叫做聚集目標(biāo)表。這個聚集目標(biāo)表跟視圖類似,都是只讀的,是對基礎(chǔ)表的統(tǒng)計。但是在本質(zhì)上是不同的,即隨著時間的推移,系統(tǒng)會向聚集目標(biāo)表中追加行。也就是說,表中的數(shù)據(jù)是在數(shù)據(jù)庫中實(shí)際存在的,而不是像視圖一樣是一種虛表??梢娋奂繕?biāo)表能夠起著視圖類似的作用,但是又可能保證數(shù)據(jù)的穩(wěn)定性。
一、了解DB2數(shù)據(jù)庫中的CD表。
在分析具體目標(biāo)表對DB2數(shù)據(jù)庫的作用之前,筆者認(rèn)為首先需要了解一下CD表。這也是DB2數(shù)據(jù)庫中一種特有的標(biāo)。聚集目標(biāo)表就是在這個CD表的基礎(chǔ)上建立起來的。在DB2數(shù)據(jù)庫中,可以實(shí)現(xiàn)類似其他數(shù)據(jù)庫的數(shù)據(jù)復(fù)制功能。即可以在源數(shù)據(jù)庫與預(yù)訂集成員之間進(jìn)行數(shù)據(jù)的復(fù)制與同步,以生成數(shù)據(jù)庫副本。有時候在預(yù)訂集成員中,可能需要追蹤數(shù)據(jù)源表的更改,此時就需要使用這個CD表。DB2的官方文檔對于CD表是這么定義的:對于為DB2數(shù)據(jù)庫服務(wù)器上的更改捕獲復(fù)制而注冊的每個用戶表,都有一個對應(yīng)的更改數(shù)據(jù)表。簡單的說,這個CD表,又稱之為更改數(shù)據(jù)表,就是用來幫助數(shù)據(jù)庫管理員追蹤源表中更改的數(shù)據(jù)(包括更新、刪除、插入等等)。某種應(yīng)用程序會讀取在更改數(shù)據(jù)表中已經(jīng)遞交的行,并將他們復(fù)制到映射至已經(jīng)注冊的表的任何目標(biāo)表中。對于剛接觸DB2數(shù)據(jù)庫的管理人員來說,只需要知道,這個CD表(數(shù)據(jù)更新表)中,就是用來分析、追蹤源表中用戶所做的更改。
二、聚集目標(biāo)表的類型與差異分析。
在DB2數(shù)據(jù)庫中,聚集表主要有兩種類型,分別為基本聚集表與更改聚集表。這兩種表雖然都是聚集表,但是有很大的差異。作為數(shù)據(jù)庫管理員必須了解他們之間的差異,并在實(shí)際工作中,根據(jù)用戶的需求來選擇合適的聚集目標(biāo)表。簡單的說,這兩種目標(biāo)表的差異主要在于統(tǒng)計的源表不同。而源表的數(shù)據(jù)不同,最終導(dǎo)致兩種聚集表的結(jié)果有天壤之別。
基本聚集表其統(tǒng)計的是數(shù)據(jù)庫的基本表中的內(nèi)容。數(shù)據(jù)庫之所以要采用基本聚集表,主要是用來定期追蹤特定表中數(shù)據(jù)的狀態(tài)。如現(xiàn)在有一張客戶信息表,表中記錄著企業(yè)當(dāng)前的所有客戶信息,包括新增加的客戶、已經(jīng)終止交易的客戶等等。利用聚集目標(biāo)表的sum函數(shù)或者avg函數(shù)就可以實(shí)現(xiàn)對這張表中數(shù)據(jù)的追蹤分析。如現(xiàn)在用戶需要知道某個年度每個月份的實(shí)際有效的客戶數(shù)量,則就可以按月來計算源表中的平均行數(shù)(利用avg函數(shù)來是想)然后將結(jié)果存儲在基本聚集表中。由于基本聚集表中的數(shù)據(jù)雖然是來自于源表,但是是數(shù)據(jù)庫中實(shí)際存在的記錄。為此在下一次運(yùn)算的時候,不會隨著源表中內(nèi)容的更改,而影響到原有的統(tǒng)計結(jié)果。這個特性就是聚集目標(biāo)表與視圖的最大差別。由于前幾個月的統(tǒng)計結(jié)果不會隨著源表中數(shù)據(jù)的更改而改變,如此的話,用戶就可以用來統(tǒng)計、分析每個月用戶數(shù)量的變化情況。
不過這個基本聚集表有一個很大的缺陷,就是不能夠反映出源表中數(shù)據(jù)的更改情況。如在7月份,企業(yè)增加了5個新客戶,但是同時也終止了5個新客戶。此時在基本聚集表中,反映的7月份有效客戶數(shù)量跟6月份是相同的。但是實(shí)際情況是,雖然最后的結(jié)果是相同的,但是客戶明細(xì)發(fā)生了變化。由于基本聚集表只是對源表進(jìn)行簡單的sun與avg等統(tǒng)計,所以不能夠追蹤到這些變化。這就是基本聚集表的特點(diǎn),也是其最大的缺陷之一。
為了彌補(bǔ)基本聚集表的這個缺陷,在DB2數(shù)據(jù)庫中又提出了更改聚集表的概念。更改聚集表與基本聚集表最大的差異就是他們所統(tǒng)計的源表是不同的?;揪奂硭y(tǒng)計的源表是基本數(shù)據(jù)表,如客戶信息表等等。而更改聚集表所統(tǒng)計的源表是使用上面談到的CD(更改數(shù)據(jù)表)表中的內(nèi)容,而不是采用源表中的內(nèi)容。而因?yàn)楦臄?shù)據(jù)表記錄了某張源表的變更情況,所以這個更改聚集表就能夠反映出源表中數(shù)據(jù)的具體變化情況。如在上面這個例子中,用戶不僅僅只滿足與統(tǒng)計當(dāng)前每月的有效客戶數(shù)量,還需要了解每個月得到的客戶數(shù)量與書去的客戶數(shù)量。因?yàn)閷τ谄髽I(yè)來說,得到一個新客戶的成本很大。從某種角度來說,企業(yè)寧愿千方百計的留住現(xiàn)有的客戶,也不愿意再去開發(fā)新的客戶。也就是說,如果企業(yè)一邊在增加新的客戶,一邊又不斷的在失去老客戶,那么對于企業(yè)來說這是一種失敗的經(jīng)營方式。為此,不少企業(yè)一方面在追求客戶的數(shù)量,另一方面可能更加的關(guān)注老客戶的流失。筆者已經(jīng)碰到過不少的企業(yè)用戶,他們非常的關(guān)注與當(dāng)月客戶流失數(shù)量與新增加客戶的比例。如果新增加客戶的數(shù)量大于客戶的流失數(shù)量,那么銷售人員不僅得不到應(yīng)有的獎勵,最后還有可能受到懲罰。所以從這種角度來講,這個需求就比統(tǒng)計客戶的有效數(shù)量還要來得重要。要實(shí)現(xiàn)這個需求,就需要用到更改聚集表。更改聚集表會根據(jù)客戶信息表對應(yīng)的CD表,來追蹤客戶信息表中數(shù)據(jù)的變化情況。如會統(tǒng)計當(dāng)月客戶信息表中新顧客增加的數(shù)量(表中有了insert插入操作)與老客戶失去的數(shù)量(表中有了刪除操作)。通過這個手段,就可以統(tǒng)計新老客戶的變化情況,從而為企業(yè)決策提供數(shù)據(jù)上的支持。
三、基本聚集表與更改聚集表相互依存。
從以上的分析中可以看出,雖然兩個類型的聚集目標(biāo)表所依據(jù)的基礎(chǔ)表不同,他們產(chǎn)生的結(jié)果也有天壤之別,但是他們并不是對立的。從用戶的需求來講,這兩個類型的聚集目標(biāo)表是相互依存的。如企業(yè)可能需用同時統(tǒng)計每個月有效客戶數(shù)量的變化情況與新老客戶的變化情況,此時就需要同時用到這兩個基本目標(biāo)表。
其實(shí)筆者有時候更喜歡從另一個角度來考慮這兩個表的差異。對于基本聚集表來說,其與源表的關(guān)系比較親,即源表-基本聚集表,中間沒有任何的中介。而對于更改聚集表來說,其源表與更改聚集表之間的關(guān)系就比較遠(yuǎn),中介夾著一個CD數(shù)據(jù)更改表。他們的關(guān)系就變?yōu)榱嗽幢?CD數(shù)據(jù)更改表-更改聚集表。正是因?yàn)橛辛薈D數(shù)據(jù)更改表在中間起了一個過濾的作用,所以才導(dǎo)致更改聚集表與基本聚集表他們之間結(jié)果上的差異。由于CD數(shù)據(jù)更改表保存了源表中的數(shù)據(jù)的變化情況,才使得更改聚集表能夠統(tǒng)計分析出源表中數(shù)據(jù)的變化情況。所以,我們可以把基本聚集表當(dāng)作是兩層結(jié)構(gòu),而將更改聚集表當(dāng)作是三層結(jié)構(gòu)。從而可能更加容易理解這兩個類型的聚集目標(biāo)中的差異。在實(shí)際工作中,也更容易選擇。在何時的情況下,選擇使用合適的聚集目標(biāo)表。不過在開發(fā)一些套裝軟件中,筆者喜歡同時使用他們。最終讓用戶選擇到底使用哪個聚集目標(biāo)表。
通過上文中的詳細(xì)分析,大家現(xiàn)在應(yīng)該都已經(jīng)了解了聚集目標(biāo)表在DB2中的關(guān)鍵作用,本文比較適合初學(xué)者學(xué)習(xí),希望大家都能夠從中收獲。
【編輯推薦】