我对使用数据是个新手。
所以我有很多基于时间的数据。
每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提高我的数据建模知识有任何建议,我将不胜感激。
发布于 2016-12-09 13:05:46
花一分钟远离问题的程序化方法,思考一下手头的任务。
在存储数据之后,您将如何使用这些数据?当您使用数据时,准确地了解特定用户的步数很重要,或者您希望根据特定采样点的时间来查看总体情况。
如果你关心每个用户的观点,那么你上面的方案将会起作用。另一方面,如果您想运行全局报告,比如用户在特定时间内平均(或总)停留了多长时间,那么我会选择文档是时间(时间点或时间范围)的模式,而用户和步骤是您的属性。
数据库中的另一个重要概念是不静态地存储可以在运行时计算的数据。与任何规则一样,这也有一些例外。例如,缓存值是短暂的,如果它们不正确,将不会对您的应用程序产生重大影响。另一个是报告,您根据当前值为用户生成报告并将其存储。如果用户想要获得最新数据,用户将重新运行报告。(我相信几乎没有其他的)
但在大多数情况下,提供陈旧/错误的数据所带来的风险将超过避免额外计算带来的性能好处。
我提到这一点的原因,是因为您存储的是time min和time day。如果可以基于time min计算time day,则不应将其存储在数据库中,而应动态计算它。您可以编写将生成time day实际结果的查询,而无需在应用程序节点上使用任何额外的计算能力。所有计算都将在数据节点上完成,比计算节点效率高得多,并且不会造成网络损失。
我知道这篇文章有点老了,但我希望我的答案能对某些人有所帮助。
https://stackoverflow.com/questions/40772932
复制相似问题