MongoDB聚合查询性能提升

2024-05-05

我最近开始将数据从 Microsoft SQL Server 转移到 MongoDB 以获得可扩展性。就移民而言一切都很好。

该文档有 2 个重要字段:customer、timestamphash(年月日)。

我们在安装 MongoDB 的 Azure Linux 中仅导入了 7500 万条数据。 在两个字段上添加复合索引后,我们遇到以下问题:

对于 300 万条数据(过滤后),需要 24 秒才能按 customerId 计数完成聚合组。 SQL Server 在不到 1 秒的时间内给出相同数据的结果。

您认为 Casandra 会是更好的解决方案吗?我们需要大量数据的查询性能。

我尝试了磁盘写入,为虚拟机提供了更多内存。什么都不起作用。

Query:

aaggregate([
{ "$match" : { "Customer" : 2 } }, 
{ "$match" : { "TimestampHash" : { "$gte" : 20160710 } } }, 
{ "$match" : { "TimestampHash" : { "$lte" : 20190909 } } }, 
{ "$group" : { "_id" : { "Device" : "$Device" }, "__agg0" : { "$sum" : 1 } } }, 
{ "$project" : { "Device" : "$_id.Device", "Count" : "$__agg0", "_id" : 0 } }, 
{ "$skip" : 0 }, 
{ "$limit" : 10 }])

Update:我使用“allowDiskUse:true”,问题得到解决。过滤 3M 数据的时间缩短至 4 秒。


我遇到过一个之前类似的问题,在这个问题中 https://stackoverflow.com/questions/53169048/mongodb-index-optimization-perfomance-during-aggregation-stage,说实话,我猜 Cassandra 在你的特定情况下更好,但问题是关于 Mongo 聚合查询优化,对吧?

