MongoDB学习笔记:应用程序设计「建议收藏」

MongoDB学习笔记:应用程序设计「建议收藏」本文更新于2021-12-11,使用MongoDB 4.4.5。 范式化与反范式化 范式化(normalization)将数据分散到多个集合,不同集合之间相互引用数据。反范式化(denormaliza

MongoDB学习笔记:应用程序设计

本文更新于2021-12-11,使用MongoDB 4.4.5。

目录
  • 范式化与反范式化
  • 优化数据操作
  • 一致性管理
  • 模式迁移

范式化与反范式化

范式化(normalization)将数据分散到多个集合,不同集合之间相互引用数据。反范式化(denormalization)将每个文档所需数据都嵌入文档内部。

一个集合中包含的对其他集合的引用数量叫基数(cardinality)。常见的关系有一对一、一对多、多对多。

内嵌数据与引用数据的比较:

更适合内嵌 更适合引用
数据较小 数据较大
数据不会定期改变 数据经常改变
最终数据一致即可 中间阶段的数据必须一致
文档数据小幅增加 文档数据大幅增加
数据通常需要执行二次查询才能获得 数据通常不包含在结果中
快速读取 快速写入
基数较少 基数较多

也可以混合使用内嵌数据和引用数据:创建一个内嵌文档用于保存常用信息,需要查询更详细信息时通过引用找到实际的文档。

优化数据操作

更新数据时,需要明确是否会导致文档体积增长,以及增长程度。如果文档中有字段需要增长,应尽可能将这个字段放在文档最后的位置。

有三种常见的方式用于删除旧数据:使用固定集合,使用TTL集合,使用多个集合并定期删除集合。

一致性管理

服务器为每个数据库连接维护一个请求队列,一个连接拥有一个一致的数据库视图,总时可以读取到这个连接最新写入的数据。

模式迁移

随着需求的变化,数据库模式可能需要相应地改变,不管使用以下哪种方法,都要小心保存应用程序使用过的每一个模式:

  • 确保应用程序能支持所有旧版的模式。这种方式可能导致混乱,尤其是不同版本的模式之间有冲突时。
  • 在每个文档中包含一个类似“version”的字段,使用这个字段来决定应用程序接受的文档结构。这仍然需要支持各种旧版本。
  • 当模式发生变化时将数据进行迁移。通常来说这不是个好主意:MongoDB允许使用动态模式,以避免执行迁移,因为迁移会对系统造成很大的压力。

原文地址:https://www.cnblogs.com/garvenc/archive/2022/02/23/mongodb_learning_application_design.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5493.html

(0)
上一篇 2023-05-07
下一篇 2023-05-07

相关推荐

  • oracle存储过程对异常的处理_sqlserver创建存储过程

    oracle存储过程对异常的处理_sqlserver创建存储过程在编写SQL Server 事务相关的存储过程代码时,经常看到下面这样的写法: begin tran update statement 1 … update statement 2 … de…

    2022-12-19
    157
  • python根据图片名检索图片(python查看图片)

    python根据图片名检索图片(python查看图片)python 移动文件或文件夹操作。python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法。

    2023-10-27
    123
  • 数据库2.0_1.12数据库

    数据库2.0_1.12数据库数据库2.0 ‘MySQL存储引擎介绍’ ‘MySQL基础数据类型’ ‘MySQL表的完整性约束’ ‘MySQL数据库初识’ ‘MySQL的库表详细操作’ ‘MySQL的逻辑查询语句的执行

    2022-12-28
    152
  • Python Mongodb删除字段教程

    Python Mongodb删除字段教程Python是一门非常强大的编程语言,可以从多个方面实现Mongodb数据库的操作。在Mongodb操作中,删除字段是一个比较常见的需求。本文将介绍如何使用Python编程语言在Mongodb数据库中删除相关字段。

    2024-08-05
    31
  • mysql 5.7 主从_MySQL source

    mysql 5.7 主从_MySQL source一、环境准备 # rpm -qa |grep mariadb |xargs yum remove -y # setenforce 0(临时关闭),(selinux配置文件:SELINUX=disabl

    2023-05-06
    166
  • 利用Python和Button创建交互式用户界面

    利用Python和Button创建交互式用户界面Button是Python Tkinter(图形用户界面工具包)中的一个重要部件,它是用户界面中常见的交互式按钮。Button组件是一个矩形,上面可以有文本,边框和背景颜色。当用户点击Button时,我们可以执行相应的程序。下面是Button的基本代码示例:

    2024-01-19
    90
  • 数据库—约束「终于解决」

    数据库—约束「终于解决」 一、概述 创建表的时候可以给表中的数据添加数据校验规则,这些规则称之为约束。 在创建表的时候,同时可以指定所插入数据的一些规则,比如某个字段不能为空值; 某个字段的值(比如年龄)不能小于零等…

    2023-03-22
    140
  • Python随机打乱列表:解决shuffle函数报错问题

    Python随机打乱列表:解决shuffle函数报错问题在Python中,如果我们需要将列表中的元素顺序打乱,就可以使用shuffle函数。这个函数来自于Python内置的random模块,其作用是将一个序列中的元素随机打乱。下面是shuffle函数的基本语法:

    2023-12-19
    109

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注