2011-05-22 49 views
4

我正在設計一個系統,其中諸如「在特定時間匹配某些標準的所有記錄的總和是多少」這樣的問題是重要的。什麼數據存儲系統允許查詢過去的系統狀態?

多值併發控制(MVCC)似乎是這裏要走的路,因爲它永遠保持審計線索。

但是,如果數據存儲可以爲我處理這個問題,而不是將它整合到其他數據庫功能之外,那將會很不錯。現在,Oracle和CouchDB的其他數據庫引擎使用MVCC,但只能在幕後。他們使用它來解決衝突或決定長時間運行的查詢遇到最近更新的數據時要執行的操作。但是我不知道有哪些系統允許你明確地說「在2009年1月20日17:00的系統狀態下,這個查詢返回什麼」。那麼那裏有這樣的系統嗎?理想情況下,開源?

回答

1

查看Oracle的閃回查詢。

+0

哦,那很好。但是閃回似乎仍然是窺視內部MVCC表示的一種方式。你可以設置一個定時器,這樣它肯定會保留舊版本一段時間,但在例子中我看到它相對較短,就像幾個小時。我見過的例子顯示這是恢復已刪除數據的一種方法。 – NeilK 2011-05-23 00:03:13

+0

是的,我用它來從數據刪除中恢復,但沒有理由我知道不要因爲其他原因使用它。您可以保留數據的時間長短取決於可用的磁盤空間(閃回恢復空間)與更改量。 – Karl 2011-05-23 01:24:32

1

據我所知,MVCC不保證早期版本的行的持續時間。其目標是交易的併發控制;當'x'行的所有事務都被提交時,MVCC不需要保留該行的早期版本。您正在考慮Temporal Databases。 Snodgrass的舊書在SQL中開發面向時間的數據庫應用程序值得瀏覽,尤其是現在它以PDF格式提供。如果我不得不再次從頭開始創建臨時數據庫,我還會讀取時間數據&關係模型,以及其他任何涉及6NF的內容。 (其中'6NF'<>'DKNF'。)