【问题标题】:Best Mongodb Data Model for Response time statistic website响应时间统计网站的最佳 Mongodb 数据模型
【发布时间】:2023-03-24 11:03:02
【问题描述】:

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

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

1- 将每个网站和每个请求的集合作为文档。 (1000个收藏)

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

【问题讨论】:

    标签: mongodb data-modeling datamodel


    【解决方案1】:

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

    嵌入式数组限制。第二种情况下的这种限制是一个硬性限制。您的文档不能超过 16MB。这个是 BSON 大小,它可以在文档中存储很多东西,但是如果您使用大小不同的大型文档,并且及时更改大小,您的存储将变得支离破碎。原因是,如果您观看此webinar,就会很清楚。基本上,就存储使用而言,这是值得的。

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

    【讨论】:

    • 谢谢。我将使用第一个解决方案(每个网站一个集合)。当集合达到限制时,我可以拥有另一个数据库。如果我的网站数量增加(我认为需要一两年),我会考虑使用 Cassandra 和 Hadoop。
    【解决方案2】:

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

    一个相关问题 - 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/

    【讨论】:

    • 我在文档中找不到最大 #of 个集合。
    • 我要选择方案2
    • 您必须根据各种因素(长度、数量和 nssize)计算最大集合。使用命名空间部分。 1000 个就足够了,但如果您希望增长更多,您将需要知道如何做到这一点。
    猜你喜欢
    • 2012-11-17
    • 2017-03-26
    • 2021-10-09
    • 2012-04-30
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    相关资源
    最近更新 更多