Dot-Net
更改 RavenDB 中的“模式”
只是為了擴展我的知識,我開始研究各種 NoSQL 選項。我訪問的第一個是 RavenDB,它看起來很有趣。我仍在嘗試打破我根深蒂固的關係思維,以及典型的 RDBMS 維護常式。
在我與實體框架打交道的日常工作中,我們經歷了編寫 DB 更改腳本、刷新 EF 映射模型等的例行程序。它在 NoSQL 的東西(尤其是 RavenDB)中是如何工作的?一旦一個應用程序執行起來,如何對各種 POCO 對像等進行更改並將其部署到生產環境中?儲存在舊 POCO 類中的數據會怎樣?
我還沒有深入研究或憤怒地使用過 Raven DB。一旦我這樣做,這可能很明顯,但我很想事先知道,所以我不會把自己編碼到角落裡。
感謝:D。
它們保持原樣 - 不再存在的屬性在載入時將被忽略(並在更改時失去),失去的屬性將返回為空,
建議您使用基於集合的操作來使數據與對像模型保持一致。
哦,看看我,我現在在電腦上!
基本上是這樣,在遷移到文件儲存時,您正確地認識到您失去了一些功能並獲得了一些自由,因為在數據庫中您定義了一個預先定義的模式並嘗試上傳與該模式不匹配的數據將導致錯誤。
然而,重要的是要認識到,無模式和無結構之間存在差異,因為您的文件都包含它們自己的結構(表示屬性名稱和屬性值的鍵/值對)。
這對於編寫一些程式碼並保持數據持久化的整個“剛剛開始”因素很有用 - 但是當你很容易改變你的程式碼結構時,它可能更難與你已經持久化的數據相協調。
在這一點上出現了一些策略:
- 一旦你有持久化數據,讓你的結構不可變,版本你的類
- 允許修改結構,但使用基於集合的操作來更新數據以匹配新結構
- 允許修改結構,並編寫程式碼處理載入數據時的不一致
第三個顯然是個壞主意,因為它會導致程式碼不可維護選項。
我建議您這樣做,並遵循一些簡單的規則,就像您在處理關係數據庫中的前期模式時所遵循的那樣。
- 使用您的 VCS 系統確定已部署版本之間的更改
- 編寫從一個版本升級到另一個版本的遷移腳本
- 注意重命名/刪除屬性 - 因為如果新文件中不存在這些屬性,載入文件和保存文件將導致數據失去
等等。
我希望這更有幫助:-)