我有一個應用程序,我想拍攝所有實體的快照,創建表示特定時間點的克隆表。然後我希望能夠比較這些快照之間的差異,以查看數據隨着時間的推移如何變化。如何克隆和比較NHibernate中的表?
你會如何在NHibernate中完成這項工作? NH似乎並不是針對這種類型的數據操作設計的,我不確定是否濫用我的數據庫,NH或兩者。
(附註:由於數據庫引擎的限制,我無法使用視圖或存儲的特效。)
我有一個應用程序,我想拍攝所有實體的快照,創建表示特定時間點的克隆表。然後我希望能夠比較這些快照之間的差異,以查看數據隨着時間的推移如何變化。如何克隆和比較NHibernate中的表?
你會如何在NHibernate中完成這項工作? NH似乎並不是針對這種類型的數據操作設計的,我不確定是否濫用我的數據庫,NH或兩者。
(附註:由於數據庫引擎的限制,我無法使用視圖或存儲的特效。)
我最終用快照ID列增強了我的實體,並在表中複製了條目。結合過濾器,我可以從任何給定的快照中進行選擇。必須對遺留代碼做一些補丁,但它基本上可行。
你真的需要保存每個實體的全部在此快照?如果是這樣,也許一些名稱類似type_snapshot的表將會有所幫助。你可以將你的實體保存到這張表中(只能插入,不能更新)。您可以存儲原始項目的標識符,併爲快照本身生成新的標識符。你可以保存每個快照的時間戳。你item_snapshot表看起來是這樣的:
id | snapshot_date | item_id | item_prop1 | item_prop2 ...
123 | 7/16/10 | 15 | "item desc" | "item name" ...
在您的域名,也許你可以用快照實例工作(含快照的ID和快照日期,隨着T的實例)
它可能不是理想的,因爲它會引入第二組映射,但它是一種獲取你要去的地方的方法。看起來你可能更適合做更接近數據庫引擎的東西,但是不知道你對這些快照有什麼想法(從應用程序的角度來看)它很難說。
我們結束了,爲快照創建了一個類型爲timestamp的額外列的重複表。主表上的索引變小了,因爲我們有1000萬行+,因此在同一表中添加版本會創建更多的記錄。還有不同表空間(mssql上的db文件)中的版本表