One minute
MongoDB使用心得
首先MongoDB是什么
区别于传统的关系型数据库(MySQL),MongoDB是NoSQL类型的数据库,是一个基于分布式【文件】存储的开源数据库系统。MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB文档类似于 JSON(BSON)对象。字段值可以包含其他文档,数组及文档数组。所有的数据对于MongoDB来说都是文档,不存在传统关系型数据的字段限制,这就意味这你同一个document中的每条数据可能字段都会不一样,非常灵活(维护困难)。
MongoDB的特点
- 面向文件的
- 高性能
- 高可用性
- 易扩展性
- 丰富的查询语言
我们能用MongoDB做什么
由于MongoDB不支持事务,对数据一致性要求较高的业务(如银行业务,应用核心业务等)并不适用。对于其他个人网站(数据类型简单),日志分析类型业务(写入量大)等都和适合,甚至也可以把他当做缓存使用。
怎么用
要用好MongoDB,首先你应该忘记你学过的那些优雅无敌的SQL,忘记传统的范式化设计。 举个栗子: 一个业务场景是,保存图书馆内的所有书和其作者的相关信息。 在使用传统的范式化关系型数据设计中,我们可能会有1张book表和1张author表
#book:
{
"_id" : ObjectId("5124b5d86041c7dca81917"),
"title" : "如何使用MongoDB",
"author" : [
ObjectId("144b5d83041c7dca84416"),
ObjectId("144b5d83041c7dca84418"),
]
}
#author:
{
[
"_id" : ObjectId("144b5d83041c7dca84416"),
"name" : "张三",
"age" : "30",
"sex" : "male"
],
[
"_id" : ObjectId("144b5d83041c7dca84418"),
"name" : "李四",
"age" : "28",
"sex" : "female"
],
...
}
这种设计的坏处是,查询时要join效率会比较差
如果是采用MongoDB来处理,完全可以这样:
{
"_id" : ObjectId("5124b5d86041c7dca81917"),
"title" : "如何使用MongoDB",
"author" : [
{
"name" : "张三",
"age" : "30",
"sex" : "male"
},
{
"name" : "李四",
"age" : "28",
"sex" : "female"
},
]
}
这样通过这一个document就可以得到我们想要的信息。当然,任何事物都是有两面性的,如果遇到要更新author信息时,就要批量更新所有document对应的信息了,前面也提到过,不要盲目使用MongoDB,要针对自己所处的业务类型来选择。