免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4925 | 回复: 1
打印 上一主题 下一主题

10gen工程师讲数据库索引实现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-21 21:09 |只看该作者 |倒序浏览
10gen工程师讲数据库索引实现










MongoDB尽管在数据存储上与传统关系数据库很不一样,但是在索引构建上却几乎是与传统关系型数据库一致。主要是使用了B-tree作为索引结构。

Indexes in MongoDB are conceptually similar to those in RDBMSes like MySQL. You will want an index in MongoDB in the same sort of situations where you would have wanted an index in MySQL.

下面一篇文章是10gen工程师 Kyle Banker 所写,他拿食谱举例,讲解了在数据库系统中索引的基本实现,非常形像。本站简单翻译如下,更详细的内容,请直接查看原文:

原文链接:The Joy Of Indexing

1.唯一索引
想像你要在一本没有目录的食谱上查找某一道菜的做法,那么你唯一的办法可能就是从头到尾把这本几百页的书看一遍,直到找到你想找的菜。

而一个快速的方法就是给菜谱加上一个目录,目录中有每一道菜的名字与相应页数的对应,并且菜名是按字母顺序排列的如下,这样你就可以按首字母快速地找到你要找的菜谱的页数了。(这个基本上对应的是唯一索引的形式)

举例:

水饺
- 45
水煮肉片
- 4,011
水煮鱼
- 943

2.非唯一索引
但是如果我今天买了条鱼,想查一下所有跟鱼相关的做法,那么用上面的索引就没办法了。于是出现下面一种索引构建方法,即将所有菜的材料构建目录,这时候一个材料对应多道菜。

举例:


- 3, 20, 42, 88, 103, 1,215…
猪肉
- 2, 47, 88, 89, 90, 275…
白菜
- 7, 9, 80, 81, 82, 83, 84…

3.联合索引
下面还有另一种需求,如果我知道材料里有鱼,而我又知道这道菜的名字,就不用查找到材料后去翻看后面几个具体页的菜再来选择了。满足这种需求的是联合索引:


- 水煮鱼
—- 1,215
- 红烧带鱼
—- 88
- 酸菜鱼
—- 103
猪肉
- 红烧肉
—- 875
- 小炒肉
—- 89
- 回锅肉
—- 47
白菜
- 白菜汤
—- 2,000
- 素炒白菜
—- 2,133
- 白菜炖豆腐
—- 1,050

论坛徽章:
0
2 [报告]
发表于 2012-02-24 17:40 |只看该作者
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP