我有一个时间序列,随着时间的推移而增长并且(可能)进行了修订:
“2013-01-01”10
“2013-01-01”11
“2013-01-01”11
“2013-02-01”20
“2013-01-01”11
“2013-02-01”21
“2013-01-01”11
“2013-02-01”21
例如,查询“2013-02-01”,我需要得到
“2013-01-01”11
“2013-02-01”20
我需要帮助来构建我的文档,因为我来自关系背景,我不确定我的结构的含义。我基本上已经确定了两种可能的结构,并且很乐意得到一些反馈或其他结构的建议。
{
"id":"1",
"date":"2013-01-01",
"version_date":"2013-01-01",
"value":10
}
{
"id":"1",
"date":"2013-01-01",
"version_date":"2013-01-02",
"value":11
}
{
"id":"1",
"date":"2013-02-01",
"version_date":"2013-02-01",
"value":20
}
{
"id":"1",
"date":"2013-02-01",
"version_date":"2013-02-02",
"value":21
}
{
"id":"1",
"date":"2013-01-01",
"values" : [
{ "version_date":"2013-01-01",
"value":10
},
{
"version_date":"2013-01-02",
"value":11
}
}
{
"id":"1",
"date":"2013-02-01",
"values" : [
{ "version_date":"2013-02-01",
"value":20
},
{
"version_date":"2013-02-02",
"value":21
}
}
在选项B中,我还担心执行更新查询可能会有点困难,因为文档有一个不断增长的部分,我不确定是否支持/优化mongodb < / p> 编辑:我也在考虑选项C来加速查询1 :(虽然它可能会减慢写作速度)
{
"id":"1",
"date":"2013-01-01",
"values" : [
{ "version_date":"2013-01-01",
"value":10
},
{
"version_date":"2013-01-02",
"value":11
}
"last_value":11
}
{
"id":"1",
"date":"2013-02-01",
"values" : [
{ "version_date":"2013-02-01",
"value":20
},
{
"version_date":"2013-02-02",
"value":21
}
"last_value":21
}
答案 0 :(得分:1)
与所有这样的问题一样,您是唯一能够回答此问题的人。如果您有自己的数据 - 尝试两种方式对真实数据进行实际数据基准测试,并比较更好的数据。如果您没有数据 - 请尝试模拟它。
请注意,使用选项B和C,您必须了解16 Mb limit per document。因此,如果你有很多版本 - 你可能会达到极限(但你必须明白应该有太多的版本才能达到16Mb)。另请注意,更新此类文档可以使用许多moves on the disk。
如果您需要一次选择特定文档的所有修订版,选项B和C会很好,但我没有在您最常见的查询中找到它。请记住,使用正确的索引,您可以使用选项A实现此目的。
答案 1 :(得分:1)
在官方网页上实际上有一篇关于此主题的博客文章:http://blog.mongodb.org/post/65517193370/schema-design-for-time-series-data-in-mongodb 如果需要,请查看并询问任何其他问题。
答案 2 :(得分:0)