Mongodb大型文档设计
我计划创建一个价格历史数据库。 历史数据库应存储一年中每天提前90天定义的价格。 这意味着:90天x 365天/年=32850个数据库项 有没有办法设计模式来提高查询性能 我的第一个建议是分层存储值,如:Mongodb大型文档设计,mongodb,Mongodb,我计划创建一个价格历史数据库。 历史数据库应存储一年中每天提前90天定义的价格。 这意味着:90天x 365天/年=32850个数据库项 有没有办法设计模式来提高查询性能 我的第一个建议是分层存储值,如: { "Address": "xxxxx", "City": "xxxxx", "Country": "Deutschland", "Currency": "EUR", "Item_Name": "xxxxxx", "Location": [
{
"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是父文档的引用,其中包括城市、位置等?