使用MangoDB进行数据建模?

时间:2016-11-23 19:44:35

标签: mangodb nosql

我是使用Data的新手。

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

每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"
                }
              ]

 }

如果您对如何使用noSQL改进数据建模知识有任何建议,我将非常感激。

1 个答案:

答案 0 :(得分:0)

离问题解决方案的一分钟步骤并考虑手头的任务。

在存储数据后如何使用该数据?当您使用数据时,您必须确切了解特定用户的步数或者您希望看到一个大数据图片基于特定样本时间点的时间。

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

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

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

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

我意识到这篇文章有点陈旧,但我希望我的回答能帮助别人。