MongoDB:文档大小会影响查询性能吗?

2024-03-26

假设一款手机游戏由 MongoDB 数据库支持,其中包含User包含数百万份文档的集合。

现在假设必须与用户关联的几十个属性 - 例如一个数组_id的值Friend文件,他们的用户名,照片,一系列_id的值Game文件、上次登录日期、游戏货币数量等等等等。

我担心的是,在数百万个用户文档上创建和更新大型且不断增长的数组是否会增加每个用户文档的“权重”,和/或增加整个系统的速度。

我们可能永远不会超过每个文档 16mb,但我们可以有把握地说,如果我们直接存储这些不断增长的列表,我们的文档将增大 10-20 倍。

问题:这在 MongoDB 中也是一个问题吗?如果使用投影和索引等正确管理查询,文档大小是否重要?我们是否应该积极修剪文档大小,例如引用外部列表与嵌入列表_id直接取值?

换句话说:如果我想要一个用户的last_login值,将是一个仅投影/选择的查询last_login如果我的领域有什么不同User文档大小是 100kb 还是 5mb?

或者:如果我想查找具有特定属性的所有用户last_login值,文档大小会影响此类查询吗?


重新表述这个问题的一种方法是,如果每个文档为 16mb 与 16kb,则 100 万个文档查询是否需要更长的时间。

如果我错了,请纠正我,根据我自己的经验,文档大小越小,查询越快。

我对 500k 文档和 25k 文档进行了查询,25k 查询明显更快 - 快了几毫秒到 1-3 秒。在生产过程中,时间差异大约是 2 倍到 10 倍。

文档大小发挥作用的一方面是查询排序,在这种情况下,文档大小将影响查询本身是否运行。我曾多次尝试对 2k 份文档进行排序,但已达到此限制。

这里有一些解决方案的更多参考:https://docs.mongodb.org/manual/reference/limits/#operations https://docs.mongodb.org/manual/reference/limits/#operations https://docs.mongodb.org/manual/reference/operator/aggregation/sort/#sort-memory-limit https://docs.mongodb.org/manual/reference/operator/aggregation/sort/#sort-memory-limit

归根结底,受苦的还是最终用户。

当我尝试修复导致性能缓慢到无法接受的大型查询时。我通常发现自己使用数据子集创建一个新集合,并使用大量查询条件以及排序和限制。

希望这可以帮助!

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

