mongo牺牲空间,把内存管理交给操做系统去管理。本身作一些内存的映射,而且记住哪一种方式的查询最优。除此以外,把不少文档加工的工做交给了客户端(好比事务)。除此以外数据的传输使用mongo协议,而不是HTTP之类的。这些都在查询的速度上有了必定的保证。mysql
丰富的数据类型(PS:mongodb后台的字符编码都是utf-8的),正则表达式和函数直接保存,太可怕了。丰富的索引,复合索引,内嵌文档索引。丰富的查询方式,并且除了有像关系型数据库那样的group的聚合功能以外,还提供了强大的MapReduce支持。固然最具诱惑力的仍是它的自我管理,很是的强大,集群(想起mysql的集群一阵后怕),主从,数据分片,只要作一些配置,后续的工做mongo都会帮你处理。固然这些自动化可能带来的一些反噬可能须要后面渐现。正则表达式
使用每一个数据库,固然都会考虑读写的比例。mongodb有个比较蛋疼的就是全局锁,支持并发读,而后写的时候就会阻塞其余的读写。这个基因使业界不少人都认为mongodb适合高读少写的环境。固然2.0以后的mongodb也作了一些优化。可是,目前依然是server级别的锁(没错,不是db级别,collection级别)。sql
那么为何使用mongodb:mongodb
一、读并发,读比例很高数据库
二、须要安全性高的热备份安全
三、读效率要求比较高数据结构
四、对磁盘的高占用能够忍受并发
五、管理、使用方便(mongodb集群分片很智能)函数
六、数据结构变更比较大,不可知优化
七、数据量庞大,甚至还要存储大文件(mongodb有GridFS)
欢迎抨击,小人不才,小敬mongodb看法.