Optimization Tips | Tip #26: Create hierarchical documents for faster scans

原版书 <<50 Tips and Tricks for MongoDB Developers>>   地址:http://oreilly.com/catalog/0636920019893

皮皮书屋下载地址:http://www.ppurl.com/2011/05/50-tips-and-tricks-for-mongodb-developers.html

本书的所有翻译地址: http://blog.csdn.net/crazyjixiang/article/category/858638

翻译目的: MongoDB资料国内很少,书就更不必说了,借助对MongoDB的理解为大家做点贡献,如果有翻译有误的地方请指正,不能误入子弟,谢谢!

译者: Crazybaby 


对Tip# 26 翻译如下:

保持你的数据组织是分层的 ,不仅仅是组织化的,而且MongoDB可以在没有索引的情况下搜索上更快(在某些情况下)。


比如,设想你要在没有索引的情况下查询一些数据集。根据之前提及的,MongoDB不得不从头到尾在每个集合每个文档中进行标准匹配,根据你的文档结构,这将花费不同的时间。


让我们看下user集合的平面结构:



{
	"_id" : id,
	"name" : username,
	"email" : email,
	"twitter" : username,
	"screenname" : username,
	"facebook" : username,
	"linkedin" : username,
	"phone" : number,
	"street" : street
	"city" : city,
	"state" : state,
	"zip" : zip,
	"fax" : number
}

现在,我们来试着查询:

> db.users.find({"zip" : "10003"})

MongoDB内部会怎么样查询?它不得不从头到尾每个集合中的单元中查询zip单元,如图所示:


现在,通过内嵌集合,我们可以创建我们自己的"tree" 让MongoDB查询更快些.试想我们把结构改成这样:


{
	"_id" : id,
	"name" : username,
	"online" : {
		"email" : email,
		"twitter" : username,
		"screenname" : username,
		"facebook" : username,
		"linkedin" : username,
	},
	"address" : {
		"street" : street,
		"city" : city,
		"state" : state,
		"zip" : zip
	}
	"tele" : {
		"phone" : number,
		"fax" : number,
	}
}

现在我们来试着这样查询:

> db.users.find({"address.zip" : "10003"})

MongoDB在找到address必要的前缀之前,不得不查询_id,name和online,然后再查找zip这个单元。使用一个合理的分层结构使MongoDB不不需要对每个单元进行匹配。



原文链接: http://blog.csdn.net/crazyjixiang/article/details/6676401

转载于:https://my.oschina.net/chen106106/blog/51142

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值