当前位置:  开发笔记 > 编程语言 > 正文

django与mongodb一起使迁移成为过去吗?

如何解决《django与mongodb一起使迁移成为过去吗?》经验,为你挑选了1个好方法。

由于mongo没有架构,这是否意味着我们在更改模型时不必进行迁移?

使用非关系数据库,迁移过程是什么样的?



1> Gates VP..:

我认为这是一个非常好的问题,但根据您使用的库和您对"迁移"的期望,答案会有点分散.

我们来看看一些常见的迁移操作:

添加一个字段: Mongo使这很容易.只需添加一个字段就可以了.

删除字段:理论上,您实际上并不依赖于您的架构,因此这里的"删除"是相对的.如果删除"属性"并且不再加载该字段,那么该字段是否在数据中并不重要.因此,如果您关心"清理"数据库,则删除字段不会影响数据库.如果你真的关心清理数据库,你基本上需要针对数据库运行一个巨大的for循环.

修改字段名称:这也是一个难题.当您重命名字段"where"时,您是否重命名它?如果您希望数据库反映新的字段名称,那么您基本上必须在数据库上执行巨型for循环.为了安全起见,您可能需要"添加"数据,然后推送代码,然后"取消设置"旧字段.

一些皱纹

但是,与ActiveRecord对象串联的字段名称的概念只是有点偏斜.ActiveRecord对象有效地提供了对象属性到实际数据库字段的映射.

在典型的RDBMS中,字段名称的"大小"并不真正相关.但是,在Mongo中,字段名称实际上占用了数据空间,这在性能方面有很大差异.

现在,如果您使用某种形式的"数据对象",如ActiveRecord,为什么要尝试在数据中存储完整的字段名称?数据库应该按字母顺序存储所有字段,并在Object端显示地图.因此,一个Document可以有8个字段/属性,DB名称可以是"a","b"......"j",但是Object名称可以是"Name","Price","Quantity"等可读字符.

我提出这个问题的原因是它为修改字段名称增加了另一个皱纹.如果您正在实现映射,那么修改字段名称根本不会导致迁移.

还有一些皱纹

如果您确实希望在删除时实现迁移,则必须部署执行此操作.您还必须认识到在执行此操作时不会保存任何当前磁盘空间.

Mongo预先分配空间,除非你进行数据库修复,否则它不会真正"回馈"它.因此,如果删除文档上的一堆字段,那些文档仍会占用磁盘上的相同空间.如果稍后移动文档,则可以回收空间,但文档只有在增长时才会移动.

如果从大量文档中删除大字段,则需要进行修复或签出新的就地compact命令.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有