1、为什么选择MongoDB?
纵向扩展(scale up) 纵向扩展与横向扩展不同的是他会将原本的服务器进行升级,让其拥有更强大的计算能力。这样的优势是易于管理无需考虑扩展带来的众多问题,但缺点也显而易见,那就是成本高。一台大型机的价格往往非常昂贵,并且这样的升级在数据达到极限时,可能就找不到计算能力更为强大的机器了。2、NoSQL对传统数据库设计思维的影响
INSERT INTO T_INFO VALUES('John','Come Together'); --成功
INSERT INTO T_INFO VALUES('小明', 20, 'xiaoming@111.com'); --失败
{"name" : "John", "song" : "Come Together"}
{"name" : "小明", "age":"20", "email" : xiaoming@111.com}
2、范式化与反范式化
反范式化(denormalization)是针对范式化提出的相反理念,反范式化会将当前文档的数据集中存放在本表中,而不会采用拆分的方式进行存储。3、性能与用户量 4、范式化与反范式化
{
"_id" : ObjectId("5124b5d86041c7dca81917"),
"title" : "如何使用MongoDB",
"author" : [
ObjectId("144b5d83041c7dca84416"),
ObjectId("144b5d83041c7dca84418"),
ObjectId("144b5d83041c7dca84420"),
]
}
{
"_id" : ObjectId("5124b5d86041c7dca81917"),
"title" : "如何使用MongoDB",
"author" : [
{
"name" : "丁磊"
"age" : 40,
"nationality" : "china",
},
{
"name" : "马云"
"age" : 49,
"nationality" : "china",
},
{
"name" : "张召忠"
"age" : 59,
"nationality" : "china",
},
]
}
{
"_id" : ObjectId("5124b5d86041c7dca81917"),
"title" : "如何使用MongoDB",
"author" : [
{
"_id" : ObjectId("144b5d83041c7dca84416"),
"name" : "丁磊"
},
{
"_id" : ObjectId("144b5d83041c7dca84418"),
"name" : "马云"
},
{
"_id" : ObjectId("144b5d83041c7dca84420"),
"name" : "张召忠"
},
]
}
在上面三个示例中,第一个示例的更新效率是最高的,但查询效率是最低的,而第二个示例的查询效率最高,但更新效率最低。所以在实际的工作中我们需要根据自己实际的需要来设计表中的字段,以获得最高的效率。5、理解填充因子
(注:图片出处:《MongoDB The Definitive Guide》)两种方案
db.book.insert({
"name" : "MongoDB",
"publishing" : "清华大学出版社",
"author" : "john"
"tags" : []
"stuff" : "ggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggg"
})6、准确利用索引
//建立复合索引
db.test.ensureIndex({"age": 1,"no": 1,"name": 1 })
我们在查询时可以迅速的将age,no字段进行排序,隐式索引指的是如果我们想要排序的字段包含在已建立的复合索引中则无需重复建立索引。
db.test.find().sort("age": 1,"no": 1)
db.test.find().sort("age": 1)
//建立复合索引
db.test.ensureIndex({"age": 1})
6.2 索引列颗粒越小越好
总结
以上所述是小编给大家介绍的MongoDb优化指南,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对自学php网网站的支持!