由于 mongo 没有架构,这是否意味着我们在更改模型时不必进行迁移?
非关系型数据库的迁移过程是什么样的?
最佳答案
我认为这是一个非常好的问题,但根据您使用的库和您对“迁移”的期望,答案会有些分散。
我们来看看一些常见的迁移操作:
一些皱纹
但是,字段名称与 ActiveRecord 对象相结合的概念有点歪曲。 ActiveRecord 对象有效地提供了对象属性到实际数据库字段的映射。
在典型的 RDBMS 中,字段名称的“大小”并不真正相关。但是,在 Mongo 中,字段名称实际上占用了数据空间,这在性能方面有很大的不同。
现在,如果您使用某种形式的“数据对象”,例如 ActiveRecord,为什么要尝试在数据中存储完整的字段名称?数据库可能应该按字母顺序存储所有字段,并在对象端使用 map 。因此,一个文档可能有 8 个字段/属性,数据库名称将是“a”、“b”...“j”,但对象名称将是可读的东西,如“名称”、“价格”、“数量”。
我提出这个的原因是它给修改字段名称增加了另一个问题。如果您正在实现映射,那么修改字段名称根本不会真正导致迁移。
还有一些皱纹
如果您确实想要在删除时实现迁移,那么您必须在部署之后执行此操作。您还必须认识到,这样做不会节省任何当前磁盘空间。
Mongo 会预先分配空间,除非您进行数据库修复,否则它不会真正“归还”。因此,如果您删除文档上的一堆字段,这些文档仍会占用相同的磁盘空间。如果稍后移动文档,那么您可以回收空间,但是文档仅在它们增长时才会移动。
如果您从大量文档中删除一个大字段,您需要进行修复或检查新的就地 compact
命令。
https://stackoverflow.com/questions/3604565/