在MongoDb文档3.2中,我看到它们支持3个存储引擎,
我从描述中感觉到WiredTiger
比MMAPV1
好,但在其他来源中,他们说MMAPV1更适合重度阅读...和WiredTiger,用于繁重的书写...
在 Select 其中一个时是否存在一些限制?
当我有这种类型的应用程序通常是最好的,否则 Select 其他...
在MongoDb文档3.2中,我看到它们支持3个存储引擎,
我从描述中感觉到WiredTiger
比MMAPV1
好,但在其他来源中,他们说MMAPV1更适合重度阅读...和WiredTiger,用于繁重的书写...
在 Select 其中一个时是否存在一些限制?
当我有这种类型的应用程序通常是最好的,否则 Select 其他...
这是个人经历,但请看一下这篇博客文章,它很好地解释了不同类型的引擎:
比较MongoDB WiredTiger和MMAPv1存储引擎.更高的性能&;写入性能提高7倍至10倍
对我来说, Select 非常简单,我需要文档级锁,这是WiredTiger个理想的 Select ,我们没有企业版的mongo,因此内存引擎不可用.MMAPv1BTree是将内存映射到硬盘驱动器的非常基本的技术,但效率不高.
MMAP存储引擎使用一个名为"记录分配"的过程来获取用于文档存储的磁盘空间.所有记录都连续地位于磁盘上,当一个文档大于分配的记录时,它必须分配一个新记录.新的分配需要移动文档并更新引用该文档的所有索引,这比就地更新需要更多时间,并导致存储碎片.此外,当前迭代中的MMAPv1通常会导致文件系统上的高空间利用率,这是因为它过度分配了记录空间,并且缺乏对压缩的支持.
每个人都有不同的要求,但在大多数情况下,WiredTiger将是理想的 Select .事实上,它在文档级别而不是收集级别上进行原子操作有很大的优势,这是你无法克服的.
More reads and not a lot of writes
如果阅读是你主要关心的问题,这里有一个方法可以解决这个问题.
您可以通过以下方式调整Mongo Driver Read Preference Modes:
当你有很多读操作时,这个设置会执行得很好,但是作为一种折衷,写操作会比较慢.然而,读取数据的吞吐量将是巨大的.
我希望这对你有帮助,如果你有额外的问题,把它们作为一个 comments ,我会try 在这个答案中解决它.
你也可以查看MMAPv1 vs WiredTiger篇 comments ,注意到他是如何从MMAPv1改为WiredTiger的.卖家正在锁定你无法击败的表现.
对于新项目,我现在使用WiredTiger.由于从压缩的WiredTiger存储迁移到未压缩的WiredTiger存储相当容易,因此我倾向于从压缩开始,以提高CPU利用率("获得更多实惠").如果压缩对性能或用户体验有显著影响,我会迁移到未压缩的WiredTiger.
MongoDB database profiler
确定数据库需求的最佳方法是设置测试集群,并在其上运行应用程序