联系人的MongoDB模式优化
我像这样在mongodb中存储联系人,但这种模式的主要缺点是由于16mb的限制,我无法在一个文档中存储40k-50k联系人 我现在想更改我的模式。所以谁能给我建议一下重新设计这个的最佳方法呢 这是我的样品文件联系人的MongoDB模式优化,mongodb,Mongodb,我像这样在mongodb中存储联系人,但这种模式的主要缺点是由于16mb的限制,我无法在一个文档中存储40k-50k联系人 我现在想更改我的模式。所以谁能给我建议一下重新设计这个的最佳方法呢 这是我的样品文件 { "_id" : ObjectId("5c53653451154c6da4623a77"), "contacts" : [{ name:"", email:"", group:[5c53653451154c6da462
{
"_id" : ObjectId("5c53653451154c6da4623a77"),
"contacts" : [{
name:"",
email:"",
group:[5c53653451154c6da4623a79]
}],
"groups" : [{
_id: ObjectId("5c53653451154c6da4623a79"),
group_name:"test"
}],
}
根据您的文档示例,
联系人
属于组
在这种情况下,有不同的方法可以得到更好的模式:
1-文档嵌入:
每个组
文档中都有一组联系人
集合组:
{
"_id": ObjectId("5c53653451154c6da4623a79"),
"group_name":"test",
"contacts": [
{
"name":"something",
"email":"something",
},
{
"name":"something else",
"email":"something else",
}
]
}
{
"_id" : ObjectId("5c53653451154c6da4623a77"),
"name":"something",
"email":"something",
"groups":["5c53653451154c6da4623a79"]
},
{
"_id" : ObjectId("5c536s7df9sd7f987d9s7d98"),
"name":"something else",
"email":"something else",
"groups":["5c53653451154c6da4623a79"]
}
{
"_id": ObjectId("5c53653451154c6da4623a79"),
"group_name":"test"
}
2-文档引用:
您将拥有两个集合—联系人
和组
——并在每个联系人
中存储一个组引用
收集联系人:
{
"_id": ObjectId("5c53653451154c6da4623a79"),
"group_name":"test",
"contacts": [
{
"name":"something",
"email":"something",
},
{
"name":"something else",
"email":"something else",
}
]
}
{
"_id" : ObjectId("5c53653451154c6da4623a77"),
"name":"something",
"email":"something",
"groups":["5c53653451154c6da4623a79"]
},
{
"_id" : ObjectId("5c536s7df9sd7f987d9s7d98"),
"name":"something else",
"email":"something else",
"groups":["5c53653451154c6da4623a79"]
}
{
"_id": ObjectId("5c53653451154c6da4623a79"),
"group_name":"test"
}
集合组:
{
"_id": ObjectId("5c53653451154c6da4623a79"),
"group_name":"test",
"contacts": [
{
"name":"something",
"email":"something",
},
{
"name":"something else",
"email":"something else",
}
]
}
{
"_id" : ObjectId("5c53653451154c6da4623a77"),
"name":"something",
"email":"something",
"groups":["5c53653451154c6da4623a79"]
},
{
"_id" : ObjectId("5c536s7df9sd7f987d9s7d98"),
"name":"something else",
"email":"something else",
"groups":["5c53653451154c6da4623a79"]
}
{
"_id": ObjectId("5c53653451154c6da4623a79"),
"group_name":"test"
}
为什么我们在联系人
中引用组
,而不是相反?因为我们的联系人
可能比组
多。这样我们就有了更小的文档和更小的“引用数组”
您将遵循的路径在很大程度上取决于每个
组有多少联系人。如果这个数字很小,我会采用文档嵌入方法,以简化和易于访问。如果每个组有大量联系人
,我会使用文档参考,以获得较小的文档。非常感谢。我会选择第二个,因为我每个小组都有更多的联系。