MongoDB 查询速度过慢,即使查询很简单并且与索引对齐

2024-04-09

我正在运行一个 MongoDB 服务器(这实际上就是它运行的全部内容)。该服务器拥有 64GB RAM 和 16 个内核,以及 2TB 硬盘空间。

文档结构

数据库有一个集合domains拥有大约 2000 万份文档。每个文档中都有相当多的数据,但出于我们的目的,该文档的结构如下:

{
    _id: "abcxyz.com",
    LastUpdated: <date>,
    ...
}

_id字段是文档引用的域名。 LastUpdated 有一个升序索引。 LastUpdated 每天更新数十万条记录。基本上,每当文档有新数据可用时,文档都会更新,并且 LastUpdated 字段会更新为当前日期/时间。

查询

我有一种从数据库中提取数据的机制,以便可以在 Lucene 索引中对其进行索引。 LastUpdated 字段是标记对文档所做更改的关键驱动程序。为了搜索已更改的文档并翻阅这些文档,我执行以下操作:

{
    LastUpdated: { $gte: ISODate(<firstdate>), $lt: ISODate(<lastdate>) },
    _id: { $gt: <last_id_from_previous_page> }
}

sort: { $_id:1 }

当没有返回文档时,开始日期和结束日期将向前移动,并且 _id“锚点”字段将被重置。此设置可以容忍先前页面中已更改其 LastUpdated 值的文档,即,分页不会因先前页面中现在技术上不再位于这些页面中的文档数量而错误地偏移。

问题

