【问题标题】:Do having documents of almost same size inside a collection in MongoDB improves the performance?在 MongoDB 的集合中拥有几乎相同大小的文档会提高性能吗?
【发布时间】:2015-12-20 23:10:00
【问题描述】:

我正在为博客网络应用程序设计架构。在主页上,我必须显示仅显示每个帖子的标题、副标题、日期和作者的帖子列表。单击列表中的项目时,我必须显示相应的完整帖子。
为此,我使用了 2 个模式(postInfo & postBody),这样我的文档在与模式对应的集合中可以具有几乎相同的大小。这会在某种意义上提高性能吗?假设当我查询帖子列表时,MongoDB 会快速完成操作,因为文档大小几乎相同。

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    MongoDB 是否会快速完成操作(查询),因为文档大小几乎相同。

    没有。文档大小相似性对查询性能没有任何影响。平均文档大小 - 是的(获取更大的文档显然会更昂贵),但不是大小相似度。

    为此,我使用了 2 个架构(blogInfo 和 blogBody)

    我假设您的意思是 postInfopostBody。在这种情况下,不要这样做。它只会使您的代码复杂化。将所有发布数据存储在同一个文档中。当您不需要正文(在主页上呈现索引)时,请不要获取它。如果您不知道,mongodb 支持获取文档字段的子集(例如标题和摘录)。

    当集合中的流失率很高时,文档大小的相似性很重要:文档被频繁地删除和插入。在这种情况下,相同大小的文档将减少数据文件的碎片。对于您的典型博客而言,情况并非如此。

    【讨论】:

    • 谢谢.. 正如@Markus W Mahilberg 提到的,MongoDB 使用文档的长度属性为要读取的文档分配一个缓冲区。所以,如果我选择不接收主页的正文,分配的缓冲区将是小尺寸还是相同尺寸。如果它是相同尺寸,那么它肯定会影响服务器的性能。如果我是,我很抱歉太天真了..我是新手
    • @Vishal:你是新手,不需要担心这些低级数据库实现细节,更不用说围绕它们设计你的应用程序了。出于所有实际目的,不存在性能损失。
    • @Vishal:所有性能优化都应由硬数字支持。所以我建议你构建这两种模式,衡量它们的性能并选择一个。
    • 有什么工具可以帮助生成硬数字
    • @Vishal:不了解 node.js 技术。一定有什么。
    【解决方案2】:

    简单明了:不。索引保存文档的起始位置,索引键具有特定值。当搜索索引(btree)并且我的键匹配时,MongoDB 跳转到数据文件中的所述位置,读取文档长度标题,分配相应的缓冲区,然后读取文档的二进制形式并将其解组。如您所见,文档大小唯一重要的是分配内存。一次。在数据不在内存工作集中的情况下。

    现在让我们假设您没有索引。如何找到匹配的文档?好吧,实际上很简单:对整个集合的每个文档都重复相同的过程 - 一个大规模的操作,其中缓冲区的分配只是苍白,因为它甚至比从 SSD 读取速度快几个数量级(是的,复数) .

    如何建模?答案很简单:它是一对一的关系,所以应该写在一个文档中。

    【讨论】:

    • 非常感谢。任何参考您的答案将不胜感激
    猜你喜欢
    • 2014-07-13
    • 2012-01-29
    • 1970-01-01
    • 2016-01-25
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多