回答
我覺得這是一個很好的問題,但答案將是有點根據您所使用的庫和你的「移民」的期望散。
讓我們來看看一些常見的遷移操作:
- 添加一個字段:蒙戈使這很容易。只需添加一個字段即可完成。
- 刪除字段:從理論上講,你實際上並不依賴於你的模式,所以在這裏「刪除」是相對的。如果您刪除「屬性」並不再加載該字段,則該字段是否在數據中並不重要。所以如果你不要關心「清理」數據庫,那麼刪除一個字段不會影響數據庫。如果你做關心清理數據庫,你基本上需要運行一個巨大的循環對數據庫。
- 修改字段名:這也是一個棘手的問題。當你重命名字段「你在哪裏」重命名它?如果你想讓DB反映新的字段名稱,那麼你基本上必須在DB上執行一個巨大的for循環。爲了安全起見,您可能需要「添加」數據,然後推送代碼,然後「解除」舊字段。
一些皺紋
然而,在一個ActiveRecord對象串聯一個字段名稱的概念,只是一個小小的傾斜。 ActiveRecord對象有效地提供了對象屬性到實際數據庫字段的映射。
在典型的RDBMS中,字段名的「大小」並不真正相關。但是,在Mongo中,字段名稱實際上佔用了數據空間,這在性能方面有很大不同。
現在,如果您使用某種形式的「數據對象」,比如ActiveRecord,爲什麼要嘗試在數據中存儲完整的字段名?數據庫應該可以按字母順序存儲所有字段,並在對象一側使用地圖。所以一個Document可以有8個字段/屬性,數據庫名稱可以是「a」,「b」...「j」,但是對象名稱可以是可讀的東西,比如「Name」,「Price」,「Quantity」。
我提出這個問題的原因是它增加了另一個摺痕修改字段名稱。如果你正在實現一個映射,那麼修改一個字段名稱根本不會導致任何遷移。
一些更多的皺紋
如果做希望實現上刪除遷移,那麼你就必須這樣做後一個部署。您還必須認識到,如果您這樣做,您不會保存任何當前磁盤空間。
Mongo預先分配空間,除非您進行數據庫修復,否則它並不真正「回饋」。因此,如果刪除文檔上的一堆字段,這些文檔仍然佔用磁盤上的相同空間。如果稍後移動文檔,則可以回收空間,但文檔只有在增長時纔會移動。
如果您從大量文檔中刪除大字段,您需要執行修復或檢查新的就地compact
命令。
沒有銀彈。使用非關係數據庫添加或刪除字段更容易(只是不要使用不需要的字段或使用新字段),使用傳統數據庫重命名字段更容易(在字段重命名的情況下,通常必須更改大量數據在無模式數據庫中),數據遷移是平等的 - 取決於任務。
遷移過程與非關係型數據庫有什麼不同?
取決於是否需要更新所有現有數據。
在很多情況下,你可能不需要觸碰舊數據,如添加新的可選字段時。如果該字段也具有默認值,那麼如果您的應用程序可以正確處理缺少的字段,則可能也不需要更新舊文檔。但是,如果要在新字段上構建索引以便能夠搜索/過濾/排序,則需要將默認值添加回舊文檔。
喜歡的東西重命名場(瑣細在關係數據庫,因爲你只需要更新目錄,並不會觸及任何數據)是在MongoDB中的一大創舉(你需要重寫所有文件)。
如果您需要更新現有的數據,你通常需要編寫一個遷移功能,超過所有的文件進行迭代,並且更新一一(雖然這個過程可以共享和並行運行)。對於大型數據集,這可能需要很多時間(和空間),並且您可能會錯過事務處理(如果最終發生崩潰的遷移到了中途)。
- 1. 是爲一個Django遷移
- 2. Django遷移。如何檢查表是否存在於遷移中?
- 3. django db_index遷移是否同時運行?
- 4. Django遷移部分完成
- 5. EF遷移 - 是否應自動生成初始遷移?
- 6. MongoDB遷移
- 7. 刪除過去的軌道遷移
- 8. 如何告訴NuGet過去的遷移
- 9. 在Rails/Mongoid/MongoDB中使用遷移是否有意義?
- 10. acts_as_revisable「失去」遷移
- 11. Django的跳過特定遷移(沒有遷移申請)
- 12. Db2到MongoDB遷移
- 13. Django遷移 - 是否可以在項目中使用South?
- 14. Django的核心遷移工具與南方的Django數據遷移
- 15. 蟒蛇遷移(Django的)不與PostgreSQL的
- 16. Django遷移:只有部分模型成功遷移到sql
- 17. Django pymssql遷移
- 18. Django 1.7遷移
- 19. 南Django的遷移
- 20. 遷移Django的1.11
- 21. 哪裏是Django的遷移上市(遷移-l)
- 22. Django的遷移:正在與makemigrations
- 23. 架構遷移與南(Django的)和MySQL
- 24. 的MongoDB - > DynamoDB遷移
- 25. Django遷移與uuid字段生成重複的值
- 26. GAE:是否遷移到ndb
- 27. Laravel:+100 Tables ...是否使用遷移?
- 28. SQL Server 2008 R2到MongoDB - 遷移是否安全?
- 29. symfony2 doctrine2:刪除過去遷移中使用的實體類
- 30. django遷移沒有遷移申請
我不認爲現場更名甚至存在最新的mongo。 – 2010-08-30 23:21:21