【发布时间】:2013-10-31 08:36:22
【问题描述】:
我有一个时间序列随着时间的推移而增长并(可能)修改:
关于“2013-01-01”:第一版数据
“2013-01-01”10
关于“2013-01-02”:1月1日的数据从10日修改为11日
“2013-01-01”11
关于“2013-02-01”:2月1日第一版数据
“2013-01-01”11
"2013-02-01" 20
关于“2013-02-02”:2月1日的数据从20日修改为21日
“2013-01-01”11
"2013-02-01" 21
最常见的查询:
query1:获取所有日期的最新版本
“2013-01-01”11
"2013-02-01" 21
query2:获取特定日期已知的时间序列:
比如查询“2013-02-01”,我需要得到
《2013-01-01》11
"2013-02-01" 20
请注意,query1 与 query2 相同,但日期 = 当前日期
我需要帮助来构建我的文档,并且由于我来自关系背景,我不确定我的结构的含义。我基本上已经确定了 2 种可能的结构,很乐意收到一些反馈或其他结构的建议。
选项 A:每个版本都在一个单独的文档中
{
"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
}
选项 B:一个文档包含一个日期的所有修订
{
"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 是否很好地支持/优化了这一点
编辑:我也在考虑使用选项 C 来加快 query1 的速度:(尽管它可能会减慢一点写入速度)
{
"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
}
【问题讨论】:
标签: mongodb data-structures mongodb-query database