即使添加索引后,mongodb group by 仍很慢

2024-06-18

我有一个简单的集合:

{
    "_id" : ObjectId("5033cc15f31e20b76ca842c8"),
    "_class" : "com.pandu.model.alarm.Alarm",
    "serverName" : "CDCAWR009 Integration Service",
    "serverAddress" : "cdcawr009.na.convergys.com",
    "triggered" : ISODate("2012-01-28T05:09:03Z"),
    "componentName" : "IntegrationService",
    "summary" : "A device which is configured to be recorded is not being recorded.",
    "details" : "Extension<153; 40049> on CDCAWR009 is currently not being recorded
    properly; recording requested for the following reasons: ",
    "priority" : "Major"
}

馆藏中将有大约数百万份此类文件。我正在尝试按服务器名称进行分组并获取所有服务器名称的计数。从 RDBMS 查询的角度来看,听起来很简单。

The query that I have come up with is 
    db.alarm.group( {key: { serverName:true }, reduce: function(obj,prev) { prev.count++ }, initial: { count: 0 }});

另外,我在 serverName 上添加了索引。

> db.alarm.getIndexes()
[
        {
                "v" : 1,
                "key" : {
                        "_id" : 1
                },
                "ns" : "test.alarm",
                "name" : "_id_"
        },
        {
                "v" : 1,
                "key" : {
                        "serverName" : 1
                },
                "ns" : "test.alarm",
                "name" : "serverName_1"
        }
]

但是,13 秒后我在 mongodb 中收到响应。而在sql server中,类似的查询在没有索引的情况下也会在4秒内返回。

我有什么遗漏的吗?

感谢期待。


从您编写的查询中可以看出,2.0 中的这种类型的聚合需要您运行 Map/Reduce。 MongoDB 上的 Map/Reduce 有一些性能损失,这些损失已在 SO 中涵盖before https://stackoverflow.com/a/3951871/1148648- 基本上,除非你能够跨集群并行化,否则你将通过 Spidermonkey 运行单线程 javascript - 这不是一个快速的提议。由于您没有选择性,索引并没有真正的帮助 - 您只需要扫描整个索引以及潜在的文档。

随着 2.2 即将发布(在撰写本文时目前处于 rc1 版本),您有一些选择。这聚合框架 http://docs.mongodb.org/manual/reference/aggregation(这是原生的,不是基于 JS 的 Map/Reduce)在 2.2 中引入有一个内置的集团运营商 http://docs.mongodb.org/manual/reference/aggregation/#_S_group是专门为了加速 MongoDB 中的此类操作而创建的。

我建议尝试一下 2.2,看看你的分组性能是否有所提高。我认为它看起来像这样(注意:未经测试):

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

即使添加索引后,mongodb group by 仍很慢 的相关文章

