MongoDB的官方文档地址:https://docs.mongodb.com/manual/introduction
好早前做过一个团队技术分享,讲过MongoDB。一直没时间写个博客,正是周末,跟着原来的ppt,再写点东西。
为什么那个时候分享了MongoDB了?是因为当时的产品线利用mysql做了个反显用户信息的表。用户在产品中一步一步填写信息,然后每一步去保存到服务端数据库中。当时的表结构设计如下(粗略表示):
userinfo表结构
id | uid | data |
主键 | 用户id | {"jobType":"1","isStudent":"2","agreement":"1","continueApply":1,"pId":"aa"} |
在data字段中,把用户的各个信息保存成json格式。
mysql表的这种json设计有哪些有点和缺点呢?
显然,优点在于当业务上需要新增或者删除一个用户字段时候,很有扩展性,不用修改表结构。
缺点也比较明显,当需要修改data中的字段,哪怕是修改一个,也要经过 读记录->代码merge处理->更新记录的过程。
MongoDB这种nosql数据库可以很好解决这种E-R面向关系型数据库中的json结构设计。
MongoDB是一个高性能、高可用、分布式、模式灵活的面向文档的nosql数据库。其特色包括:1.高性能 2.丰富的查询接口 地理位置 3.高可用 4.水平扩展 等等。
面向关系型数据库和面向文档数据库的区别又是啥呢?
面向关系型 | 面向文档型 |
E-R数据库,找出各个实体之间的关系,建表 |
文档模式,存储单位是一个文档,支持数组和嵌套.合理建模避免关联 |
举一个简答的例子:
一个电商用户,属性比如:姓名、邮箱、手机号、收货地址(多个)
1. 在面向关系型数据库中,考虑各个范式,一般会如下设计:
两张表,一个用户基本信息,一个收货地址表,两张表利用用户id关联
user表:
addr表:
2. 在面向文档数据库中,会这样设计:
一个文档表示用户信息:
user文档:
以上简单的介绍了两种类型数据库的区别。
MongoDB的安装,比较容易。参考官方文档 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-linux/
之前也写过安装的博客: http://www.cnblogs.com/firstForEver/p/5267421.html