2

我现在正在为我的数据模式建模,我不确定我的思维过程是否有意义。所以我想我可以在这里问一些更有经验的 MongoDB 人:


让我们假设我的应用程序每天最多生成 10.000 个事件文档。我想基于时间访问它们。比如:“给我这三天的所有事件!”。

我在大学收集的 RDBMS 知识首先告诉我:“做一个事件集合,并为每个文档提供事件的属性‘日期’。完成。”

但后来我想到了每天做一个收藏的想法!然后我可以非常快速地访问这些事件,只需调用其对应的集合即可获取一天的所有事件。

这有意义吗?我可以在不牺牲速度/性能的情况下拥有成百上千的收藏吗?


谢谢你的建议:-)

4

1 回答 1

6

每天 10.000 份文件并不是很多。在一年的时间里,有 365 万份文档。这当然不是一个很小的集合,但我认为分解它们没有多大意义。

在这种特定情况下的缺点是

  • 以后很难更改您的查询模式。如果你突然需要小时精度,你就有麻烦了。如果要查找去年的所有事件,其中某个字段 x 设置为 y,则必须查询 365 或 366 集合。
  • 您的查询模式会更复杂,因为您必须处理不同的集合名称。此外,您需要多次往返数据库。
  • 国际化非常复杂,因为“日”在全球范围内并不是一个明确定义的时间点。另一方面,如果需要,使用 UTC DateTime 字段可以让您在不同的时区进行查询。
  • 管理大量集合可能很乏味,使用 shell 会很烦人。
  • 分片通常基于每个集合执行。如果您有许多较小的集合,则无法进行自动分片。

然而,使用大量集合是可能的,尽管您应该了解一些限制。正如文档解释的那样,您可以拥有 12,000 个集合,每个集合具有一个索引,每个集合具有默认设置。有关详细信息,请参见那里。

Server Density 在博客上介绍了他们的方法,他们也使用了很多集合,但是他们咀嚼了 650m 的文档,并且他们声称这在性能方面并没有太大的区别。

于 2012-06-06T09:29:51.220 回答