跨供应商时间序列数据的MongoDB模型

时间:2017-08-23 00:07:26

标签: mongodb

我知道我的问题似乎可以通过RDBMS模型更好地解决。但我真的想使用MongoDB进行部署,因为我将来可能会在每条记录上添加不规则的字段,并希望练习NoSQL数据库技能。

一家供应商提供的市盈率和市盈率数据:

| Vendor5_ID|   PE|    PB|date       |
|----------:|----:|-----:|:----------|
|        210| 3.90| 2.620|2017-08-22 |
|        210| 3.90| 2.875|2017-08-22 |
|        228| 3.85| 2.320|2017-08-22 |
|        214| 3.08| 3.215|2017-08-22 |
|        187| 3.15| 3.440|2017-08-22 |
|        181| 2.76| 3.460|2017-08-22 |

其他供应商提供的价格数据和分析师报道

|Symbol | Price| Analyst|date       |
|:------|-----:|-------:|:----------|
|AAPL   |   160|       6|2017-08-22 |
|MSFT   |   160|       6|2017-08-22 |
|GOOG   |   108|       4|2017-08-22 |

我有密钥转换数据:

| uniqueID|Symbol |from       |to         |
|--------:|:------|:----------|:----------|
|        1|AAPL   |2016-01-10 |2017-08-22 |
|        2|MSFT   |2016-01-10 |2017-08-22 |
|        3|GOOG   |2016-01-10 |2017-08-22 |

| uniqueID| Vendor5_ID|from       |to         |
|--------:|----------:|:----------|:----------|
|        1|        210|2016-01-10 |2017-08-22 |
|        2|        228|2016-01-10 |2017-08-22 |
|        3|        214|2016-01-10 |2017-08-22 |

我想快速执行时间范围查询。我想出了将每个列存储为集合的想法

db.PE:
{
 _id,
 uniqueID, 
 Vendor5_ID,
 value,
 date
}

db.PB:
{
 _id,
 uniqueID, 
 Vendor5_ID,
 value,
 date
}

db.Price:
{
 _id,
 uniqueID, 
 Symbol,
 value,
 date
}

db.Analyst:
{
 _id,
 uniqueID, 
 Symbol,
 value,
 date
}

这是一个很好的解决方案吗?如果不同供应商要添加更多数据,您认为哪种模式最好?

1 个答案:

答案 0 :(得分:0)

我会考虑使用嵌套表或子表方法。我不确定mongo对这种支持的支持程度。我会考虑将Oracle NoSQL数据库用于此用例,嵌套表支持TTL和更高的吞吐量(因为BDB作为存储引擎)。使用嵌套表,您可以在子/嵌套表中存储带有时间戳的PE和PB,而父表继续保存符号/ vendor_id和任何其他详细信息。这将确保您的查询在同一个分片上,将它们放在不同的集合中将不会保证相同的分片。