Mongodb大文档设计

时间:2014-09-12 07:06:20

标签: mongodb

我打算为价格历史创建一个数据库。 历史数据库应存储一年中每天提前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" : {},
            ]
            ]
}

提前谢谢!

1 个答案:

答案 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属性可用于检索有关实际项目的更详细数据。