MongoDB:文档大小会影响查询性能吗? 的相关文章

  • 如何指定 GridFS 存储桶?

    这是我的 express js 代码 用于将文件上传和下载到 GridFS var fs require fs var gridStream require gridfs stream var mongoose require mongoo
  • Mongo查询具有两级未知父键的嵌套字段值

    我们使用 MongoDB 来存储时间序列传感器数据 类似于设计中所示的模式https www mongodb com blog post schema design for time series data in mongodb https
  • mongodb 中的 $size 与条件

    我正在使用聚合从两个集合中获取值 一个是文件夹 另一个是检查 我正在获取所有数据 但检查计数为 0 我的代码 mongo folder aggregate lookup from inspections localField id fore
  • Mongodb 中的读自己写的一致性

    首先 这是Pymongo 文档 http api mongodb org python current examples requests html highlight read 20you 20own 20write 默认情况下 当线程首
  • 更新插入不适用于 updateOnebulkWrite v3.4

    我正在尝试批量写入一些更新 除了更新插入之外的所有内容都正常 我的代码完美地更新了所有项目 并且没有给出任何错误 这里的问题是批量插入updateOne没有更新插入 这是我的代码的未经测试和缩短的示例 因此您可能会发现一些语法错误 希望您明
  • Nodejs + mongodb:如何查询 $ref 字段?

    我将 MongoDB 与 Nodejs REST 服务一起使用 该服务公开了存储在其中的数据 我有一个关于如何查询使用 ref 的数据的问题 这是一个对象的示例 其中包含对花药集合中另一个对象 详细信息 的引用 id ObjectId 59
  • RoboMongo:不显示所有文档

    当我打开集合时 它仅显示前 50 个文档 而不是全部文档 如何使 RoboMongo 显示集合中的所有文档 最好是自动 罗博蒙戈结果 https i stack imgur com K5fn8 png 2019 年 12 月 6 日更新 最
  • java.lang.IllegalArgumentException:预期唯一结果或 null,但得到多个! - Spring Data Mongo

    我在用着Spring Boot v2 2 2 RELEASE and Spring Data MongoDB 在此示例中 我正在查找按部门代码执行组并获取该组下的所有员工 样本数据 firstName Laxmi lastName Para
  • MongoDB - 解释特定的解释输出

    我使用的是 MongoDB 版本 2 4 8 test 2014 03 25 14 42 13 0 gt gt gt db users getIndexes v 1 key id 1 ns test users name id v 1 ke
  • Perl Mongo 查找对象 ID

    你会认为这是一件简单的事情 我有一个集合中的对象 ID 列表 我想根据对象 ID 获取单个记录 谷歌搜索过 但没有任何帮助 所以我有对象 ID 5106c7703abc120a04070b34 my client MongoDB Mongo
  • 错误:子进程失败,退出,错误号 48

    错误 48 对我来说是一个新错误 我在尝试输入 mongo 时也遇到错误 Error network error while attempting to run command isMaster on host 127 0 0 1 2701
  • 使用 MongoDB docker 镜像停止虚拟机而不丢失数据

    我已经在 AWS EC2 上的虚拟机中安装了官方的 MongoDB docker 映像 并且数据库上已经有数据 如果我停止虚拟机 以节省过夜费用 我会丢失数据库中包含的所有数据吗 在这些情况下我怎样才能让它持久 有多种选择可以实现此目的 但
  • MongoDB BSON 文档中的键顺序重要吗?

    我知道某些推荐需要对 hashmap 字典进行排序 但是 MongoDB 中的实际 BSON 文档重要吗 索引是否仍然有效 E g db people ensureIndex LName 1 FName 1 它对两者都有效吗 LName a
  • 从数组中查找前 N 个条目

    我的收藏结构如下 id 1 Trips EndID 5 Tripcount 12 EndID 6 Tripcount 19 id 2 Trips EndID 4 Tripcount 12 EndID 5 Tripcount 1
  • PowerShell 与 MongoDB C# 驱动程序方法不兼容?

    由 C 泛型引起的最新 MongoDB 驱动程序的问题 Cannot find an overload for GetCollection and the argument count 1 我可能可以使用其他没有泛型的 GetCollect
  • 将字符串数组转换为对象 Id 数组

    我有一个字符串数组 let stringObjectIdArray fssdlfsd343 43434234242 342424242 我想使用 mongoose 类型将字符串数组更改为对象 Id 数组 但它不起作用 它仅适用于字符串而不是
  • mongodb - 检索数组子集

    看似简单的任务对我来说是一个挑战 我有以下 mongodb 结构 services TCP80 data status 1 delay 3 87 ts 1308056460 status 1 delay 2 83 ts 1308058080
  • 如何对 mongodb/mongoid 脚本进行基准测试,以比较两种不同的查询技术

    您对如何测试两种不同的 mongoid mongodb 查询实现的性能有什么建议吗 要比较的实现与以前的相关 问答 https stackoverflow com questions 10121977 extracting modellin
  • 使用 dockerfile 在 docker 中安装 mongodb 驱动

    我有一个 mongodb docker 容器 我需要另一个安装了 php 和 apache 的 docker 容器 我想从这个容器运行一个 php 脚本并将一些数据发送到 mongodb 容器以将数据保存在 mongodb 数据库中 所以我
  • i18Next - NodeJS - 如何在不重新加载服务器的情况下更改翻译

    我正在使用 NodeJS 的 i18next 包来启用翻译 我将它作为标准 并为每个语言 国家对使用一个 json 文件 我想构建一个管理页面来编辑翻译 而无需深入研究代码 那么 如何 重新加载 管理员编辑过的 json 文件 而无需重新启

