以下的文章主要介紹的是聚集目標表在DB2數據庫中的關鍵作用分析,在DB2數據庫中一特殊的表是聚集目標表。這個聚集目標表是一個只讀表,它使用SQL列函數,如sum通機函數或者avg求平均值函數來計算源表中的全部內容或者追蹤源表數據的最新更改。
在DB2數據庫中有一種比較特殊的表,叫做聚集目標表。這個聚集目標表是一個只讀表,它使用SQL列函數,如sum通機函數或者avg求平均值函數來計算源表中的全部內容或者追蹤源表數據的最新更改。這個聚集目標表跟視圖類似,都是只讀的,是對基礎表的統計。
但是在本質上是不同的,即隨著時間的推移,系統會向聚集目標表中追加行。也就是說,表中的數據是在DB2數據庫中實際存在的,而不是像視圖一樣是一種虛表。可見聚集目標表能夠起著視圖類似的作用,但是又可能保證數據的穩定性。
一、了解DB2數據庫中的CD表。
在分析具體目標表對DB2數據庫的作用之前,筆者認為首先需要了解一下CD表。這也是DB2數據庫中一種特有的標。聚集目標表就是在這個CD表的基礎上建立起來的。在DB2數據庫中,可以實現類似其他數據庫的數據復制功能。即可以在源DB2數據庫與預訂集成員之間進行數據的復制與同步,以生成數據庫副本。
有時候在預訂集成員中,可能需要追蹤數據源表的更改,此時就需要使用這個CD表。DB2的官方文檔對於CD表是這麼定義的:對於為DB2數據庫服務器上的更改捕獲復制而注冊的每個用戶表,都有一個對應的更改數據表。簡單的說,這個CD表,又稱之為更改數據表,就是用來幫助數據庫管理員追蹤源表中更改的數據(包括更新、刪除、插入等等)。
某種應用程序會讀取在更改數據表中已經遞交的行,並將他們復制到映射至已經注冊的表的任何目標表中。對於剛接觸DB2數據庫的管理人員來說,只需要知道,這個CD表(數據更新表)中,就是用來分析、追蹤源表中用戶所做的更改。
二、聚集目標表的類型與差異分析。
在DB2數據庫中,聚集表主要有兩種類型,分別為基本聚集表與更改聚集表。這兩種表雖然都是聚集表,但是有很大的差異。作為DB2數據庫管理員必須了解他們之間的差異,並在實際工作中,根據用戶的需求來選擇合適的聚集目標表。簡單的說,這兩種目標表的差異主要在於統計的源表不同。而源表的數據不同,最終導致兩種聚集表的結果有天壤之別。
基本聚集表其統計的是數據庫的基本表中的內容。數據庫之所以要采用基本聚集表,主要是用來定期追蹤特定表中數據的狀態。如現在有一張客戶信息表,表中記錄著企業當前的所有客戶信息,包括新增加的客戶、已經終止交易的客戶等等。利用聚集目標表的sum函數或者avg函數就可以實現對這張表中數據的追蹤分析。
如現在用戶需要知道某個年度每個月份的實際有效的客戶數量,則就可以按月來計算源表中的平均行數(利用avg函數來是想)然後將結果存儲在基本聚集表中。由於基本聚集表中的數據雖然是來自於源表,但是是數據庫中實際存在的記錄。為此在下一次運算的時候,不會隨著源表中內容的更改,而影響到原有的統計結果。這個特性就是聚集目標表與視圖的最大差別。由於前幾個月的統計結果不會隨著源表中數據的更改而改變,如此的話,用戶就可以用來統計、分析每個月用戶數量的變化情況。
不過這個基本聚集表有一個很大的缺陷,就是不能夠反映出源表中數據的更改情況。如在7月份,企業增加了5個新客戶,但是同時也終止了5個新客戶。此時在基本聚集表中,反映的7月份有效客戶數量跟6月份是相同的。但是實際情況是,雖然最後的結果是相同的,但是客戶明細發生了變化。由於基本聚集表只是對源表進行簡單的sun與avg等統計,所以不能夠追蹤到這些變化。這就是基本聚集表的特點,也是其最大的缺陷之一。
為了彌補基本聚集表的這個缺陷,在DB2數據庫中又提出了更改聚集表的概念。更改聚集表與基本聚集表最大的差異就是他們所統計的源表是不同的。基本聚集表所統計的源表是基本數據表,如客戶信息表等等。而更改聚集表所統計的源表是使用上面談到的CD(更改數據表)表中的內容,而不是采用源表中的內容。
而因為更改數據表記錄了某張源表的變更情況,所以這個更改聚集表就能夠反映出源表中數據的具體變化情況。如在上面這個例子中,用戶不僅僅只滿足與統計當前每月的有效客戶數量,還需要了解每個月得到的客戶數量與書去的客戶數量。因為對於企業來說,得到一個新客戶的成本很大。從某種角度來說,企業寧願千方百計的留住現有的客戶,也不願意再去開發新的客戶。也就是說,如果企業一邊在增加新的客戶,一邊又不斷的在失去老客戶,那麼對於企業來說這是一種失敗的經營方式。
為此,不少企業一方面在追求客戶的數量,另一方面可能更加的關注老客戶的流失。筆者已經碰到過不少的企業用戶,他們非常的關注與當月客戶流失數量與新增加客戶的比例。如果新增加客戶的數量大於客戶的流失數量,那麼銷售人員不僅得不到應有的獎勵,最後還有可能受到懲罰。
所以從這種角度來講,這個需求就比統計客戶的有效數量還要來得重要。要實現這個需求,就需要用到更改聚集表。更改聚集表會根據客戶信息表對應的CD表,來追蹤客戶信息表中數據的變化情況。如會統計當月客戶信息表中新顧客增加的數量(表中有了insert插入操作)與老客戶失去的數量(表中有了刪除操作)。通過這個手段,就可以統計新老客戶的變化情況,從而為企業決策提供數據上的支持。
三、基本聚集表與更改聚集表相互依存。
從以上的分析中可以看出,雖然兩個類型的聚集目標表所依據的基礎表不同,他們產生的結果也有天壤之別,但是他們並不是對立的。從用戶的需求來講,這兩個類型的聚集目標表是相互依存的。如企業可能需用同時統計每個月有效客戶數量的變化情況與新老客戶的變化情況,此時就需要同時用到這兩個基本目標表。
其實筆者有時候更喜歡從另一個角度來考慮這兩個表的差異。對於基本聚集表來說,其與源表的關系比較親,即源表-基本聚集表,中間沒有任何的中介。而對於更改聚集表來說,其源表與更改聚集表之間的關系就比較遠,中介夾著一個CD數據更改表。他們的關系就變為了源表-CD數據更改表-更改聚集表。
正是因為有了CD數據更改表在中間起了一個過濾的作用,所以才導致更改聚集表與基本聚集表他們之間結果上的差異。由於CD數據更改表保存了源表中的數據的變化情況,才使得更改聚集表能夠統計分析出源表中數據的變化情況。所以,我們可以把基本聚集表當作是兩層結構,而將更改聚集表當作是三層結構。
從而可能更加容易理解這兩個類型的聚集目標中的差異。在實際工作中,也更容易選擇。在何時的情況下,選擇使用合適的聚集目標表。不過在開發一些套裝軟件中,筆者喜歡同時使用他們。最終讓用戶選擇到底使用哪個聚集目標表。以上的相關內容就是對聚集目標表在DB2數據庫中的關鍵作用分析的介紹,望你能有所收獲。