响应时间统计网站的最佳Mongodb数据模型

时间:2013-06-23 15:59:48

标签: mongodb data-modeling datamodel

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

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

1-每个网站都有一个集合,每个请求都有一个文档。 (1000集)

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

2 个答案:

答案 0 :(得分:1)

你可以这样做,但我认为你必须考虑到任何一种情况下数据库的周期性增长。在数据库扩展期间,数据库将缓慢/无响应。 (可能有一个设置,所以这发生在后台 - 我忘了)。

相关问题 - MongoDB performance with growing data structure,特别是“填充因子”

使用第一种方法,您可以存储的最大收集数量的网站数量有一个上限。您可以根据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/

答案 1 :(得分:1)

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

嵌入式阵列限制。在第二种情况下的这种限制是困难的。您的文档不能超过16MB。这个是BSON大小,它可以在文档中存储很多东西,但如果你使用大小不一的大文档,并且及时更改大小,你的存储将会碎片化。原因是如果你看这个webinar就会很清楚。基本上,就存储使用而言,这是值得的。

如果您可能使用聚合框架进行进一步分析,嵌入式阵列概念也会更难。