粒度
以前一直不能理解粒度是什么意思,當看到《Building the Data Warehouse, 4th Edition》的第二章中的粒度小節時解開了多時的困擾。雖然書上沒有用一個一句很明確的語言來描述粒度的含義,但是這本書通過例子讓我明白了粒度的含義。下面以一個例子來解釋粒度這個詞。
例子:
對于一個電話公司來說,記錄用戶的通話記錄是一項很平常的工作,在這項工作中就包含了一個例子:電話公司面臨著一個需要決策的地方,就是究竟是以高粒度存儲用戶通話記錄還是以低粒度存儲用戶通話記錄。如果以高粒度存儲,那么就需要存儲每個用戶每條通話記錄的詳細信息(可能包括日期、時間、通話人、接線員、通話時長等等);如果以低粒度存儲,就只需要存儲每個用戶一個月(假設是一個月,也可以是一周等)的通話綜合信息(可能包括月份、通話總次數、平均時長、長途次數等等)。
含義
意思就是高粒度的數據記錄對應著損失部分細節,低粒度對應著保留了細節的完整性,當然這就意味著執行低粒度需要占用很大的存儲空間來存儲大量的細節數據,在數據查詢的時候需要在更大的數據記錄集中進行搜索,從而產生更大的開銷。
這兩種模式在實際生產中根據實際情況進行取舍,而且在數據倉庫建設過程中同時使用兩種粒度,這樣既能提高程序執行性能,又能保留細節查詢功能,低粒度數據體現為真實檔案數據,高粒度體現為輕度綜合數據。
活樣本數據庫
活樣本數據庫是從數據倉庫中取得的真實檔案數據或輕度綜合數據的一個子集,抽取的方式可以是隨機也可以是條件篩選,那么做出活樣本數據庫的目的是什么呢?一般來說是為了提高效率。
這里先解釋一個名詞:啟發式分析,我的理解是在某一時刻分析人員的腦海中出現了一個idea,但是不知道這個idea實現的效果是怎么樣的,于是立馬開始編寫程序進行分析,在幾十秒或者幾分鐘之內就呈現出了結果,發現有一點可以進行改進的地方,于是馬上修改程序,又進行一次程序執行,又得到一次結果,又修改程序,又得出結果,最終得出一個滿意的結果的過程。這個過程中程序執行時間不宜太長,不然就達不到這種類似交互式分析的效果了。
于是我們知道:如果每次執行分析程序時都遍歷數據倉庫中所有相關數據,那么程序的執行時間肯定很長,有可能會達到好幾小時或者一兩天。于是就有了活樣本數據庫,每次程序執行的時候在活樣本數據庫上跑,這樣花費的時間就會打打縮短。
舉個例子:
分析一個有25000000條數據的大文件,結果顯示有56.7%的男性,花費了5小時,如果對這個大文件進行采樣,形成活樣本數據庫只有25000條數據,程序執行只花費了5分鐘,結果是55%的男性,盡管第一種方式更加精確,但是花費的時間成本太高,而產生的兩個結果之間差異很小,所以一般啟發式分析時會采用第二種方式。
~本文為《Building the Data Warehouse, 4th Edition 》第二章第二次讀書筆記