Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb大型文档设计_Mongodb - Fatal编程技术网

Mongodb大型文档设计

Mongodb大型文档设计,mongodb,Mongodb,我计划创建一个价格历史数据库。 历史数据库应存储一年中每天提前90天定义的价格。 这意味着:90天x 365天/年=32850个数据库项 有没有办法设计模式来提高查询性能 我的第一个建议是分层存储值,如: { "Address": "xxxxx", "City": "xxxxx", "Country": "Deutschland", "Currency": "EUR", "Item_Name": "xxxxxx", "Location": [

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

提前谢谢你

这完全取决于您计划对这些数据运行哪些查询。在我看来,如果您对保存操作历史感兴趣,那么您的查询几乎总是包含一个日期参数

Price\u History
数组可以更好地格式化为子文档。这些文档中的每一个都有不同(但有限)的值范围——年份和月份。在该属性上添加索引可能是个好主意。这样,每当您按某个日期范围进行查询时,您的索引将帮助mongo相对快速地找到相关的数据集


另一种选择是将每个价格本身作为一个文档。与价格相关的项目可能是一个子文档,可能不包含所有项目数据,但足以在数据集足够小时进行计算并获取其他相关数据。对于这种用法,我建议为要索引的日期范围创建一个单独的属性,并在
项上创建一个索引。_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\u attr
属性上添加索引。如果需要,
document.item.\u id
属性可用于检索实际项目的更详细数据。

这完全取决于您对运行哪些查询感兴趣。您能给出一些您计划针对数据运行的最常见查询的示例吗?首先感谢您的评论。一些例子应该是1。“如果项目位于位置[log,lat]附近,则查找任何价格”2。“查找价格高于“3”的任何位置。”。“如果供应商和城市是xxx,则查找任何项目”嗯。。。好啊所以这和我想的方向不同。。。让我们在聊天中继续此操作-如果我没有弄错文档.item.\u id是父文档的引用,其中包括城市、位置等?