MongoDB 高手课
唐建法(TJ)
Tapdata CTO、MongoDB 中文社区主席、前 MongoDB 大中华区首席架构师
19351 人已学习
新⼈⾸单¥59
课程目录
已完结/共 53 讲
MongoDB 高手课
登录|注册
留言
12
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 16 | 文档模型设计之二:工况细化
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 认识文档数据库MongoDB
04 | MongoDB特色及优势
05 | 实验:安装MongoDB
06 | MongoDB基本操作
07 | 实验:Hello World程序开发
08 | 聚合查询
09 | 实验:聚合查询
10 | 复制集机制及原理
11 | 实验:搭建MongoDB复制集
12 | MongoDB全家桶
13 | 模型设计基础
14 | JSON文档模型设计特点
15 | 文档模型设计之一:基础设计
16 | 文档模型设计之二:工况细化
17 | 文档模型设计之三:模式套用
18 | 设计模式集锦
19 | 事务开发:写操作事务
20 | 事务开发:读操作事务之一
21 | 事务开发:读操作事务之二
22 | 事务开发:多文档事务
23 | Change Stream
24 | MongoDB开发最佳实践
25 | 分片集群机制及原理
26 | 分片集群设计
27 | 实验:分片集群搭建及扩容
28 | MongoDB监控最佳实践
29 | MongoDB备份与恢复
30 | 备份与恢复操作
31 | MongoDB安全架构
32 | MongoDB安全加固实践
33 | MongoDB索引机制(一)
34 | MongoDB索引机制(二)
35 | MongoDB读写性能机制
36 | 性能诊断工具
37 | 高级集群设计:两地三中心
38 | 实验:搭建两地三中心集群
39 | 高级集群设计:全球多写
40 | MongoDB上线及升级
41 | MongoDB应用场景及选型
42 | MongoDB典型案例(一)
43 | MongoDB典型案例(二)
44 | 关系型数据库迁移
45 | 数据库迁移方式及工具
46 | Oracle迁移实战
47 | MongoDB + Spark实时大数据
48 | MongoDB + Spark连接实战
49 | MongoDB SQL套接件
50 | MongoDB与微服务
51 | MongoDB与数据中台
52 | MongoDB数据中台案例
53 | 结果测试&结束语
登录 后留言

全部留言(12)

  • 最新
  • 精选
如果被$lookup关联的表分片了,是不是只查询和主表在一个分区的数据了?

作者回复: 无法工作了

2019-12-08
4
kylexy_0817
老师,想问下头像图片文件,不是应该直接文件系统,数据库中只存链接吗?

作者回复: 头像图片文件,如果只是几十KB那样,完全可以直接放在JSON里面。除非是大到数个MB,就建议分开存放了。 至于是否文件系统,有别的考量了。文件系统不容易扩展,量达到亿/十亿级别管理会很麻烦。

2020-02-05
2
butterfly
老师您好, 关于这一节我想请教下,在开发中我们的需求或者模型是变化的。比如这一节的group_ids对象类型,刚开始的时候是 json对象的数组,后面把这个抽出来使用单独的集合时候,group_ids对象类型变成了 整形数组. 这个变化会有一个开发和上线的一个过程,这里有没有什么好的最佳实践,谢谢老师. 这个变化,在上线的时候, 1:是需要再单独写一个脚本去清洗数据的吗? 2. 在清洗的时候, mongodb使用的是raft,是CP模型吗?这样的话,服务会暂时的对外不可用吗??是否会存在像mysql5.6之前的版本处理DML时进行锁表的问题

作者回复: 如果我是你,我会选择的是保留JSON格式,但是只留group_id字段。这样的话你只需要更新业务代码,不用停服务更新数据库。然后你可以写个语句把JSON字段里面的其他字段删除掉。整个过程都是线上操作,也不会有不一致数据问题。 如果是你的方案,就是彻底改变一个内嵌字段的类型,那就必须要写个脚本,然后最好是停止业务的访问,进行对数据库数据的修改。

2020-05-05
1
SYFY
老师;你好,新手问个问题:假如需求是联系人的属性是动态的,这种要怎么设计。关系型肯定更不好操作吧,比如说页面上有增删联系人属性的功能,这个模型怎么处理,尤其是作为面向对象开发,以Java为例,那这个联系人的属性对应的实体类属性就完全不知道怎么入手了,老师有什么建议吗,我是感觉这种功能好像是mongo数据库比较合适……。

作者回复: 对这个动态模型就是MongoDB的特色。如果是非强类型语言如python / nodejs 会更加简单,直接JSON入库,JSON可以增加属性。 模型处理mongodb端并不需要做任何工作,主要是你Java里面要能够给一个对象动态增加属性,然后把新对象交给Mongo就可以了

2020-01-08
2
1
firek
文档内嵌的层级基于性能考虑有没有限制,举个例子,比如实际业务中也可能内嵌5层这样的情况出现。

作者回复: 之前的版本嵌套超过2层就会导致无法in place update, 需要把整个子文档读到应用端整体修改更新。新版本使用arryFilter可以更新任意深度了,从这个角度上来讲还好。

2019-12-26
1
firek
当数据量非常大的情况下,内嵌文档被频繁修改要遍历所有的顶层文档,如果改为引用设计也只能建立一个关系表对多对多的情况优化的好些,如果是一对多的,除了修改从表的数据外,对从表的增删还是要在主表操作。

作者回复: 对的,频繁修改是一个设计的考量,通常这个时候要考虑分出去另外一个集合,通过引用来表示关系。

2019-12-26
1
yue
老师你好,看到头像存储的案例我联想到假设业务不需要我们改动文件内容,只需要做读写删操作,mongodb提供的gridfs会适合这种情况吗?

作者回复: 可以用gridfs

2020-08-26
teressa
如果联系人头像这个例子,针对内存缓存空间这一点来说:我针对除头像数据以外其他的字段都建了索引,查询语句指定不读头像数据,实际上也不会将头像数据加载到内存,这种情况还有必要使用引用嘛?
2021-03-22
1
追忆似水年华
看了这一节课程之后,最深的一点感受就是:最主要的工作,其实是在写代码之前的分析、思考、合理设计,把事情想清楚了,把解决方法用对了,最后的代码写起来也很轻松很多。
2020-03-25
1
momo
https://www.mongodb.com/docs/manual/release-notes/5.1/#-lookup-and--graphlookup-with-sharded-collections 在5.1及以后版本允许lookup的from字段对sharded集合做引用查询了。 原文: “Starting in MongoDB 5.1, the $lookup and $graphLookup aggregation stages support sharded collections in the from parameter. In previous versions of MongoDB, $lookup and $graphLookup only allowed for unsharded from collections.”
2023-12-30
收起评论