gpt4 book ai didi

mongodb - 当我知道 95% 没有被使用时,如何高效地查询 MongoDB 的文档

转载 作者:行者123 更新时间:2023-12-04 14:12:33 25 4
gpt4 key购买 nike

我收集了大约 5 亿份文件。每次执行查询时,我都会从该集合中收到一个或多个文档。假设每个文档都有一个计数器,每当从查询中返回该文档时,我都会将此计数器加 1。在生产系统运行几个月后,我发现只有 5% 的文档的计数器大于 0(零)。这意味着,95% 的文档未被使用。

我的问题是:基于 95% 的文档未被使用的事实,是否有一种有效的方式来安排这些文档以加快查询执行时间?

在这种情况下,最佳做法是什么?

如果 - 例如 - 我将为每个名为“consumed”的文档添加另一个 bool 字段并索引该字段。我能否以某种方式缩短查询执行时间?

最佳答案

~500M 文档 这是一个相当可靠的数字,如果这是真的,那就太好了。所以这是我如何看待问题的解决方案:

  1. 如果您想重写/重构和重建应用程序的数据库。您可以使用版本控制模式。

它看起来怎么样?

假设您有两个集合(或者甚至两个数据库,如果您使用的是微服务架构)

相关文档/不相关文档。

基本上,您只能在相关 文档集合(其中存储了 5% 的有用文档)上使用 find,如果没有任何内容,则使用 Irrelevant.find() .此模式将允许您存储旧/历史数据。并通过 TTL index 管理它或 capped collection .

您还可以向其中添加一些 Redis 魔法。 (其中使用了完全相同的逻辑),看看: prototype

This article也有帮助(和其他许多人一样,例如 this SO question )

但不要试图用 Redis 替换 Mongo,而是将它们组合起来。

  1. 使用索引.explain()

If - for example - I will add another boolean field for each document named "consumed" and index this field. Can I improve the query execution time somehow?

是的,它将解决您的问题。来看看,download MongoDB Compass ,在您的模式中创建此 boolean 字段,(不要忘记添加默认值),索引该字段,然后使用 Explain 模块进行一些查询。但不要忘记 compound indexes!如果您在一个索引上创建字段,则通过仅查询该字段来衡量性能。

结果应该是这样的: Index useage

如果您的索引有使用(并且实际上加速),Compass 会显示给您。

要衡量查询的性能(使用和不使用索引),请使用 Explain 选项卡。

Actually, all this part can be done without Compass itself, via .explain and .index queries. But Compass got better visuals of this process, so it's better to use it. Especially since he becomes absolutely free for all.

关于mongodb - 当我知道 95% 没有被使用时,如何高效地查询 MongoDB 的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63098076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com