0

在我的项目中,我有服务器会向网站发送 ping 请求,测量它们的响应时间并每分钟存储一次。

我将使用 Mongodb,我正在寻找最佳数据模型。哪种数据模型更好?

1-为每个网站和每个请求收集一个文档。(1000个收藏)

或者

2-将所有网站和每个网站的集合作为文档,将每个请求作为子文档。

4

2 回答 2

1

你可以做任何一个,但我认为你必须考虑到数据库的周期性增长。在数据文件扩展过程中,数据库将变慢/无响应。(可能有一个设置,所以这发生在后台 - 我忘记了)。

一个相关问题 -数据结构不断增长的 MongoDB 性能,特别是“填充因子”

对于第一种方法,您可以存储的网站数量有一个上限,这取决于最大收藏数量。您可以根据http://docs.mongodb.org/manual/reference/limits/进行计算。

在第二种方法中,虽然#of 集合并不重要,但您需要考虑数据库的增长。

一种方法是使用空数据对其进行初始化,因此在扩展之前需要更长的时间。

例如。

{
  website: name,
  responses: [{
     time: Jan 1, 2013, 0:1, ...
  },
  {
     time: Jan 1, 2013, 0:2, ...
  }
  ... and so for each minute/interval you expect. 

]
}

不利的一面是,初始化可能需要更长的时间,但稍后您将不得不担心这一点。

无论哪种方式,这都是您必须付出的代价。唯一的问题是什么时候?现在?还是以后?

考虑阅读他们的用例,特别是 - http://docs.mongodb.org/manual/use-cases/hierarchical-aggregation/

于 2013-06-23T16:12:49.060 回答
1

两种解决方案都应该面临 mongodb 的一个特定限制。对于第一个,您说每个网站都是一个集合,限制在于集合的数量,而每个集合都有一个命名空间条目,命名空间大小为 16MB,因此可以容纳大约 16.000 个条目。(命名空间的大小可以增加)在我看来,这是一个更好的解决方案,而您说预计有 1000 个集合并且可以处理。(应该认为索引有自己的命名空间条目并计入 16.000)。在这种情况下,您可以将条目存储为文档,然后通常比使用嵌入式数组更容易处理它们。

嵌入式阵列限制。第二种情况下的这种限制是一个硬性限制。您的文档不能超过 16MB。这个是 BSON 大小,它可以在文档中存储很多东西,但是如果您使用大小不同的巨大文档,并且及时更改大小,您的存储将变得碎片化。原因是,如果您观看此网络研讨会,您就会明白这一点。基本上,就存储使用而言,这是值得的。

如果您可能使用聚合框架进行进一步分析,那么使用嵌入式数组概念也会更加困难。

于 2013-06-24T08:50:39.930 回答