我正在为博客网络应用设计架构。在主页上,我必须显示仅显示标题,副标题,日期和时间的帖子列表。每篇文章的作者。点击列表中的项目后,我必须显示相应的完整帖子 为此,我使用2个模式(postInfo & postBody),这样我的文档在与模式对应的集合中的大小几乎相同。这会在某种意义上改善性能吗?让我们说当我查询帖子列表时,MongoDB会快速完成操作,因为文档大小几乎相同。
答案 0 :(得分:1)
简单和简单:否。索引保存具有特定索引键值的文档的起始位置。当搜索索引(btree)并且我键入匹配时,MongoDB跳转到数据文件中的所述位置,读取文档长度标题,分配相应的缓冲区,然后读取文档的二进制形式并解组它。如您所见,文档大小唯一重要的是分配内存。一旦。在数据不在内存工作集中的情况下。
现在让我们假设您没有索引。如何找到匹配的文档?嗯,实际上非常简单:对整个集合的每个文档重复相同的过程 - 一个大规模的操作,其中缓冲区的分配简单地因为它甚至是数量级(是,复数)而不是甚至从SSD读取
如何建模?答案非常简单:它是一对一的关系,所以它应该写在一个文档中。
答案 1 :(得分:1)
MongoDB是否会快速完成操作(查询),因为文档大小几乎相同。
没有。文档大小相似性对查询性能没有任何影响。平均文档大小 - 是(获取较大的文档显然会更昂贵),但不是大小相似。
要做到这一点,我使用2个架构(blogInfo& blogBody)
我认为您的意思是postInfo
和postBody
。在这种情况下,不要这样做。它只会使您的代码复杂化。将所有发布数据存储在同一文档中。当你不需要身体(主页上的渲染索引)时,不要取得它。如果您不知道,mongodb支持获取文档字段的子集(例如,标题和摘录)。
当集合中出现高流失时,文档大小相似性很重要:文档经常被删除和插入。在这种情况下,大小相同的文档将减少数据文件的碎片。对于典型的博客,情况并非如此。