2012-07-23 38 views
3

有人可以在處理短時間高度瞬態的數據方面談論'普遍實踐'或一般「可接受的做法」 - 但多年來一直存在歷史存在......關於「歷史」數據的數據設計和實踐

以一個小型旅遊公司 - 預訂旅遊爲例。 旅客清單將高度流動,直到旅遊.. 一旦旅遊完成 - 數據在技術上已過時,但有用的報告或趨勢...

與高音量 - '搜索'或'創造'一個旅遊 - 數據庫將變得厚實,只有很少會改變的數據。

是否具有類似結構的表格 - 將數據從一種狀態「移動」到另一種狀態(PRE/POST事件)......在數據倉庫存儲爲「純粹」的半扁平結構之前'報告

這是明智的,共同的還是正確的?有沒有更好的方法來做到這一點......或是圓頂DBA會進來和去「跆拳道你在想什麼」

+0

你在找什麼是「數據倉庫」。 – jva 2012-07-23 18:52:56

回答

1

標準將有某種標誌來指示記錄過時。有幾種方法可以讓你處理性能問題,如修剪和索引技術。這些可能還包括某種歸檔策略。您可能會從表中移出舊數據(多長時間和何時取決於性能要求),或者將某種批量插入到具有相同結構的歷史記錄表中(您如何實際實現這將取決於您的DBMS,但選擇最多強大的方法),或者如果您的DBMS具有強大的分區系統,則可以使用某種排序或分區策略。如果需要歷史數據的分析人員與運行操作系統的人員不同,您還可以考慮採用某種多數據庫歸檔策略。

0

當然,這樣的設計決定取決於其他因素。但總的來說,將數據從一個表移動到另一個表並不是一個好主意。

更好的選擇是在您的記錄上有效和結束日期。所以,如果有人報名參加巡迴演唱會,那麼他們的紀錄就是以那個日期的潮流開始的。如果他們退出,那麼這個人得到並結束日期。如果他們再次註冊,他們會得到一個新的記錄,並有一個新的效果日期。

這使您可以在過去的任何時候重建歷史記錄。

+0

是的,但是不要以db引擎必須在查詢中處理的數據塊爲結束。讓我們發瘋,並說這是一家航空公司或一些這樣的實體,每天有1000名乘客(記錄)在1000條航班上......即使您過濾日期 - 是不是? 如果一個職員在x flt上查找x個人 - 並且您有兩年的數據 - 其中大部分數據是不相關的 - 在數據庫的db方面效率非常低 – jpmyob 2012-07-23 15:51:43

+0

您可以通過索引查詢相關數據那就是O(logN)。 – jva 2012-07-23 18:49:33