简介
我使用Mongo存储适度长的金融时间序列,我可以通过两种方式阅读:
检索整个长度的1个系列
在特定日期检索N系列
为方便第二种类型的查询,我按年分割系列。这样可以减少在特定日期查询大量序列时的数据负载(例如:如果我查询特定日期的1000个时间序列的值,则查询每个序列的整个历史记录是不可行的,这可以追溯到40年=每人28k)
问题
写入不是时间敏感的。存储空间很丰富。 读取时间敏感。存档第一类和第二类快速读取数据的最佳选择是什么?
选项A - 单独的文档
{_id:xxx, stock:IBM, year:2014, prices:[<daily prices for 2014>]}
{_id:xxx, stock:IBM, year:2015, prices:[<daily prices for 2015>]}
在选项A中,我会在find()
和year
上添加复合索引stock
选项B - 子文档
{
_id:xxx,
stock:IBM,
2014:[<daily prices for 2014>],
2015:[<daily prices for 2015>],
}
在选项B中,我会find()
对stock
上的简单索引进行year
,并添加投影以仅返回<daily prices for 201x>
我寻找
选项B.1 - 包含压缩内容的子文档
与上面相同,但是{
_id:xxx,
stock:IBM,
0:<price for day 0 of 2014>,
1:<price for day 1 of 2014>,
...
n:<price for day n of 2015>, //n can be as large as 10.000
}
通过jsoning和zlibbing来压缩
选项C - 包含每日数据的子文档
{
_id:xxx,
stock:IBM,
2014:{
0:<price for day 0>,
1:<price for day 1>,
...
}
2015:{
0:<price for day 0>,
1:<price for day 1>,
...
}
选项D - 嵌套子文档
{{1}}
然后我必须应用像this这样的查询方法。要注意,选项D可能会使读取上述第一种类型所需的数据翻倍。