`
luotianwen456123
  • 浏览: 6792 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

MongoDB3

阅读更多


原文:6 Rules of Thumb for MongoDB Schema Design: Part 3

By William Zola, Lead Technical Support Engineer at MongoDB

这篇文章是系列的最后一篇。在第一篇文章里,我介绍了三种针对“一对多 ”关系建模的基础方案。在第二篇文章中,我介绍了对基础方案的扩展:双向关联和反范式化。

反范式可以让你避免一些应用层级别的join,但是这也会让更新变的更复杂,开销更大。不过冗余那些读取频率远远大于更新频率的字段还是值得的。

如果你还没有读过前两篇文章,欢迎一览。

让我们回顾下这些方案

你可以采取内嵌,或者建立one端或者N端的引用,也可以三者兼而有之。

你可以在one端或者N端冗余多个字段

下面这些是你需要谨记的:

1、优先考虑内嵌,除非有什么迫不得已的原因。

2、需要单独访问一个对象,那这个对象就不适合被内嵌到其他对象中。

3、数组不应该无限制增长。如果many端有数百个文档对象就不要去内嵌他们可以采用引用ObjectID的方案;如果有数千个文档对象,那么就不要内嵌ObjectID的数组。该采取哪些方案取决于数组的大小。

4、不要害怕应用层级别的join:如果索引建的正确并且通过投影条件(第二章提及)限制返回的结果,那么应用层级别的join并不会比关系数据库中join开销大多少。

5、在进行反范式设计时请先确认读写比。一个几乎不更改只是读取的字段才适合冗余到其他对象中。

6、在mongodb中如何对你的数据建模,取决于你的应用程序如何去访问它们。数据的结构要去适应你的程序的读写场景。

设计指南

当你在MongoDB中对“一对多”关系进行建模,你有很多的方案可供选择,所以你必须很谨慎的去考虑数据的结构。下面这些问题是你必须认真思考的:

关系中集合的规模有多大:是一对很少,很多,还是非常多?

对于一对多中”多“的那一端,是否需要单独的访问它们,还是说它们只会在父对象的上下文中被访问。

被冗余的字段的读写的比例是多少?

数据建模设计指南

在一对很少的情况下,你可以在父文档中内嵌数组。

在一对很多或者需要单独访问“N”端的数据时,你可以采用数组引用ObjectID的方式。如果可以加速你的访问也可以在“N”端使用父引用。

在一对非常多的情况下,可以在“N”端使用父引用。

如果你打算在你的设计中引入冗余等反范式设计,那么你必须确保那些冗余的数据读取的频率远远大于更新的频率。而且你也不需要很强的一致性。因为反范式化的设计会让你在更新冗余字段时付出一定的代价(更慢,非原子化)
分享到:
评论

相关推荐

    Mastering MongoDB 3.x

    Mastering MongoDB 3.x: An expert’s guide to building fault-tolerant MongoDB applications MongoDB has grown to become the de facto NoSQL database with millions of users—from small startups to Fortune...

    mongodb3数据库

    在Windows环境下安装和使用MongoDB3版本,你可以遵循以下步骤: 1. **下载 MongoDB**: 首先,你需要访问MongoDB官方网站(https://www.mongodb.com/)来下载适用于Windows的MongoDB3版本。下载完成后,你会得到一个...

    tigase 7.10 mongodb 3 配置

    tigase 7.10 mongodb 3 配置

    windows64位 mongodb3

    在64位win7操作系统上成功安装mongodb3.0,安装非常方便,免去了安装linux系统才能安装mongodb的麻烦.

    MongoDB 3 Succinctly

    Zoran Maksimovic’s MongoDB 3 Succinctly touches on the most important aspects of the MongoDB database that application developers should be aware of—from installation and the usage of the Mongo ...

    mongodb3.x 版本带权限java连接

    mongodb3.x 版本带权限java连接 使用的java连接jar包版本 mongo-java-driver-3.2.2.jar mongodb数据库 3.2 (如果需要) mongo-java-driver-3.2.2.jar下载地址 ...

    MongoDB3-311-Artificial-Intelligence-Project-笔记

    MongoDB3_311-Artificial-Intelligence-Project-笔记

    Spring-Data-MongoDB3.2

    **3. MongoDB 3.2特性** MongoDB 3.2引入了许多重要的改进,包括: - **新查询语言:** 引入了聚合框架的改进,如`$lookup`操作符,允许在聚合管道中执行联接操作,增强了数据分析能力。 - **新索引类型:** 增加...

    Studio 3T最新版MongoDB可视化工具

    studio 3t for mongodb是一款功能强大的mongodb工具,被广泛的认为是MongoDB的最佳IDE,能够与MongoDB的现有版本和旧版本完全兼容,同时继续为每个新软件版本提供新功能,提供快速的技术支持,可以让设计人员...

    mongodb.zip

    3.5.0版本引入了对MongoDB 3.x系列服务器的全面支持,包括新的写入和读取Concerns,以及对异步驱动程序的支持。 3. **bson-3.5.0.jar**:BSON(Binary JSON)是MongoDB中用于存储和传输数据的格式,类似于JSON但更...

    mongodb-linux3.2.6

    3. 自动分片(Sharding):在大型数据集上,MongoDB可以通过自动分片将数据分布到多个节点,实现负载均衡和数据的分散存储。 4. 高可用性:MongoDB通过复制集(Replica Sets)提供高可用性,当主节点故障时,可以...

    Big.Data.NoSQL.Architecting.MongoDB.epub

    What’s inside: The book will cover the process of understanding about Big Data, NoSQL and MongoDB in the following few steps: 1: Introduction to Big Data and NoSQL 2: Introduction to MongoDB 3: ...

    MongoDB安装过程

    3. 在 log 文件夹下创建一个日志文件 MongoDB.log,完整目录为 D:\Program Files\mongodb_1.8.1\log\MongoDB.log。 三、启动 MongoDB 1. 打开 cmd.exe,进入 DOS 命令行界面。 2. 进入 D:\Program Files\mongodb_...

    mongodb多实例副本集群详细搭建

    mkdir {../mongodb1,../mongodb2,../mongodb3} mkdir ../logs touch ../logs/mongodb{1..3}.log chmod 777 ../logs/mongodb* ``` 2. **配置实例**:为每个实例创建配置文件。 ```bash cat /usr/local/mongodb...

    mongodb-driver-core-3.5.0.jar

    这个版本的驱动程序主要是针对MongoDB 3.x系列版本设计的。在3.5.0版本中,开发者可以期待一系列改进和优化,包括性能提升、错误修复以及对新特性的支持。 首先,`mongodb-driver-core`主要负责以下功能: 1. 连接...

    mongodb-linux-x86_64-4.0.18.tgz

    3、进入 mongodb 目录创建目录 db 和 logs cd /usr/local/mongodb mkdir db mkdir logs 4、进入到 bin 目录下,编辑 mongodb.conf 文件,内容如下: dbpath=/usr/local/mongodb/db logpath=/usr/local/mongodb/...

    Mongodb安装文档(1台服务器)

    /home/mongodb/mongodb3/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27037 --dbpath /home/mongodb/mongodb3/data/shard1_3 --oplogSize 100 --logpath /home/mongodb/mongodb3/mongodb/logs/shard1_3...

    非关系型数据库MongoDB在Linux上安装使用说明,MongoDB与SpringBoot整合代码示例

    3. Linux 平台安装 MongoDB 3.1 创建数据库目录 在 Linux 平台上安装 MongoDB 需要创建一个数据库目录,用于存储 MongoDB 的数据文件。 3.2 启动 MongoDB 启动 MongoDB 需要使用 mongod 命令,mongod 命令能够...

Global site tag (gtag.js) - Google Analytics