Return to Video

Using Indexes - Data Wranging with MongoDB

  • 0:00 - 0:01
    现在 我要给你一个大型集合
  • 0:01 - 0:07
    并展示索引对性能的影响
  • 0:07 - 0:10
    我们的推文集合相对较小
  • 0:10 - 0:13
    所以我们不会再使用上节课的 OpenStreetData 数据集
  • 0:13 - 0:16
    这也是向下一节课的过渡
  • 0:16 - 0:19
    也就是使用 OpenStreetData 的项目
  • 0:19 - 0:22
    举个例子 我要在 MongoDB shell 中进行这个工作
  • 0:22 - 0:25
    这个数据被储存在 OSM 数据集库中
  • 0:25 - 0:28
    然后我把它转换成这个
  • 0:28 - 0:33
    我们来看一下
  • 0:33 - 0:34
    这个数据库里面的文件
  • 0:34 - 0:37
    为此 我们只需要找到所有数据
  • 0:37 - 0:40
    如果我们把页面向上拉 就能看到这个文件了
  • 0:40 - 0:44
    这里有地点信息 经度和纬度
  • 0:44 - 0:48
    这个集合中的所有数据都与某一个具体地点相关
  • 0:48 - 0:50
    我要指出的一点是
  • 0:50 - 0:53
    这个集合中的部分文件有 TG 字段
  • 0:53 - 0:55
    TG 是标签的缩写
  • 0:55 - 1:00
    我们之前看到过
  • 1:00 - 1:03
    这个数据集中的某些地点会有标签
  • 1:03 - 1:06
    这个集合中的标签是这个样的
  • 1:06 - 1:10
    有一个标签字段是数组值
  • 1:10 - 1:13
    这个数组中的每一个值都是带有 k 字段和 v 字段的子文件
  • 1:13 - 1:16
    就像我们在这个数据集的
  • 1:16 - 1:18
    XML 版本中看到的一样
  • 1:18 - 1:22
    数据以这种方式呈现的原因是
  • 1:22 - 1:25
    可以用同一个类型和关键字贴多个标签
  • 1:25 - 1:28
    所以 用这种方式在数组中储存数据
  • 1:28 - 1:32
    使我们可以在把标签放入 MongoDB 中时避免标签之间的覆盖
  • 1:32 - 1:35
    另一中方法是 把它作为这里的字段名
  • 1:35 - 1:38
    并把这个作为这个字段的值
  • 1:38 - 1:41
    我想就这个数据集指出的一点是
  • 1:41 - 1:46
    这个集合含有超过7百万份文件
  • 1:46 - 1:50
    我们之前讨论过索引及其提高性能的作用
  • 1:50 - 1:53
    我们来看一下这一个查询
  • 1:53 - 1:54
    及其返回结果所需的时间
  • 1:54 - 1:58
    现在 我们的这个标签字段上并没有索引
  • 1:58 - 2:00
    我们来进行一个查询 看看效果如何
  • 2:00 - 2:03
    我在这里载入的这个集合含有
  • 2:03 - 2:06
    芝加哥所有的公开街道图
  • 2:06 - 2:12
    我要查询带有 Giordanos 标签的所有节点和地理位置
  • 2:12 - 2:17
    Giordanos 是芝加哥著名的披萨连锁店 如果你进行查询
  • 2:17 - 2:20
    [BLANK_AUDIO]
  • 2:20 - 2:22
    你会发现 它需要一定的时间来返回结果
  • 2:22 - 2:24
    我们进行一下这个查询的美观版本
  • 2:24 - 2:26
    [BLANK_AUDIO]
  • 2:26 - 2:28
    查询结果的返回需要几秒钟的时间
  • 2:28 - 2:31
    如果我们只需做一次查询
  • 2:31 - 2:34
    那没什么大问题 但事实上
  • 2:34 - 2:39
    在大多数应用中 我们通常需要进行多次查询
  • 2:39 - 2:41
    在部分应用中 甚至需要在短时间内
  • 2:41 - 2:45
    进行上百次或上千次查询
  • 2:45 - 2:48
    所以 考虑到这对数据库服务器产生的负荷
  • 2:48 - 2:52
    以及在同一时间进行的多次查询
  • 2:52 - 2:54
    对于我们的应用来说 为查询返回结果等待2秒钟是行不通的
  • 2:54 - 2:57
    我之前说过 这对我们的应用是致命的
  • 2:57 - 3:01
    所以 如果我在这个集合上构建索引
  • 3:01 - 3:04
    它的性能就会大幅提高
  • 3:04 - 3:07
    因为我们不需要像之前那样进行全表扫描
  • 3:07 - 3:10
    我可以直接进入磁盘中 这些文件与我的查询相匹配的地方
  • 3:10 - 3:14
    再深入地讨论索引问题
  • 3:14 - 3:17
    就超出了这节课的范围了
  • 3:17 - 3:20
    所以 我着这里只是为你讲解基本的索引知识
  • 3:20 - 3:23
    我希望你能浏览 MongoDB 的文件页面
  • 3:23 - 3:26
    或看一下我们在 university.mongodb.com 网站上
  • 3:26 - 3:30
    提供的在线免费课程
  • 3:30 - 3:33
    你可以在讲师备注中找到
  • 3:33 - 3:36
    我们就 Mongo DB 讨论的所有话题的全面论述 包括创建索引
  • 3:36 - 3:38
    我们来创建这个索引
  • 3:38 - 3:42
    为此 我要设定我想构建索引的字段
  • 3:42 - 3:45
    为此 我直接表示
  • 3:45 - 3:48
    使这个集合节点的 tg 字段
  • 3:48 - 3:54
    中含有一个索引
  • 3:54 - 3:56
    因为 这个集合中有超过7百万个文件
  • 3:56 - 3:58
    所以 这个任务的完成需要一定时间
  • 3:58 - 4:01
    我们需要一定的时间来建立索引
  • 4:01 - 4:03
    如果我们先建立的索引 那么
  • 4:03 - 4:07
    在我们将数据载入集合后 它会根据数据库的每一次写入进行更新
  • 4:07 - 4:10
    但在这里 为了方便我讲解这个例子
  • 4:10 - 4:11
    我们是在载入所有数据后才建立的索引
  • 4:11 - 4:15
    我们在视频里直接跳到
  • 4:15 - 4:17
    索引已经完成的地方 它需要几分钟的时间
  • 4:17 - 4:21
    现在 索引已经创建完了
  • 4:21 - 4:24
    我们再进行这个查询并看一下效果
  • 4:24 - 4:29
    它立刻返回了我们需要的文件
  • 4:29 - 4:33
    这就说明了性能在使用和不使用索引时的不同
Tytuł:
Using Indexes - Data Wranging with MongoDB
Video Language:
English
Team:
Udacity
Projekt:
UD032: Data Wrangling with MongoDB
Duration:
04:34

Chinese, Simplified subtitles

Revisions Compare revisions