mongo主要在什么场景下使用

什么情况下使用mongo

mongoDB最适合的场景为网站信息存储,如文章存储,直接返回Json格式,简单方便,而且在百万级以上的数据时也不需要进行分表处理,上千万的时候才需求分片处理。
不适合有关系逻辑型的场景使用,如订单,产品,硬件数据,智慧矿山等。

MongoDB与MySQL的区别
关于MongoDB与MySQL的区别可以参考网上关于NoSQL与MySQL的区别,以下是找到的网上的关于两者区别的截图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总体上讲:

由于MongoDB独特的数据处理方式,可以将热点数据加载到内存,故而对查询来讲,会非常快(当然也会非常消耗内存);同时由于采用了BSON的方式存储数据,故而对JSON格式数据具有非常好的支持性以及友好的表结构修改性,文档式的存储方式,数据友好可见;数据库的分片集群负载具有非常好的扩展性以及非常不错的自动故障转移(大赞)。

不足:数据库的查询采用了特有的查询方式,有一定的学习成本(不高);索引不咋滴;锁只能提供到collection级别,还做不到行级锁;没有事务机制(不能回滚啊);学习资料肯定没有MySQL的多。

MongoDB能为我解决哪些问题

我会用MongoDB制作网站,因其文档式的结构存储,不会因千万级的文章信息而使网站变的运行缓慢,单是要注意,在订单和产品以及智慧矿山等硬件设备信息,如井下的温度湿度这些数据不能使用mongodb,不然在数据分析,跟其它硬件关联以及统计等业务的情况下都会出现不可挽回的后果!!切记!!

MongoDB与Hadoop的区别

MongoDB侧重于对数据进行操作的应用系统,而Hadoop则侧重于对数据进行分析统计的应用。
MongoDB能够满足对数据库读写性能具有极高要求的应用场景(很消耗memory的),一般这些应用的响应延迟会要求控制在10ms以下,甚至更低。而Hadoop由于每一次的读写操作会包含大量数据(Hadoop更适合少次操作大批量数据的场景),通过聚集分析处理大量数据,这种分析一般都会走MapReduce,会造成很高的延迟(数分钟到数小时不等)

不适合MongoDB的场景

如果业务中存在事务逻辑操作,则不要用MongoDB数据库

在开发过程中遇到问题如何求助

常见的问题一般都可以在网上找到答案。
可以百度搜索如https://segmentfault.com/t/mongodb,github之类的网站查找对应的问题

与关系型数据库相比,MongoDB的缺点:

①mongodb不支持事务操作。

所以事务要求严格的系统(如果银行系统)肯定不能用它。(这点和优点①是对应的)

②mongodb占用空间过大。

关于其原因,在官方的FAQ中,提到有如下几个方面:
1、空间的预分配:为避免形成过多的硬盘碎片,mongodb每次空间不足时都会申请生成一大块的硬盘空间,而且申请的量从64M、128M、256M那 样的指数递增,直到2G为单个文件的较大体积。随着数据量的增加,你可以在其数据目录里看到这些整块生成容量不断递增的文件。
2、字段名所占用的空间:为了保持每个记录内的结构信息用于查询,mongodb需要把每个字段的key-value都以BSON的形式存储,如果 value域相对于key域并不大,比如存放数值型的数据,则数据的overhead是较大的。一种减少空间占用的方法是把字段名尽量取短一些,这样占用 空间就小了,但这就要求在易读性与空间占用上作为权衡了。我曾建议作者把字段名作个index,每个字段名用一个字节表示,这样就不用担心字段名取多长 了。但作者的担忧也不无道理,这种索引方式需要每次查询得到结果后把索引值跟原值作一个替换,再发送到客户端,这个替换也是挺耗费时间的。现在的实现算是 拿空间来换取时间吧。
3、删除记录不释放空间:这很容易理解,为避免记录删除后的数据的大规模挪动,原记录空间不删除,只标记“已删除”即可,以后还可以重复利用。

4、可以定期运行db.repairDatabase()来整理记录,但这个过程会比较缓慢

③MongoDB没有如MySQL那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方。

MongoDB适合存储一些关系简单、数据量又很大的数据,比如我们的平台上虚拟机的监控信息,包括内存、IO、CPU、网络等数据,每隔几秒就采集一次数据,每周、每月,量很大,而且旧的监控数据也不会保留太长时间,就使用的mongodb来存储这些数据;
另外mongodb的集群部署相对比较简单,易于扩展;比如主从复制,在mongo.conf配置几个参数就OK了;分片集群的配置也比较简单。还支持使用命令行来进行动态地添加和删除节点;

Mongodb的优点与不足

(1)Mongodb的不足之处

1、在集群分片中的数据分布不均匀
2、单机可靠性比较差
3、大数据量持续插入,写入性能有较大波动
4、磁盘空间占用比较大

Mongodb与redis相比较:

mongoDB 源码语言是C++,redis也是C或C++,

mongodb 文件存储是BSON格式类似JSON,或自定义的二进制格式。

mongodb与redis性能都很依赖内存的大小,mongodb 有丰富的数据表达、索引;最类似于关系数据库,支持丰富的查询语言,redis数据丰富,较少的IO ,这方面mongodb优势明显。

mongodb不支持事物,靠客户端自身保证,redis支持事物,比较弱,仅能保证事物中的操作按顺序执行,这方面 redis优于mongodb。

mongodb对海量数据的访问效率提升,redis 较小数据量的性能及运算,这方面 mongodb性能优于redis .monbgodb 有mapredurce功能,提供数据分析,redis 没有 ,这方面 mongodb优于redis 。


版权声明:本文为liuqingrou原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。