在MongoDb文档3.2中,我看到它们支持3个存储引擎,

我从描述中感觉到WiredTigerMMAPV1好,但在其他来源中,他们说MMAPV1更适合重度阅读...和WiredTiger,用于繁重的书写...

在 Select 其中一个时是否存在一些限制?

当我有这种类型的应用程序通常是最好的,否则 Select 其他...

推荐答案

这是个人经历,但请看一下这篇博客文章,它很好地解释了不同类型的引擎:

Wired Tiger vs MMAPv1

比较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:

  1. 设置副本集,例如1个主副本和3个辅助副本.
  2. 将write concern设置为majority,这将使
  3. 将"读取首选项"设置为"辅助".

当你有很多读操作时,这个设置会执行得很好,但是作为一种折衷,写操作会比较慢.然而,读取数据的吞吐量将是巨大的.

我希望这对你有帮助,如果你有额外的问题,把它们作为一个 comments ,我会try 在这个答案中解决它.

你也可以查看MMAPv1 vs WiredTiger篇 comments ,注意到他是如何从MMAPv1改为WiredTiger的.卖家正在锁定你无法击败的表现.

对于新项目,我现在使用WiredTiger.由于从压缩的WiredTiger存储迁移到未压缩的WiredTiger存储相当容易,因此我倾向于从压缩开始,以提高CPU利用率("获得更多实惠").如果压缩对性能或用户体验有显著影响,我会迁移到未压缩的WiredTiger.

MongoDB database profiler

确定数据库需求的最佳方法是设置测试集群,并在其上运行应用程序

Mongodb相关问答推荐

匹配/筛选/投影对象中数组中数组中的嵌套字段

如何获取键值对的对象,其中值仅具有 mongoDB 中的投影字段

MongoDB:如何从数组中的所有对象中删除属性?

数组过滤器 MongoDB

如何向所有文档添加一个字段,其中前 100 个文档的值为 1,接下来的 100 个文档的值为 2,依此类推?

MongoDB 使用 pymongo 收集 500K 文档的写入速度很差

MongoDB - 在 $lookup 管道中匹配键匹配不起作用

为什么一个 mongodb 副本集需要奇数个投票 node ?

将 MongoDB BsonDocument 转换为字符串

mongoose如何在幕后工作

将 mongoose 字符串模式类型默认值设为空白并使该字段可选

Mongoose 中不同集合的相同模式

在 MongoDB 中合并两个集合

Mongo Schema-less集合和 C#

MongoDB - Permission denied for socket: /tmp/mongodb-27017.sock

使用 mongodb 在数组中查找子文档

MongoDB 中的多个 $inc 更新

如何判断 MongoDB 中是否存在字段?

MongoError:Can't extract geo keys from object

mongodb安装失败运行mongod