【问题标题】:MongoDB poor read performanceMongoDB读取性能差
【发布时间】:2011-10-21 11:29:26
【问题描述】:

我有一个简单的数据集,几个集合,不超过20个 MongoDB 2.0(之前是 1.8)中的每个文档。我越来越穷 查询数据时的结果(至少我认为它们可能是 更好看http://mongoid.org/performance.html)。首先, 我虽然我在 Ruby (Mongoid) 中使用的映射器是问题所在,但是 我做了更多的测试,它似乎与数据库更相关 自己。

我做了一个简单的基准测试,查询同一个文档 10000 次按其 ID,首先使用 Ruby Mongo 驱动程序,然后是 Mongoid。这 结果:

              user     system      total        real
driver    7.670000   0.380000   8.050000 (  8.770334)
mongoid   9.180000   0.380000   9.560000 ( 10.384077)

代码在这里:https://gist.github.com/1303536 我正在测试的机器是 Core 2 Duo P8400 2.27 GHz with 4 运行 Ubuntu 11.04 的 GB RAM。 我也使用 pymongo 做了一个类似的测试来检查问题是否出在 在 Ruby 驱动程序中,但结果只是稍微好一点(5-6 s for 10000 个请求)。

我正在获取的文档的 bsonsize 是 67。它有一些小 嵌入文档,但不超过 100 个。部分嵌入 文档通过 ID 引用其他集合中的文档,但 AFAIR 这个 关系由映射器处理,所以它不应该影响 表现。使用explain() 直接在数据库中获取此文档会导致millis = 0。

奇怪的是,HDD LED 一直在闪烁 测试。 Mongo不应该将此文档缓存在RAM中吗 初读?有什么明显的我可能会丢失吗?或者这是 结果一点也不差(但与http://mongoid.org/performance.html相比 看起来很糟糕)?

【问题讨论】:

  • 如果您共享所有代码会很有用。乍一看,您所做的似乎不仅仅是在循环中检索一个元组。一方面,您似乎在反复选择该集合。
  • 除了这个要点我还应该分享什么代码?让我们忽略 Mongoid 测试 - 它在这里无关紧要。因此,整个代码都在要点中。我猜Python版本是一样的,以防万一我把它放在here
  • 在此期间您的 mongostat 运行中是否看到故障/秒?无论哪种方式,都有很多不同的原因导致这种情况发生。尝试用 JSON/JS 重写你的测试,这样即使不熟悉 Mongoid 的人也能帮助你。
  • JS 中的一个简单基准是here。使用具有 13 个对象的新数据库运行此 (time mongo db_name file.js) 需要 2 分钟。与here 的结果相比,即使考虑到硬件差异,它似乎也慢得离谱(除非我误解了某些东西)。 mongostat 没有显示任何错误,唯一让我觉得奇怪的是净输出从不超过 2-3MB/s。

标签: mongodb performance database


【解决方案1】:

我删除并重新创建了数据库。也许是因为从 1.8 到 2.0。无论如何,HDD LED 停止闪烁,现在一切都快了 2-3 倍。

我还仔细查看了用于对 Mongoid 进行基准测试的测试,这个结果 (0.001s) 仅适用于一个 find(),而不是一百万。我告诉 Mongoid 的作者,我认为网站上没有明确说明操作的数量仅适用于其中的一些。

很抱歉给您带来了困惑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 2014-12-05
    • 2016-04-26
    • 2016-11-04
    • 2021-03-28
    • 2018-03-20
    相关资源
    最近更新 更多