当前播放: 33 | MongoDB索引机制(一)
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
课程目录
第一章:MongoDB再入门 (12讲)
01 | 课程介绍
免费
02 | 内容综述
免费
03 | 认识文档数据库MongoDB
免费
04 | MongoDB特色及优势
免费
05 | 实验:安装MongoDB
免费
06 | MongoDB基本操作
07 | 实验:Hello World程序开发
08 | 聚合查询
09 | 实验:聚合查询
10 | 复制集机制及原理
11 | 实验:搭建MongoDB复制集
12 | MongoDB全家桶
第二章:从熟练到精通的开发之路 (12讲)
13 | 模型设计基础
14 | JSON文档模型设计特点
15 | 文档模型设计之一:基础设计
16 | 文档模型设计之二:工况细化
17 | 文档模型设计之三:模式套用
18 | 设计模式集锦
19 | 事务开发:写操作事务
20 | 事务开发:读操作事务之一
21 | 事务开发:读操作事务之二
22 | 事务开发:多文档事务
23 | Change Stream
24 | MongoDB开发最佳实践
第三章:分片集群与高级运维之道 (16讲)
25 | 分片集群机制及原理
26 | 分片集群设计
27 | 实验:分片集群搭建及扩容
28 | MongoDB监控最佳实践
29 | MongoDB备份与恢复
30 | 备份与恢复操作
31 | MongoDB安全架构
32 | MongoDB安全加固实践
33 | MongoDB索引机制(一)
34 | MongoDB索引机制(二)
35 | MongoDB读写性能机制
36 | 性能诊断工具
37 | 高级集群设计:两地三中心
38 | 实验:搭建两地三中心集群
39 | 高级集群设计:全球多写
40 | MongoDB上线及升级
第四章:企业架构师进阶之法 (13讲)
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 | 结果测试&结束语
33 | MongoDB索引机制(一)

33 | MongoDB索引机制(一)

唐建法(TJ)
Tapdata CTO、MongoDB中文社区主席、前MongoDB大中华区首席架构师
全集5131
新人首单 ¥29.9 原价 ¥129
5
本节摘要

亲爱的学员:
你好,从 11 月开课到现在已经 2 个多月,希望大家一路学习过来有了不少的收获。在回答学员问题的过程中,我发现大家对于第二章的事务处理, 特别是隔离级别,以及第三章的分片集群有相对较多的问题。在这里我给大家推荐一些补充的学习材料可以从另外一个角度来加深一些这些概念的理解。
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= 分片集群
春节假期,我们的课程将在 1 月 29 日停更一次,于 2 月 5 日恢复更新,春节后我们将推出第四章架构相关的内容,敬请期待!

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

展开
登录 后留言

精选留言(15)

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

    作者回复: 最后一个不是计数器,是随机数

    纠正上面的内容,ObjectID的格式有所修改:

    ObjectID有12个bytes,分别为:

    - 4个字节的timestamp(精确到秒)
    - 5个字节的随机数
    - 3个字节的计数器

    MongoDB并未在文档中提到保证这个_id的顺序性。不过实际上如果在同一个客户端进程,应该是有这种顺序性的。
    你把你的流程贴出来看一下





    2020-01-22
    3
  • fedwing
    老师,为什么我查了很多资料,说mysql是用B+树,mongo是用B树存储索引的,我看了下源码,好像也是Btree,求验证
    2020-06-15
    1
  • 征里
    看晕了 到底是不是B-树
    在MongoDB的官方文档上看到,索引实现确实是使用的B-树:MongoDB indexes use a B-tree data structure.
    版本4.2
    https://docs.mongodb.com/manual/indexes/#id2
    2020-06-15
    1
  • Cary
    单个文档大小35KB,共有500w记录,容器内存7GB,创建索引内存不够,导致容器关闭,老师,请问如何处理?
    2020-03-01
    1
  • hal
    老师好,看完评论有个疑惑,为什么视频中讲MongoDB的索引是B-树,但是评论区中看到老师的回复,说MongoDB的索引是B+树?

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

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

    作者回复: 可以参考 $currentDate

    https://docs.mongodb.com/manual/reference/operator/update/currentDate/

    2020-01-20
    1
  • 科研民工
    老师问下,mongo怎么对int类型数据模糊搜索,我用正则和全文搜索都不行
    2020-06-17
  • 龙晓
    mongo的B树索引什么情况下分裂重组?分支节点的key数是什么决定的
    2020-06-10
  • 田翌辰
    有三个问题呢,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
  • W
    老师 MongoDB的索引是B+树吗?为什么网上好多资料都说是B-树,请问官方哪里有解释呢?谢谢

    作者回复: 是的。

    B+ 树 是B树的一种(注意不是B减树,是B树,我也中过招)的一种。所以说Mongo用B树索引严格来说没有什么毛病。

    2020-04-16
  • 氵小明
    老师想问下,我们mongo的索引跟mysql一样也是遵循最左前缀原则吗?

    作者回复: 是的。

    2020-04-01
  • Allen_
    老师,我是从理论课解除到B数的,对于纯数字的操作比较清晰。但是我们实战中把lastname这种作为index,这种非数字的该怎么查找呢?
    换句话说,数字可以保证我的数大于此index就肯定在右边找,但是这些非数字的怎么保证呢?

    作者回复: 对计算机来说,数字和字符串没什么差别。字符串也是0101表示的。

    2020-03-03
  • 注意力$
    唐老师,MongoDB 磁盘目录清理的话,是直接删除集合吗?删除集合部分数据,可以释放空间吗?谢谢

    作者回复: 不能。必须删除整个集合才会回收

    2020-02-03
  • 月迷津渡
    请问下老师 一般范围查询比如年龄4-18的查询 B+树是用叶子节点的链表遍历,那mongodb怎么做的呢?是用B树做类似于2茶树的中序遍历么?

    作者回复: mongodb用的就是B+树,如你所述在叶子节点层遍历。

    2020-01-27
    1
  • 奔奔奔跑
    感谢老师的回复,假期了还这么负责太感动了。但是我还是觉得有疑惑,MongoDB应该可以用objectID来排序吧,虽然最后的是随机数,但是时间戳在前面,新插入数据肯定比旧数据要大吧

    作者回复: 已修改原回复内容。

    2020-01-22
收起评论
看过的人还看
MySQL实战45讲

林晓斌  网名丁奇,前阿里资深技术专家

49讲 | 56228 人已学习

新人首单 ¥29.9 原价 ¥129
数据结构与算法之美

王争  前Google工程师

80讲 | 86445 人已学习

新人首单 ¥29.9 原价 ¥129
Elasticsearch核心技术与实战

阮一鸣  eBay Pronto平台技术负责人

100讲 | 21646 人已学习

新人首单 ¥29.9 原价 ¥129
趣谈网络协议

刘超  网易研究院云计算技术部首席架构师

51讲 | 45025 人已学习

新人首单 ¥19.9 原价 ¥99