在MongoDB中读取的最快结构是什么:多个文档或子文档?

时间:2015-09-09 17:40:55

标签: mongodb pymongo

简介

我使用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可能会使读取上述第一种类型所需的数据翻倍。

0 个答案:

没有答案