• 在什么场景下我们应该选择MongoDB来存储数据?
  • 发布于 2个月前
  • 481 热度
    0 评论
  • CEBBCt
  • 4 粉丝 44 篇博客
  •   
一、基本概念走起
MongoDB是一款开源、跨平台、分布式,具有大数据处理能力的文档存储数据库。文档数据库MongoDB用于记录文档结构的数据,比如JSON、XML结构的数据。

二、MongoDB的主要特征
1.高性能。提供JSON、XML等可嵌入数据快速处理功能,提供文档的索引功能,以提高查询速度;
2.丰富的查询语言。为数据聚合、结构文档、地理空间提供丰富的查询功能;
3.高可用性。提供自动故障转移和数据冗余处理功能;
4.水平扩展能力。提供基于多服务器集群的分布式数据处理能力,具体处理时分主从和权衡(基于Hash自动推选)两种处理模式;
5.支持多种存储引擎。MongoDB提供多种存储引擎,WiredTiger引擎、MMAPv1引擎是基于硬盘读写的存储引擎,In-Memory引擎是基于内存的存储引擎;
三、MongoDB优缺点,扬长避短
A、优点
1.Free-schema无模式文档,适应非结构化数据存储;
2.内置GridFS,支持大容量的存储;
3.内置Sharding,分片简单
4.弱一致性(最终一致),更能保证用户的访问速度;
5.查询性能优越,对于千万级别的文档对象,差不多10个G,对有索引的ID的查询不会比MySQL慢,而对非索引字段的查询,则是完胜MySQL;
6.聚合框架,它支持典型几种聚合操作 , 比如,Aggregate pipelien, Map-Reduce等;
7.支持自动故障恢复
B、缺点
1.太吃内存,快是有原因的,因为MongoDB把数据都放内存里了;
2.不支持事务操作;
3.占用空间过大;
4.不支持联表查询;
5.只有最终一致性,言外之意,就是可能造成数据的不一致,如果想要保持强一致性,必须在一个服务器处理所有的读写操作,坑;
6.复杂聚合操作通过mapreduce创建,速度慢
7.Mongodb全局锁机制也是个坑;
8.预分配模式会带来的磁盘瓶颈;
9.删除记录时不会释放空间,相当于逻辑删除,这个真的坑;
10.MongoDB到现在为止,好像还没有太好用的客户端工具;

四、何时选择MongoDB?为啥要用它?
1、MongoDB事务
1.1 MongoDB目前只支持单文档事务,MongoDB暂时不适合需要复杂事务的场景。
1.2 灵活的文档模型JSON格式存储最接近真实对象模型,对开发者友好,方便快速开发迭代,可用复制集满足数据高可靠、高可用的需求,运维较为简单、故障自动切换可扩展分片集群海量数据存储。

2、多引擎支持各种强大的索引需求
2.1支持地理位置索引
2.2 可用于构建各种O2O应用
2.3 文本索引解决搜索的需求
2.4 TTL索引解决历史数据过期的需求
2.5 Gridfs解决文件存储的需求
2.6 aggregation & mapreduce解决数据分析场景需求,可以自己写查询语句或脚本,将请求分发到 MongoDB 上完成。
3、具体的应用场景
传统的关系型数据库在解决三高问题上的力不从心。
何为三高?
High performance - 对数据库高并发读写的需求。
Huge Storage - 对海量数据的高效率存储和访问的需求。
High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求。
MongoDB可以完美解决三高问题。

4、以下是几个实际的应用案例:
(1)游戏场景
使用MongoDB存储游戏用户信息、装备、积分等,直接以内嵌文档的形式存储,方便查询、更新。

(2)物流场景
使用MongoDB存储订单信息、订单状态、物流信息,订单状态在运送过程中飞速迭代、以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更查出来,牛逼plus。

(3)社交场景
使用MongoDB存储用户信息,朋友圈信息,通过地理位置索引实现附近的人、定位功能。

(4)物联网场景
使用MongoDB存储设备信息、设备汇报的日志信息、并对这些信息进行多维度分析。

(5)视频直播
使用MongoDB存储用户信息、点赞互动信息。

5、选择MongoDB的场景总结:
1.数据量大
2.读写操作频繁
3.数据价值较低,对事务要求不高
用户评论