MongoDB的主要缺点是内存么?

MongoDB的主要缺点是内存么?其他方面没有问题么?

阅读 4.6k
2 个回答

楼上的知识需要更新一下。你的解释应该是在描述MMAPv1这个引擎的工作方式。从5年前的3.0版本开始,MongoDB支持新的存储引擎WiredTiger,从3.2开始WT成为默认引擎。WT引擎可以通过--cacheSizeGB参数控制引擎一共使用多少内存,并且支持落盘加密、压缩等特性。
需要注意的是cacheSizeGB控制的是WT引擎使用的内存总量,最终使用的内存量会略大于这个量,因为还会有用于建立TCP连接的内存,执行查询时的临时缓存等。默认情况下cacheSizeGB = (内存 - 1GB) / 2。
然后强调一下,不仅是MongoDB,任何数据库如果想发挥出其完整的性能,最好都不要和别的服务放在一起。数据库的性能不仅取决于自己占用了多少内存,更取决于剩下的那部分操作系统缓存。而且在一台服务器上数据库通常都是占用内存最多的进程。一旦其他进程占用了过多的内存,导致OOM,那数据库一定是最先被干掉的进程。

最后说说关于JOIN关联查询,MongoDB提供了$lookup用于支持左外连接,但目前还只支持在未分片的集合上执行这个操作,后续版本会完善其在分片集合上的操作。同理,事务目前也只支持未分片事务,大约2个月后会推出支持分布式事务的新版本。

MongoDB对内存是贪得无厌的。使用的是内存映射存储引擎,它会把磁盘IO操作转换成内存操作,如果是读操作,内存中的数据起到缓存的作用,如果是写操作,内存还可以把随机的写操作转换成顺序的写操作,总之可以大幅度提升性能。MongoDB并不干涉内存管理工作,而是把这些工作留给操作系统的虚拟缓存管理器去处理,这样的好处是简化了MongoDB的工作,但坏处是你没有方法很方便的控制MongoDB占多大内存,事实上MongoDB会占用所有能用的内存,所以最好不要把别的服务和MongoDB放一起。

除此之外,MongoDB是nosql的,意味着不支持join,不支持关系查询等

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进