![]() |
1
16
我认为这是一个非常好的问题,但是基于您正在使用的libs和您对“迁移”的期望,答案会有点分散。 让我们看看一些常见的迁移操作:
一些皱纹 然而,字段名与ActiveRecord对象串联的概念有点偏颇。ActiveRecord对象有效地提供了对象属性到实际数据库字段的映射。 在典型的RDBMS中,字段名的“大小”实际上并不相关。然而,在Mongo中,字段名实际上占用了数据空间,这在性能方面有很大的不同。 现在,如果您正在使用某种形式的“数据对象”,比如ActiveRecord,那么为什么要尝试在数据中存储完整的字段名呢?DB可能应该按照字母顺序存储所有字段,并在对象端使用一个映射。因此,一个文档可以有8个字段/属性,DB名称将是“a”、“b”…“j”,但是对象名称将是可读的,比如“Name”、“Price”、“Quantity”。 我之所以提起这个问题,是因为它给我们的生活又添了一道皱纹 修改字段名 . 如果要实现映射,那么修改字段名实际上根本不会导致迁移。 更多皱纹 做 如果您想在删除上实现迁移,那么您必须这样做 之后 Mongo预先分配空间,除非你做DB修复,否则它不会真正“把它还给”你。因此,如果删除文档上的一组字段,这些文档仍会占用磁盘上的相同空间。如果以后移动文档,则可以回收空间,但文档仅在增长时移动。
如果从大量文档中删除了一个较大的字段,则需要进行修复或签出新文档
|
![]() |
2
2
没有银弹。在非关系数据库中添加或删除字段更容易(只是不要使用不需要的字段或使用新字段),在传统数据库中重命名字段更容易(在无模式数据库中重命名字段时,通常需要更改大量数据),根据任务的不同,数据迁移是正常的。 |
![]() |
3
1
在许多情况下,您可能不需要接触旧数据,例如添加新的可选字段时。如果该字段也具有默认值,则如果应用程序能够正确处理丢失的字段,则可能也不需要更新旧文档。但是,如果要在新字段上建立索引以便能够搜索/筛选/排序,则需要将默认值添加回旧文档中。 类似于字段重命名(在关系数据库中很简单,因为您只需要更新目录而不需要接触任何数据)是MongoDB中的一项主要任务(您需要重写所有文档)。 如果需要更新现有数据,通常必须编写一个迁移函数,遍历所有文档并逐个更新它们(尽管这个过程可以共享并并行运行)。对于大型数据集,这可能需要大量的时间(和空间),并且您可能会错过事务(如果您的迁移中途崩溃)。 |
![]() |
Florent · 如何在Django中聚合多个字段? 1 年前 |
![]() |
KWunsch · Django没有将pk引入模板 1 年前 |
|
Akshay mek · Vscode扩展建议不适用于某些文件夹 1 年前 |
![]() |
Farid · 限制django每个客户的访问 2 年前 |
![]() |
Blue · 从Django中的输入字段获取用户输入 2 年前 |
![]() |
4SadMemeXD · 无法在Django中选择相关类别 2 年前 |