mongodb - 从没有锁的mongodb读取

标签 mongodb

我们在工作中使用 MongoDB 2.2.0。数据库包含大约 51GB 的数据(目前),我想对我们迄今为止收集的用户数据进行一些分析。问题是,它是活机器,我们现在买不起另一个奴隶。我知道 MongoDB 有一个读锁,它可能会影响任何发生的写入,尤其是复杂查询时。有没有办法告诉 MongoDB 以最低优先级处理我的(特定)查询?

最佳答案

在 MongoDB 中,读取和写入确实会相互影响。读锁是共享的,但读锁会阻止获取写锁,当然在持有写锁时不会发生其他读取或写入。 MongoDB 操作会定期产生以防止其他等待锁的线程饿死。您可以阅读更多关于 here 的详细信息.

这对您的用例意味着什么?因为没有办法告诉 MongoDB 在没有读锁的情况下访问数据,也没有办法确定请求的优先级(至少现在还没有)读取是否显着影响写入性能取决于您有多少“净空”在写入事件进行时可用。

我可以提出的一个建议是,在弄清楚如何运行分析时,而不是扫描整个数据集(即对所有历史数据进行聚合查询),尝试在较短的时间片上运行较小的聚合查询。这将完成两件事:

  1. 读取作业的生命周期会更短,因此会更快完成,这将使您有机会评估查询对“实时”性能的影响。
  2. 您不会一次将所有旧数据提取到 RAM 中 - 通过随着时间的推移将这些分析查询分开,您将最大限度地减少它对当前写入性能的影响。

根据您买不起另一台服务器的能力,您可能会考虑获得一个生命周期较短的 AWS 实例,该实例可能不是很强大,但可用于针对您的数据集副本运行长时间的分析查询.在制作数据副本时要小心 - 对生产系统进行完全同步会对其造成沉重负担(更有效的方法是使用最近的备份/文件快照来恢复)。

关于mongodb - 从没有锁的mongodb读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14689934/

相关文章:

mongodb - 在 mongoDB 预测中添加新字段

ruby-on-rails - 如何使用 Mongoid 执行 runCommand?

database - 当集合被更改时,MongoDB 游标如何表现?

javascript - 通过mongoose访问数组元素

macos - 为什么 Mongo 不读取/usr/local/mongodb/mongod.conf 文件?

mongodb - Mongo 如何使用 DBRef 进行 $lookup

ruby-on-rails - 没有为带有 Mongoid 的意见生成的方法

MongoDB:无法规范化查询:BadValue $not 需要正则表达式或文档

json - Bash - 将 MONGODB BSON 转换为 JSON

javascript - 从 mongodb connect 和 find 返回一个数组