資料倉儲之拉鍊演算法(轉)

miguelmin發表於2009-02-16

鏈:古代軟兵器的中介之物,故名思意.有著連線、銜接的意思.拉鍊演算法是目前資料倉儲領域比較XX的演算法之一..通用非常廣.記錄資料量很大且為全量實體記錄歷史的操作。

[@more@]例如,某某行動通訊公司客戶資料,以河北為例,河北有客戶2800W,客戶資料每個一條就是2800W條記錄算上歷史客戶,全量大概有5000W條左右。作為資料倉儲來儲存這些資訊幾千萬條記錄不算什麼。可是要是記錄歷史全量所用到的儲存就非常的龐大。問題例項為:一般正常情況下,從河北移動的BOSS系統上每天採集全量的日資料大概為2500W條,歷史儲存每天儲存一個2500W條的日表,儲存三個月,就需要3*30*2500W條的資料儲存空間,資料量為20E。這只是儲存三個月的歷史如果儲存更長時間則無法估計需要的儲存。而用拉鍊演算法儲存。每日只是向歷史表(HIS)中新增新增和變化的資料量。每日不過數十W條。儲存一年也就是需要5000W條記錄的儲存空間即兩個日全量的空間。下面詳細介紹下拉鍊演算法:
1.採集當日全量儲存到 ND(NewDay) 表中。(比正常的全量表多兩個欄位(START_DATE&END_DATE))
2.可從歷史表中取出昨日全量資料儲存到 OD(OldDay)表中。(比正常的全量表多兩個欄位(START_DATE&END_DATE))
3.用ND-OD為當日新增和變化的資料(即每日增量)。
4.用OD-ND為狀態到此結束需要封鏈的資料。
5.歷史表(HIS)比ND表和OD表多兩個欄位(START_DATE&END_DATE)
6.針對第三部來講,ND和OD表的(START_DATE&END_DATE)分別記錄當前日期和最大日期,取意為開始日期為當前天的資料和結束日期為最大日期。注意OD和ND的START_DATE
ND——OD兩個表進行全欄位比較但是(START_DATE&END_DATE)除外。將結果記錄到W_I表中
OD——ND兩個表進行全欄位比較同樣(START_DATE&END_DATE)除外。將結果記錄到W_U表中
7.將W_I表的內容全部插入到HIS表中。
8.對歷史表(HIS)和OD表比較對歷史表最更新操作即在歷史表(HIS)中資料進行更新操作以W_U表為準,即對歷史表與W_U比對(START_DATE&END_DATE除外),在歷史表(HIS)中也在W_U表中的資料將其END_DATE改成當前天,說明該記錄對當前天失效。
9。取資料時候對日期進行條件選擇即可如:取20080101日的資料條件部分為
(where start-date<='20080101' and end_date>20070801 )即可
全部SQL為:
(select * from table(his) where start-date<='20080101' and end_date>20070801 )

下面為具體例子:

OD(在第一天就等於HIS)
使用者標誌 狀態 開始時間 結束時間
1 1 200712 299901
2 2 200712 299901
3 3 200712 299901
4 4 200712 299901
5 5 200712 299901

ND
使用者標誌 狀態 開始時間 結束時間
1 2 200801 299901
2 2 200801 299901
3 4 200801 299901
4 4 200801 299901
5 6 200801 299901

W_I=ND-OD
使用者標誌 狀態 開始時間 結束時間
1 2 200801 299901
3 4 200801 299901
5 6 200801 299901

W_U=OD-ND
使用者標誌 狀態 開始時間 結束時間
1 1 200712 299901
3 3 200712 299901
5 5 200712 299901

INSERT操作 把I插入到HIS
使用者標誌 狀態 開始時間 結束時間
1 1 200712 299901
2 2 200712 299901
3 3 200712 299901
4 4 200712 299901
5 5 200712 299901
1 2 200801 299901
3 4 200801 299901
5 6 200801 299901

update操作 按U更新HIS
使用者標誌 狀態 開始時間 結束時間
1 1 200712 200801
2 2 200712 299901
3 3 200712 200801
4 4 200712 299901
5 5 200712 200801
1 2 200801 299901
3 4 200801 299901
5 6 200801 299901

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16723161/viewspace-1017421/,如需轉載,請註明出處,否則將追究法律責任。

相關文章