我打算为价格历史创建一个数据库。 历史数据库应存储一年中每天提前90天定义的价格。 这意味着:90天x 365天/年= 32850数据库项目
有没有办法设计架构来提高查询性能?
我的第一个建议是等级商店值,如:
{
"Address": "xxxxx",
"City": "xxxxx",
"Country": "Deutschland",
"Currency": "EUR",
"Item_Name": "xxxxxx",
"Location": [
log, lat
],
"Postal_code": "xxxx",
"Price_History": [
2014 : [
"January" : {
"CW_1" : { 1: [ price1 .. price90 ], 2: [ price1 .. price90 ], },
"CW_2" : {},
"CW_3" : {},
} ,
"February" : {},
"March" : {},
]
]
}
提前谢谢!
答案 0 :(得分:1)
这完全取决于您计划针对此数据运行哪些查询。在我看来,如果您对保留操作历史感兴趣,那么您的查询几乎总是包含日期参数。
Price_History
数组可能更好地格式化为子文档。这些文件中的每一个都有不同(但有限)的价值范围 - 年和月。在该属性上添加索引可能是个好主意。这样,无论何时按特定日期范围查询,索引都将帮助mongo相对快速地查找相关数据集。
另一种选择是将每个价格本身作为文件。连接到价格的项目可能是一个子文档,可能不包含所有项目数据,但足以在数据集足够小时进行计算并获取其他相关数据。对于此用法,我建议创建要编制索引的日期范围的单个属性,以及item._id
属性的索引。如果仍需要单独查询,则仍可以使用各个日期组件。像这样:
{
"ind_attr": "2014_January_CW1",
"date": {
"year": 2014,
"month": January",
},
"CW": 1,
"price": [ price1... price90 ],
"item": {
"name": ...,
"_id": ...,
// minimal data about the actual item
}
}
使用此文档结构,您可以轻松地在ind_attr
属性上添加索引。如果需要,document.item._id
属性可用于检索有关实际项目的更详细数据。