就目前而言,我的一个集合有超过 3M+ 文档,如果正确构建索引,聚合查询不应该花费 24 秒。

  1. First of all, check out the index usage via Mongo Compass. Does Mongo actually using it? If your app spam queries to DB and your index have 0 usage (as in example below) than, as you already guessed it, something wrong with your index. enter image description here
  2. 第二件事是,使用explain方法 (这个文档会帮助你 https://docs.mongodb.com/manual/reference/operator/meta/explain/),查看有关您的更多信息query.

  3. 对于第三个:索引字段排序很重要。例如,如果您有$match有 3 个字段的阶段,您按字段请求文档:

{ $match: {a_field:a, b_field:b, c_field:c} }

那么你应该构建compound以完全相同的顺序对 a、b、c 字段进行索引。

总是存在某种数据库架构问题。我强烈建议你不要stockpile一个集合中的所有数据。使用{timestamps:true}插入时(它创建了两个字段,例如createdAt: and updatedAt:

        {
            timestamps: true
        }

在您的架构中,将旧时/过时的数据存储在不同的集合和使用中$lookup 聚合法 https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/对于他们来说,当你确实需要与他们一起操作时。

希望您能在我的回答中找到有用的东西。

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

MongoDB聚合查询性能提升 的相关文章

  • UITableView 由于阴影和边框而滞后

    我有以下代码来向 UITableViewCell 的背景添加边框颜色和阴影 我的问题是这段代码会导致 tableView 本身出现巨大的滞后 请你告诉我如何优化我的代码 防止 UITableView 的滞后 if cell viewWith
  • 如果 jQuery 脚本是在所有页面 HTML 之后加载的,那么它们还需要 $(document).ready 吗?

    如果我在所有页面 HTML 下方加载 jQuery 脚本 我是否还需要等待 document ready能够使用jQuery来查找页面中的元素 否 因为文档已经加载 Dom 从上到下加载 我个人喜欢把所有的js放在页面底部而不是放在头部 然
  • MongoDB 支持浮点类型吗?

    我正在将 mysql 数据库迁移到 mongodb 但我读过 MongoDb 数据类型 然后没有引用浮点类型 如 float double decimal 我如何在 mysql 模式中拥有一些带有十进制类型的字段 我该怎么做或我能做什么 M
  • SSL 速度:128 位与 256 位

    我决定使用 SSL 加密我的整个网站 即使实际上只有部分网站是必要的 最终结果是该网站现在有点慢 所以 我的问题是 我是否应该只加密网站的会员部分 请记住我在首页上有登录表单 我是否应该将加密降低到 128 位 如果站点总体较小 速度差异是
  • 为什么乘法比除法便宜?

    我最近编写了一个 Vector 3 类 并将我的 normalize 函数提交给朋友审阅 他说这很好 但我应该尽可能乘以倒数 因为在 CPU 时间上 乘法比除法便宜 我的问题很简单 这是为什么 从硬件可以更轻松地实现的基本运算的角度来考虑
  • 快速检查网络速度

    我想从我的 swift 应用程序检查网络速度 我发现很多帖子描述了Reachability特别是查找连接是否可达以及是 WIFI 连接还是 WWAN 连接的方法 我的问题 是否可以检测 WWAN 的类型 2G 3G 4G 你可以用以下命令检
  • 如何使用 spring data mongodb mongotemplate 插入嵌入文档

    我需要在现有的事件文档中插入一个新的轨道 下面是我的类结构 class Event String id List
  • 为什么反射会减慢Android手机的速度

    我多次读到反射会降低手机性能 这有多真实 例如 在我的例子中 我从 Web 服务获取一些参数 这些参数与我在 Android 应用程序中的类的参数同名 所以我只是使用java字段和反射设置这些参数的值 它似乎并没有降低性能 有人可以向我解释
  • 使用 mgo 驱动程序进行 mongo 聚合查询

    我在 mongodb 中有以下查询 db devices aggregate match userId v73TuQqZykbxFXsWo state true project userId 1 categorySlug 1 weight
  • 无法启动 MongoDB:Windows 中的系统错误 1067

    在 Windows Server 2008 R2 上设置 MongoDB 服务后 出现此错误 C mongodb bin gt net start MongoDB The Mongo DB service is starting The M
  • 如何在 Postgresql 中将 GIST 或 GIN 索引与 hstore 列一起使用?

    我正在使用 postgresql 9 3 的 hstore 我正在尝试对 hstore 列使用索引就像文档所述 http www postgresql org docs 9 3 static hstore html 我的问题是索引似乎没有被
  • 索引在 NOT IN 或 <> 子句中起作用吗?

    我读过 至少 Oracle 数据库中的普通索引基本上是 B 树结构 因此存储处理适当根节点的记录 小于 根的记录被迭代地存储在树的左侧部分 而 大于 根的记录被存储在右侧部分 正是这种存储方法有助于通过树遍历实现更快的扫描 因为深度和广度都
  • PHP使用c++扩展会更快吗?

    我现在正在构建一个推荐系统 一个网站 我想使用PHP作为脚本语言 推荐系统可能会进行复杂的矩阵计算或其他操作 考虑到性能 我想用C 来做矩阵计算或者其他复杂的计算 所以我需要PHP调用C 函数 获取结果并进行其他处理 我知道我可以使用 PH
  • 如何有效地扫描每次迭代交替的 2 位掩码

    给定 2 个位掩码 应交替访问 0 1 0 1 我尝试获得运行时高效的解决方案 但找不到比以下示例更好的方法 uint32 t mask 2 uint8 t mask index 0 uint32 t f tzcnt u32 mask ma
  • 如何处理多个连接

    我有一个复杂的查询 需要总共 4 个表中的字段 内部联接导致查询花费的时间比应有的时间长得多 我已经运行了一个 EXPLAIN 语句 其可视化结果附在下面 这是我的查询 SELECT pending corrections correcte
  • 每个 mmap/access/munmap 两次 TLB 未命中

    for int i 0 i lt 100000 i int page mmap NULL PAGE SIZE PROT READ PROT WRITE MAP ANONYMOUS MAP PRIVATE 1 0 page 0 0 munma
  • 目录索引不起作用

    我使用 apache2 来托管一个网站 我的目录中有index html和index php 我打开 etc apache2 apache2 conf并添加一行 DirectoryIndex index php index html ind
  • Mongo 正则表达式用于“不匹配”或反向[重复]

    这个问题在这里已经有答案了 我的 mongo 文档都包含一个名为templateName 有一些包含该值的文档 a SystemDefaultTemplate b SystemDefaultTemplate c SystemDefaultT
  • PHP、in_array 和数组中的快速搜索(到最后)

    我对在数组中进行快速搜索的更好方法有疑问 我正在谈论一个特定的情况 假设我有一个数组 L A B C 当我开始时 当程序运行时 L 可能会增长 但到最后 当我进行搜索时 一个可能的原因是 L A B C D E 事实是 当我搜索时 我想要找
  • 在哪里可以找到Python内置序列类型的时间和空间复杂度

    我一直无法找到此信息的来源 无法亲自查看 Python 源代码来确定这些对象是如何工作的 有谁知道我可以在网上找到这个吗 结帐时间复杂度 http wiki python org moin TimeComplexitypy dot org

随机推荐

  • Nginx 中 uwsgi_pass 和 proxy_pass 的区别?

    我在 Nginx 后面运行 uWSGI 并一直在使用proxy pass让 Nginx 访问 uWSGI 切换到有什么好处吗uwsgi pass 如果是这样 那是什么 uwsgi pass使用一个uwsgi协议 proxy pass使用普通
  • Android fill_parent 到 match_parent

    引入 match parent 和弃用 fill parent 背后的原因是什么 因为两者含义相同 此更改不会妨碍向后兼容性吗 使用 match parent 而不是 fill parent 不会使生成的 APK 在旧版本中无法运行 因为在
  • gwt 谷歌应用引擎 HTTP 错误 404

    我在 Eclipse 中使用 google 应用程序引擎创建了一个新的 gwt 项目 但是当我运行该项目时 在浏览器中我收到以下消息 HTTP 错误 404 访问 Test html 时出现问题 原因 NOT FOUND 由码头提供动力 现
  • 多维数组(如 C/C++ 中的数组)是不规则数组的特殊情况吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我和一个哥们讨论了C 和C多维数组是否是不规则数组的特例 一种观点是 多维数组不是参差不齐的数组 因为多维数组的每个元素具有相同的大小 在参差不齐的数
  • IE11 中的 JavaScript 给我脚本错误 1003

    我有一个带有手风琴和一些 javascript 的网站 在 Firefox 中一切正常 但在 IE11 中出现错误 SCRIPT1003 应为 我将其范围缩小到 js 文件中的这段代码 var nmArray new Array funct
  • 如何(如果可能)更改 eclipse(月出主题)中突出显示的搜索结果的颜色选项?

    我已将 Eclipse Kepler SR2 主题更改为 Moonrise 0 8 9 现在 突出显示对象的颜色使结果几乎不可见 我没有找到任何选项来修改文本颜色或背景颜色 我已附加搜索视图 要更改突出显示的行搜索结果 请转到 Window
  • 如何在节点红色中进行http重定向?

    我需要重定向到另一个网址 我正在使用nodered请求一个url 然后获取用户名和密码 在cloudant数据库中检查它们 在发现它们存在之后 我需要重定向到另一个 home 是否有一个节点可以重定向 我尝试使用 http 请求节点 但它只
  • 如何使用 Apache HttpClient 4 获取文件上传的进度条?

    我有以下用于使用 Apache 的 HTTP Client org apache http client 上传文件的代码 public static void main String args throws Exception String
  • 具有水平和垂直组合布局的可折叠树

    我正在尝试在 D3 中创建一个可折叠树 它结合了水平 第一级和第二级 和垂直 3 级 布局 这里有一个jsfiddle http jsfiddle net artemkolotilkin z7tb23Lo 到目前为止我所得到的 除了一件事之
  • 带列的树视图

    我需要为我正在编写的应用程序提供一个多列树视图 我想知道是否有人知道免费工作 在 Vs 2010 中 多列树视图 网络上可以找到许多示例控件 Net 的 TreeViewAdv http sourceforge net projects t
  • Intellij Idea 使用什么 JVM 来启动?

    我是 Eclipse 用户 最近决定尝试 Intellij Idea 我的操作系统是 Ubuntu 12 使用 Eclipse 时 可以通过在 eclipse ini 中指定来轻松选择用于启动 Eclipse 的 JVM http wiki
  • Flutter - LinearGradient 的平滑过渡颜色

    Hellow 是否有解决方案可以创建在起始颜色和结束颜色之间平滑过渡的 LinearGradient new Container decoration new BoxDecoration gradient new LinearGradien
  • C# DLL 运行时错误 - 构建、运行,但在尝试使用 DLL 函数时抛出未处理的异常

    我正在尝试编译所示的示例项目here http www ftdichip com Support SoftwareExamples FTDIChip ID htm对于 C 它必须转换为 VS2010 但效果很好 它会构建 运行 但当它尝试访
  • 在来电期间更改呼叫者的号码

    首先我找到了一种方法 可以在拨出电话时修改被叫号码 我在来电期间尝试对呼叫者的号码进行相同的操作 但我唯一能做的就是读取呼叫者的号码 而不是更改它 有人可以给我提示吗 到目前为止我收到的代码 Bundle b intent getExtra
  • 可以从自定义 LoginModule 访问远程 EJB 吗?

    我发现了一些关于如何编写自定义领域和登录模块的好提示 我想知道是否可以在自定义登录模块中访问远程 EJB 就我而言 我有远程 EJB 提供对用户实体的访问 通过 JPA 我可以使用它们吗 例如通过 EJB 注释 好吧 我自己找到了答案 工作
  • 原始 ssh 连接(低级)

    作为一个小型 大型 业余爱好项目 我开始用 C 制作一个 非常原始的 ssh 2 0 客户端 这是为了探索和更好地理解 DH 并帮助加深我对加密的熟悉程度 根据 RFC 4253 我已经开始这样的初始连接 省略不相关的变量预设等 Rando
  • 捕获的图像总是显示横向并且无法解决setRotate

    这里有很多类似的主题和问题 我关注this https stackoverflow com a 12933632 5257704 但我收到错误 My Code Override protected void onActivityResult
  • 文档 - 如何通过名称获取标签的值?

    我正在使用 Java 的 DOM 解析器来解析 XML 文件 假设我有以下 XML
  • 除了“真实”对象之外,DDD 存储库还可以使用摘要对象吗?

    假设我正在创建一个存储库来存储数字电子书 如下面的界面所示 该存储库将存储书籍的实际文本以及标识书籍的元数据 标题 作者 出版商 ISBN 等 public interface IBookRepository void AddBook Bo
  • MongoDB聚合查询性能提升

    我最近开始将数据从 Microsoft SQL Server 转移到 MongoDB 以获得可扩展性 就移民而言一切都很好 该文档有 2 个重要字段 customer timestamphash 年月日 我们在安装 MongoDB 的 Az