mongoDB——存储相同数据的两种方法的优缺点
mongoDB - pros and cons of two approaches to store same data
我正在编写简单的健身应用程序来教自己更好的节点。
用户可以保存他的电梯信息。更准确地说,他会加上运动、重复、举重和日期。
我可以想到两种存储这些数据的方法。
首先{username: "username",
exercises: {
deadlift: [{
reps: 5,
weight: 100
date: some date
},
{
reps: 6,
weight: 110,
date: somedate
}
]},
squat: [{
reps: 5,
weight: 100
date: some date
}]
}
这意味着每个用户都将拥有自己的对象,包含其用户名和不同的练习以及该练习的不同尝试。
第二种方法是收集所有用户的尝试对象,就像这样
{
username: "username",
exercise: "deadlift",
reps: 5,
weight: 100,
date: somedate
}
在现实生活中,这两种方法中的一种会更好吗?如果是,时间和原因?
最终,我认为这取决于您想要运行的查询类型。以下是一些快速的想法:
第一种方法的优点是,对于给定的用户,您可以通过一次查找立即了解他/她的所有练习。这对于缓存也很有用,具体取决于应用程序。这种方法的缺点是,如果您有一个过度热心的举重者,您最终可能会耗尽文档中存储练习的空间(如果我没记错的话,限制为16mb)。此外,它使我所谓的"分析查询"变得更加困难,例如,在用户中找到趋势,诸如此类的事情。由于每次都要增长一个文档,所以我不知道最终的磁盘布局会是什么样子(不太熟悉新的存储引擎)。如果每次用户练习时文档的大小都增加,这可能会导致磁盘上的一些空间浪费。
第二种方法的优点是您不必担心任何限制。诚然,这可能不是一个需要解决的问题。我想大多数情况下,您的用户进入一个练习,然后不碰它,所以您可能会绕过磁盘问题。此外,它还允许您执行更高级的查询,例如确定用户中常见/流行的练习。我认为这样的分析比较好。缺点是,根据您选择索引的内容,查询涉及到查找给定用户的所有练习时实际执行的操作。如果你以用户名为索引,并且你只计划运行查询来查找用户做什么锻炼,那么你可能很好。
我更倾向于使用第二个,因为它对我来说似乎更灵活一些。
相关文章:
- 使用javascript单击同一按钮,在两种样式之间更改css值
- 把两种不同的形式合为一
- 这两种不同的创建对象文字的方法有什么区别
- angularjs两种功能的替代品(欧芹和重置)
- 我想要相同的函数以两种方式反应
- HTML中两种JS实现之间的差异
- 比较两种不同格式的时间戳-GAS
- 这两种方法有什么不同
- 正则表达式,两种方式,不同的结果
- 如何将两种不同类型的事件附加到同一元素
- 这两种使用 jQuery 追加 DOM 元素的方法有什么不同
- 通过两种方法创建和更新 CSS
- 什么'这两种继承策略之间的区别是什么
- 使用jQuery过滤两种输入类型
- 如何在面板中添加在两种类型的谷歌图表之间切换的按钮
- 选择两种颜色并在两者之间选择n种颜色
- 如何在同一表单上拥有两种不同类型的日历
- 这两种JavaScript模式的优缺点是什么
- mongoDB——存储相同数据的两种方法的优缺点
- 通过这两种不同的方法调用jQuery功能的优缺点是什么