理想情况下,我想一次选择大约 25000 个文档,但由于某种原因,查询本身(即使只选择 极其 slow.

我运行的查询是:

db.domains.find({
    "LastUpdated" : {
        "$gte" : ISODate("2011-11-22T15:01:54.851Z"),
        "$lt" : ISODate("2011-11-22T17:39:48.013Z")
    },
    "_id" : { "$gt" : "1300broadband.com" }
}).sort({ _id:1 }).limit(50).explain()

事实上,它太慢了,以至于解释(在撰写本文时)已经运行了 10 多分钟,但尚未完成。如果这个问题完成的话,我会更新它,但当然要点是查询非常慢。

我能做些什么?我不知道查询可能出现什么问题。

EDIT55分钟后讲解完毕。这里是:

{
    "cursor" : "BtreeCursor Lastupdated_-1__id_1",
    "nscanned" : 13112,
    "nscannedObjects" : 13100,
    "n" : 50,
    "scanAndOrder" : true,
    "millis" : 3347845,
    "nYields" : 5454,
    "nChunkSkips" : 0,
    "isMultiKey" : false,
    "indexOnly" : false,
    "indexBounds" : {
            "LastUpdated" : [
                    [
                            ISODate("2011-11-22T17:39:48.013Z"),
                            ISODate("2011-11-22T15:01:54.851Z")
                    ]
            ],
            "_id" : [
                    [
                            "1300broadband.com",
                            {

                            }
                    ]
            ]
    }
}

遇到了一个非常相似的问题,并且索引建议和常见问题解答 http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ#IndexingAdviceandFAQ-Createindexestomatchyourqueries.Mongodb.org 上说,引用:

范围查询也必须是索引中的最后一列

因此,如果您有键 a、b 和 c 并运行 db.ensureIndex({a:1, b:1, c:1}),这些是尽可能使用索引的“指南”:

Good:

  • 查找(a=1,b>2)

  • 查找(a>1 且 a

  • find(a>1 和 a

Bad:

  • 查找(a>1,b=2)

仅对一列使用范围查询或排序。 好的:

  • 查找(a=1,b=2).sort(c)

  • 查找(a=1,b>2)

  • 查找(a=1,b>2 且 b

  • 查找(a=1,b>2).sort(b)

Bad:

  • 查找(a>1,b>2)

  • 查找(a=1,b>2).sort(c)

希望能帮助到你!

/J

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB 查询速度过慢,即使查询很简单并且与索引对齐 的相关文章

随机推荐

  • 在 Woocommerce 中下订单后,将值插入自定义表中

    我需要插入到我的自定义表中许可证表 username order id Quantity This needs to be populated when an order is placed Username customer s emai
  • 这段 1988 年的 C 代码有什么问题?

    我正在尝试编译 C 编程语言 K R 一书中的这段代码 它是 UNIX 程序的基本版本wc include
  • 尝试通过我的新域访问 WordPress with LiteSpeed 时显示 404

    我已经在 Digital Ocean Droplet 中创建了一个带有开放 LiteSpeed 缓存的 WordPress 实例 如果我在 设置 常规站点 和 WordPress URL 中配置了 IP 则它可以正常工作 但是当我添加我的
  • SQL:枚举每个组内返回的行

    假设我有一个SELECT 返回某物的查询 像这样 role name MANAGER Alice WORKER Bob WORKER Evan WORKER John MANAGER Max WORKER Steve 是否可以添加另一列来枚
  • 从 Git 存储库安装 Python 包后,某些文件夹丢失

    我想从以下存储库安装软件包https github com geomin django countria https github com geomin django countria 我正在使用的命令是pip install git gi
  • Xcode 存档调试条错误

    我正在尝试将大型遗留 C 库与 iOS 应用程序集成 我们能够在设备上构建并运行 但无法存档该应用程序 归档失败并出现以下错误 命令 Applications Xcode app Contents Developer Toolchains
  • 关闭依赖项的默认功能

    我有一个依赖链 最终依赖于可选地在已弃用的库上 具体来说 我想使用间接依赖于 rustc serialize 的 nalgebra 如下所示 nalgebra gt alga gt num complex gt 可选默认值 rustc se
  • 与多处理错误的另一个混淆是,“模块”对象没有属性“f”

    我知道之前已经回答过这个问题 但似乎直接执行脚本 python filename py 不起作用 我在 SuSE Linux 上安装了 Python 2 6 2 Code usr bin python coding utf 8 from m
  • Spark 作业在 YARN 模式下失败

    我有一个用 Scala 编写的 Spark 程序 它从 HDFS 读取 CSV 文件 计算新列并将其保存为 parquet 文件 我正在 YARN 集群中运行该程序 但每次我尝试启动它时 执行程序都会在某个时候失败并出现此错误 您能帮我找出
  • 如何验证nginx是否正在运行?

    After 运行 ASP NET vNext 项目 http xameeramir github io asp net 5 ubuntu linux 在我的本地机器上我试图弄清楚如何运行它nginx https www nginx com
  • 绑定 elementname 究竟是如何工作的?

    我记得几周前读过 它有时在模板内不起作用 我最近尝试在两个不同的窗口中绑定东西 但它找不到名称声明 所以我假设它是本地的命名空间类 只需通过设置 datacontext 来绑定 然而 我真的很好奇什么时候能够使用绑定元素名 什么时候不能使用
  • __cxa_pure_virtual 的目的是什么?

    在使用 avr gcc 编译时 我遇到了如下链接器错误 undefined reference to cxa pure virtual 我发现了其中指出 The cxa pure virtualfunction 是一个错误处理程序 在调用纯
  • 搜索所有网络上的设备

    我想实现一个代码 通过它我可以列出网络上连接的 upnp 兼容媒体渲染器设备 我用谷歌搜索了这个并找到了以下代码扭曲的网站 https twistedmatrix com documents current core howto udp h
  • 使用 Java 将数据写入 Google Sheets

    我需要将收到的所有反馈放入 Google 表格中 我正在关注这个article https www baeldung com google sheets java client这样做 但问题是 如果我按照这篇文章进行操作 每次需要将某些内容
  • SharedPreferences.edit() 没有相应的 commit() 或 apply() 调用

    我正在将 SharedPreferences 用于我的应用程序的介绍滑块 但是 我在这一行收到错误 class PrefManager private SharedPreferences pref private SharedPrefere
  • Jquery fadeIn 导致滚动顶部,我该如何解决?

    我对 jQuery fadeIn 或 fadeOut 方法有疑问 我建立了一个文章旋转器 一切正常 但是当页面滚动到底部并且文章旋转时出现问题 fadeIn 或fadeOut 方法导致滚动到文章位置 我认为这些方法改变了body的css t
  • 如何在后台线程中创建和使用WebBrowser?

    如何在后台 STA 线程中创建 System Windows Forms WebBrowser 我尝试使用这样的代码 var tr new Thread wbThread tr SetApartmentState ApartmentStat
  • 在控制台上用Java打印金字塔

    我怎样才能像这样在Java中打印金字塔 1 23 456 78910 我当前的代码如下所示 public class T public static void main String args int i j num 1 int n Int
  • 使用spring构建Web项目时如何修复MojoFailureException

    最近我使用spring STS和roo 1 2 0 M1来构建一个web项目 我设置了 jpa 并创建了一个具有某些字段的实体 并为该实体创建了一个存储库和一个服务层 然后当我执行测试时 它给出了以下错误 roo gt perform te
  • MongoDB 查询速度过慢,即使查询很简单并且与索引对齐

    我正在运行一个 MongoDB 服务器 这实际上就是它运行的全部内容 该服务器拥有 64GB RAM 和 16 个内核 以及 2TB 硬盘空间 文档结构 数据库有一个集合domains拥有大约 2000 万份文档 每个文档中都有相当多的数据