【问题标题】:Data modeling with document database?使用文档数据库进行数据建模?
【发布时间】:2017-04-07 23:06:01
【问题描述】:

我是使用数据的新手。

所以我有很多基于时间的数据。

每 15 分钟的数据行。我应该每 1 小时、1 天、1 个月计算一次数据并将数据存储在数据库中吗?

如果我这样做,这个架构会不会很好。

{
   _id: "joe",
   name: "Joe Bookreader",
   time min: [
                {
                  time: "1",
                  steps: "10"
                },
                {
                  time: "2",
                  steps: "4"
                }
              ]
   time day: [
                {
                  time: "1",
                  steps: "30"
                },
                {
                  time: "2",
                  steps: "30"
                }
              ]

 }

如果您对如何使用文档数据库提高我的数据建模知识有任何建议,我将不胜感激。

【问题讨论】:

    标签: document-database


    【解决方案1】:

    离解决问题的程序化方法一分钟,想想手头的任务。

    存储数据后您将如何使用这些数据? 使用数据时,了解特定用户的确切步数或您希望查看大数据对您很重要图片基于时间特定的采样时间点。

    如果您关心每个用户的观点,那么您的上述方案将有效。另一方面,如果您想运行全局报告,例如在特定时间段内用户的平均(或总计)距离,那么我会选择您的文档为时间(时间点或时间范围)的模式,而用户和步骤是您的属性。

    数据库中的另一个重要概念是不要静态存储可以动态计算的数据。与任何规则一样,这也有一些例外。就像缓存值一样,它们是短暂的,如果它们不正确,不会对您的应用程序产生重大影响。另一种是报告,您根据当前值为用户生成报告并存储它。如果用户想获得新数据,用户将重新运行报告。 (我相信很少有其他的)

    但在大多数情况下,提供陈旧/错误数据所带来的风险会导致基于该数据做出错误决策的风险将超过避免额外计算所带来的性能优势。

    我之所以提到这一点,是因为您存储了time mintime day。如果time day 可以基于time min 计算,则不应将其存储在数据库中,而应即时计算。您可以编写将产生time day 的实际结果的查询,而无需在应用程序节点上使用任何额外的计算能力。所有计算都将在数据节点上完成,比计算节点更高效,并且没有网络损失。

    我知道这篇文章有点老了,但我希望我的回答对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      • 1970-01-01
      • 2018-05-19
      • 2012-03-11
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多