随机推荐

  • C 语言的符号表

    我目前正在开发一种执行模式匹配的静态分析工具 我在用Flex https github com westes flex生成词法分析器 我编写了代码来管理符号表 我不太有经验C 所以我决定将符号表实现为线性链表 include
  • Java 相当于 C# 的 async/await?

    我是一名普通的 C 开发人员 但偶尔也会使用 Java 开发应用程序 我想知道 Java 中是否有相当于 C async await 的东西 简单来说 java 相当于 async Task
  • 有关于 MSBuild 脚本的好的教程吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个 Web 应用程序项目 我需要创建一个构建脚本 我可以从我的 Cruisecontrol
  • Common Lisp 包中的外部符号与内部符号

    在 Common Lisp 包的上下文中它们之间有什么区别 我正在阅读 SLIME 文档 一些命令广泛提到了这一点 语法是什么 你的符号export是外部的 in package cl user defpackage str use cl
  • Lcom/google/firebase/FirebaseApp 类中没有虚拟方法 zzbqo()Z;或其超类(“com.google.firebase.FirebaseApp”的声明

    在我的 Android 应用程序中 编译应用程序时出现错误 我正在最新的 android studio 中工作 并使用 Firebase UI Auth 和 Firebase 数据库 所有版本在应用程序级等级文件中都相同 那么为什么我收到此
  • 使用pdfbox从pdf中提取图像

    我正在尝试使用 pdfbox 从 pdf 中提取图像 示例 pdfhere http www ignou ac in upload questionpaper CS 74 PDF 但我只得到空白图像 我正在尝试的代码 public stat
  • 如何包装 Google 图表上的图例

    我需要 Google 图表的图例在超出容器区域时自动换行 换行 我不想要滚动按钮 因为它不够方便 使用可用的自定义选项 似乎无法完成 还有其他办法吗 使用图例的 maxLines 属性 IE options legend position
  • 在 Java/Android 中查找 UTF-8 字符串中的字符数

    我试图找出字符串以 UTF 8 存储时的长度 我尝试了以下方法 String str Charset UTF8 CHARSET Charset forName UTF 8 byte abc str getBytes UTF8 CHARSET
  • 简单的数据框重塑

    我刚刚从长时间的写作中断中回到 R 并且在记住如何重塑数据方面遇到了一些实际问题 我知道我想做的事情很容易 但出于某种原因 我今晚很愚蠢 并且将自己与融化和重塑混淆了 如果有人能快速指出我正确的方向 我将不胜感激 我有一个这样的数据框 pe
  • R - 在浏览器中获取帮助而不是内置的 R 帮助程序

    我见过 R help 的两种不同行为 当你输入 density例如 帮助已在您的默认浏览器中打开 帮助在内置 R 帮助程序中打开 R 中的窗口 我目前有第二种行为 但我想在浏览器中打开帮助 我可以轻松地在这两种行为之间切换吗 无需重新安装
  • 如何将 int.TryParse 与可为空的 int 一起使用? [复制]

    这个问题在这里已经有答案了 我正在尝试使用 TryParse 来查找字符串值是否为整数 如果该值为整数 则跳过 foreach 循环 这是我的代码 string strValue 42 if int TryParse trim strVal
  • 指令可以从父作用域中删除自身吗

    假设我有以下代码 div div div div 我的自定义指令有一个独立的范围 定义为 app directive customDirective function log return restrict E templateUrl te
  • 合并 BPM 图表的最佳实践

    我们在 Java 环境中使用 Alfresco 活动图 这些图是有版本的 我们确实使用 GIT 我们经常会遇到合并分支的合并冲突 解决这个问题确实很痛苦 因为我们必须比较文件的文本内容来检查差异 有时 重新应用更改比合并更轻松 是否有合并此
  • 制作适合移动设备的网站的最佳方法是什么?

    完全用与技术无关的术语来说 制作适合移动设备的网站的最佳方法是什么 也就是说 我想创建一个可以在普通计算机上运行但也有移动版本页面的网站 我应该重写每一页吗 这些页面可能会有不同的功能 那么我应该重写后端代码吗 它应该是具有相同数据库的实际
  • Angular 2 管道状况良好

    Angular 2 是否可以在一定条件下应用管道 我想做这样的事情 variable text variable value SomePipe OtherPipe 如果不是 达到这种效果的首选方法是什么 您需要稍微更改一下语法 variab
  • Firefox 背景图像在切换标签后消失

    我在渲染背景图像时遇到一些非常奇怪的问题 我不确定这是 Firefox 的错误还是我的错 每次我在 Firefox 中打开项目站点时 所有背景图像都会正确加载并显示 当我切换到另一个选项卡并在一段时间后切换回来后 所有背景图像都消失了 我检
  • 如何从 ASP.net 网站写入 OutputDebugString?

    我需要从网站上的代码输出一些调试信息 我怎样才能打电话OutputDebugString来自 ASP net 网站 并将其显示给运行 DbgView 的用户 Note 网站不支持System Diagnostics Trace TraceW
  • rmarkdown:悬挂缩进引用

    rmarkdown 包使用 biblatex 默认使用芝加哥作者日期样式 我想在参考文献中使用悬挂缩进 就像 biblatex chicago 包一样 这个建议 https groups google com forum msg pando
  • Swashbuckle 在 ASP.NET Core 中失败并出现 NotSupportedException 异常

    我跟着这个关于如何在我的 asp net core 2 2 项目中添加 swashbuckle 当我运行该项目时 我收到以下错误 处理请求时发生未处理的异常 NotSupportedException HTTP 方法 GET 和路径 id
  • 即使添加索引后,mongodb group by 仍很慢

    我有一个简单的集合 id ObjectId 5033cc15f31e20b76ca842c8 class com pandu model alarm Alarm serverName CDCAWR009 Integration Servic