随机推荐

  • 如何更改 WPF 中绑定选项的默认值?

    在我当前的项目中 我使用了几个文本框控件 其内容由来自数据库的对象填充 该对象使用验证来验证文本的正确插入 当我想显示验证错误 即文本有很多字符 时 我必须向文本属性添加一些绑定选项 如下行所示
  • 删除 json_encode() 中的双引号

    我想删除 json encode 中的双引号 这是我的代码
  • 如何使用 Python 多线程处理 MySQL 连接

    我有一个主要的 Python 脚本 它连接到 MySQL 数据库并从中提取一些记录 根据返回的结果 它会启动与抓取的记录一样多的线程 类实例 每个线程都应该返回数据库并通过将一个状态标志设置为不同的状态 进程已启动 来更新另一个表 为了实现
  • Laravel 将数据透视表附加到具有多个值的表

    背景 我正在创建一个围绕食物过敏的数据库 并且食物和过敏之间存在多对多的关系 还有一个枢轴值称为severity其中有一个数字代表对该食品过敏的严重程度 这个链接表看起来像这样 food id allergy id severity 1 1
  • 指定与 Chef Solo 一起运行哪些食谱

    我正在使用 Chef solo 在本地测试我的食谱 但我希望能够只运行我正在测试的食谱 目前 chef solo 似乎将运行在solo rb 中指定的cookbooks 目录中的所有cookbook 我已经在 json 属性文件中指定了运行
  • 通过 jQuery ajax 调用将值列表传递给 django 视图

    我正在尝试使用 jQuery ajax 调用将数值 ids 列表从一个网页传递到另一个网页 我不知道如何传递和读取列表中的所有值 我可以成功发布和读取 1 个值 但不能成功发布和读取多个值 这是我到目前为止所拥有的 jQuery var p
  • Bootstrap 输入组插件对齐问题

    我的输入组插件与我的输入文本框不对齐 我做错了什么 div class form group div
  • 我无法让 phpseclib 工作

    我想做的事 我想要upload download一个文件通过sftp using php The phpseclib library看起来很有前途 我已经做了什么 我将composer json更改为 require nicolab php
  • 如何在Azure中创建或使用本地文件夹?

    我需要从 SFTP 服务器下载文件 下载的文件存储到本地文件夹 D Data tempData csv 我必须从本地文件读取数据并在我的应用程序中使用以进行其他数据操作 此作业是使用 Azure Web 作业中的 Web 挂钩计划程序创建的
  • 我的“zipLatest”运算符是否已经存在?

    关于我自己写的一个运算符的快速问题 请原谅我可怜的大理石图表 zip aa bb cc dd ee ff gg 11 22 33 44 55 a1 b2 c3 d4 e5 combineLatest aa bb cc dd ee ff gg
  • 使用 f:convertNumber 时设置小数点分隔符

    我想知道如何在 JSF 应用程序上设置默认的小数点分隔符 我有一些
  • NodeJS UDP 多播如何

    我正在尝试将 UDP 多播数据包发送到 230 185 192 108 以便每个订阅的人都会收到 有点卡住了 我相信它的广播正确 但似乎无法从任何客户端获取任何信息 Server var news Borussia Dortmund win
  • 如何将多个参数传递给 Scrapy 蜘蛛(不再支持使用多个蜘蛛运行“scrapy scrapy”时出现错误)?

    我想将多个用户定义的参数传递给我的 scrapy spider 所以我尝试遵循这篇文章 如何在 scrapy 蜘蛛中传递用户定义的参数 https stackoverflow com questions 15611605 how to pa
  • CMTime 和 AVFoundation 中单帧的移动

    我正在尝试使用 AVFoundation 播放视频 我使用以下代码作为将播放前进一帧的按钮 它间歇性地工作 在某些执行中它会做正确的事情并前进一帧 但大多数时候我必须按按钮 3 或 4 次才能前进一帧 这让我认为这是某种精度问题 但我无法弄
  • 为什么单函数访问器似乎被认为是坏习惯?

    我经常看到 即在 Slim 框架内 单一函数访问器风格 如下面的 1 已弃用 取而代之的是经典的 Java ish 2 函数访问器 get set 如下面的 2 就我个人而言 我更喜欢更少的代码行 在 1 中 和更少的输入 get set
  • Java多线程数据库访问[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对于多线程 Java 应用程序来说 确保所有线程同步访问数据库的最佳解决方案是什么 例如 每个线程代表单独的事务 并且首先检查数据库的
  • 使用 FFT 进行 Matlab 模板匹配

    我正在努力解决 Matlab 中傅立叶域中的模板匹配问题 这是我的图片 艺术家是 DeviantArt 上的 RamalamaCreatures 我的目标是在负鼠的耳朵周围放置一个边界框 就像这个例子 我使用normxcorr2执行模板匹配
  • Stripe webhook 签名失败 - Stripe.net

    我正在尝试使用 Jayme Davis 的 C 库 Stripe net 来实现 stripe webhook 我已经在条带仪表板中设置了测试端点并生成了秘密 端点命中良好 并将使用 StripeEventUtility ParseEven
  • Django Celery 内存未释放

    在我的 django 项目中 我有以下依赖项 Django 1 5 4 django celery 3 1 9 amqp 1 4 3 海带 3 0 14 librabbitmq 1 0 3 按照建议https stackoverflow c
  • MongoDB:文档大小会影响查询性能吗?

    假设一款手机游戏由 MongoDB 数据库支持 其中包含User包含数百万份文档的集合 现在假设必须与用户关联的几十个属性 例如一个数组 id的值Friend文件 他们的用户名 照片 一系列 id的值Game文件 上次登录日期 游戏货币数量