我有一個要求,以易於索引的方式存儲實體的所有版本,並想知道是否有人對什麼系統使用有任何輸入。版本和索引數據存儲
沒有版本控制系統是簡單地用每一行,例如,人的關係型數據庫。如果該人的狀態發生改變,該行被改變以反映這一點。通過版本控制,條目應該以這種方式進行更新,以便我們可以隨時回到以前的版本。如果我可以使用時間數據庫,這將是免費的,我可以問'在都柏林和30歲的時候,下午2點,所有人的狀態如何。不幸的是,似乎沒有任何成熟的開源項目可以做到時間。
一個真正討厭的方式做,這就是插入每狀態變化的新行。這會導致重複,因爲一個人可以有很多字段,但每次更新只能更改一個字段。爲每個給定時間戳的人選擇正確的版本也很慢。
理論上應該可以使用關係數據庫和版本控制系統模擬一個時態數據庫,但這聽起來很可怕。
所以我想知道是否有人已經遇到以前類似的東西,他們是如何處理的呢?
更新 正如Aaron所建議的,這裏是我們目前使用的查詢(在mysql中)。在我們的桌子上,行數大於200k肯定很慢。 (ID =表密鑰,爲person_id =每人ID,複製如果這個人有很多版本)
從人員P選擇名稱,其中p.id =(選擇最多的人(ID),其中爲person_id = p.person_id和時間戳< =:時間戳)
更新 它看起來像要做到這一點的最好辦法是用時間分貝,但考慮到目前還沒有任何開源的在那裏的下一個最好的方法是每更新一次存儲新行。唯一的問題是重複未更改的列和緩慢的查詢。
只是一個想法 - 你可能想要考慮一些屬性作爲空間中的點 - 也就是說,(更新時間,年齡[也許這應該是DOB?],位置)空間中的點。然後,您可以使用空間索引技術來查找值。 – bdonlan