【发布时间】:2015-12-05 19:20:02
【问题描述】:
简介
我使用 Mongo 存储中等长度的金融时间序列,我可以通过 2 种方式阅读:
检索 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 中,我会在 stock 上的简单索引上使用 find(),并添加一个投影以仅返回我寻找的 year
选项 B.1 - 带有压缩内容的子文档
同上,但<daily prices for 201x> 是通过 jsoning 和 zlibbing 压缩的
选项 C - 包含每日数据的子文档
{
_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
}
选项 D - 嵌套子文档
{
_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>,
...
}
然后我必须应用像this 这样的查询方法。请注意,选项 D 可能会使读取上述第一种类型所需的数据增加一倍。
【问题讨论】: