MongoDB 高手课
唐建法(TJ)
Tapdata CTO、MongoDB 中文社区主席、前 MongoDB 大中华区首席架构师
19351 人已学习
新⼈⾸单¥59
课程目录
已完结/共 53 讲
MongoDB 高手课
登录|注册
留言
24
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 33 | MongoDB索引机制(一)
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 | 结果测试&结束语
本节摘要

亲爱的学员:
你好,在回答学员问题的过程中,我发现大家对于第二章的事务处理, 特别是隔离级别,以及第三章的分片集群有相对较多的问题。在这里我给大家推荐一些补充的学习材料可以从另外一个角度来加深一些这些概念的理解。
MongoDB 事务的原子性
https://docs.mongodb.com/manual/core/write-operations-atomicity/
MongoDB 事务的隔离级别和一致性模型
https://docs.mongodb.com/manual/core/read-isolation-consistency-recency/
如果英文不太感冒,在 MongoDB 中文网站上有不少内容,比如分片相关的:
http://www.mongoing.com/?s= 分片集群

课件和 Demo 地址
https://gitee.com/geektime-geekbang/geektime-mongodb-course

展开
登录 后留言

全部留言(24)

  • 最新
  • 精选
征里
看晕了 到底是不是B-树 在MongoDB的官方文档上看到,索引实现确实是使用的B-树:MongoDB indexes use a B-tree data structure. 版本4.2 https://docs.mongodb.com/manual/indexes/#id2

作者回复: B-树里面的那个 - 不是“减”,这个就是说 B树的意思。B+树是B树的一个子集,所以也是B树

2020-06-15
4
10
奔奔奔跑
用电脑看视频入迷了,哈哈,都忘了还有留言栏可以与老师交流了。 老师,我有个问题要请教,按理来说mongodb的objectID是时间戳+机器码+PID+计数器构成的,按理来说我用(sort:_id)进行排序,新插入的数据排序出来应该在最后才对,但是为何我有几次看到新插入的数据排序在旧数据之前。请问这是为什么?如果没有问题的话,那是不是就意味着不能用objectID作为时间排序的索引了?希望老师能够解答,谢谢唐老师了!

作者回复: 最后一个不是计数器,是随机数 纠正上面的内容,ObjectID的格式有所修改: ObjectID有12个bytes,分别为: - 4个字节的timestamp(精确到秒) - 5个字节的随机数 - 3个字节的计数器 MongoDB并未在文档中提到保证这个_id的顺序性。不过实际上如果在同一个客户端进程,应该是有这种顺序性的。 你把你的流程贴出来看一下

2020-01-22
4
fedwing
老师,为什么我查了很多资料,说mysql是用B+树,mongo是用B树存储索引的,我看了下源码,好像也是Btree,求验证

作者回复: MongoDB是B树索引 MongoDB是B+树索引 上面两句话都是对的。因为B+树是B树的子集

2020-06-15
2
2
hal
老师好,看完评论有个疑惑,为什么视频中讲MongoDB的索引是B-树,但是评论区中看到老师的回复,说MongoDB的索引是B+树?

作者回复: 视频是错的 - 我们正在试图修复。

2020-02-20
2
2
qbit
请问 mongoDB 可以定义类似 MySQL 的 create_time 和 update_time 字段吗?

作者回复: 可以参考 $currentDate https://docs.mongodb.com/manual/reference/operator/update/currentDate/

2020-01-20
1
大懒虫
实际上B-树,是翻译过来的时候,中间的-没有取消,B-树和B树是一个意思,没有B减树

编辑回复: 你好,是的,你说的是对的。老师也在本节课的第一条留言中解答了这个问题。

2021-04-08
执笔不回首
老师我看的官方文档MongoDB索引使用B树数据结构,为什么评论里说是B+树。网上看了很多文章关于“为什么mongoDB使用B树,而mysql使用B+树”的文章。现在有点懵逼

作者回复: 可以看下评论区

2020-08-18
EricJones
可以谈论下 count 吗?我对字段 A 与字段 B 都创建了索引,并创建了复合索引。当时使用 find 查询时速度很快。当我分别按 A/B 字段条件去 count 时速度也很快。但是当我同时使用 A、B 字段当做条件去 count 就很慢很慢。这个怎么破?

作者回复: “我对字段 A 与字段 B 都创建了索引,并创建了复合索引” 如果你创建了 A,B 复合索引,那么 A 上的单独索引就是多余的了。 “用 A、B 字段当做条件去 count 就很慢很慢。这个怎么破?” 你可以用 .explain(true) 方法看下它是否用了正确的索引。

2020-07-27
科研民工
老师问下,mongo怎么对int类型数据模糊搜索,我用正则和全文搜索都不行

作者回复: MongoDB不支持数字类型的全文检索和正则搜索。

2020-06-17
田翌辰
有三个问题呢,1. 想确认一下,mongo的索引是B树对吧? 2. 如果我建立了组合索引a , b,c,这时我a使用$in 去查询的话,是否会命中索引呢?$in的查询等同于equal,还是range呢? 3. 如果我对一个时间的字段(比如create_time)创建了索引,您能大概和我说一下,他是怎么通过索引找到一个符合range条件的文档的嘛? (一个一个找?)

作者回复: 1) 是的 2) 会使用索引,等于是对$in数组内的每一个元素,使用索引,找到equal的索引项。 3)比如从 range的lower bound 开始往上找,首先在B树里面找到lower bound的那个节点,然后就是B树遍历的流程了,直到upperbound 为止。

2020-06-04
收起评论