1.简介
1.1使用场景
- 游戏场景,使用MongoDB存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新(一个角色的所有信息就用一个文档存储)
- 物流场景,使用MongoDB存储订单信息,订单状态在运送过程中会不断更新,以MongoDB内嵌数组的形式来存储,一次查询就能讲订单所有的变更读取出来。(如果是Mysql进行存储的话,那频繁的去update物流信息,造成效率更低了)
- 社交场景,使用MongoDB存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
- 物联网场景,使用MongoDB存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
- 视频直播,使用MongoDB存储用户信息,礼物信息等
1.2性能优越
- 在使用场合下,千万级别的文档对象,近10G的数据,对有索引的ID查询不会比Mysql慢(众所周知Mysql的索引查询速度是很快的)
- 而对非索引字段的查询,则是全面胜出
- mysql实际无法胜任大量数据量下任意字段的查询,而mongodb查询性能实在牛
- 下面可以看一组测试数据
1.3 MongoDB的优点
1.3.1 弱一致性(最终一致),更能保证用户的访问速度
不保证执行过程中数据的一致性,但是可以保证最终结果的数据一致性。因为在分布式环境下,各个节点做数据同步的时候,读到的数据不一定是最新的数据
1.3.2 文档结构的存储方式,能够更便捷的获取数据
以文档为数据结构,减少了连接查询,支持JSON语法,每个文档所存储的属性不同,文档里面还可以嵌套文档,提高查询效率
1.3.3 内置GridFS,支持大容量的存储
- GridFS是一个出色的分布式文件系统,可以支持海量的数据存储(可以做大数据相关的操作)
- 内置了GridFS的MongoDB,能够满足对大数据集的快速范围查询
1.3.4内置Sharding分片
1PB = 1024TB
1.3.5 第三方支持丰富
1.4 MongoDB的缺点
1.4.1 事务支持不友好
- 所以事务要求严格的系统(银行系统)肯定不能用它。