是否可以将所有数据添加到集合中的一个对象中,
例如:
{
id:134....,
fullname : "jack...",
email : "amsdk@gm....",
messages :[
all messages here
Perhaps up to fifty thousand items
],
orders : [
all orders here
],.........
}
这会导致服务器过载吗?
答案 0 :(得分:0)
Mongo文档为selecting a data model提供了有用的指导。您上面描述的嵌套模型称为Embedded Data Model:
通常,嵌入可为读取操作提供更好的性能, 以及请求和检索相关数据的能力 单数据库操作。嵌入式数据模型可以实现 一次原子写入操作即可更新相关数据。
嵌入文档简化了从数据库中获取数据。不利的一面是,添加和更新具有复杂文档层次结构的文档可能具有挑战性。
Mongo将传统的PK / FK结构称为Normalized Data Model
通常,使用归一化的数据模型:
- 嵌入时会导致数据重复,但无法提供足够的读取性能优势,胜过重复所带来的影响。
- 代表更复杂的多对多关系。
- 为大型分层数据集建模。
聚合管道可能令人恐惧,这可能使嵌入式数据模型更具吸引力。如果您有这种感觉,请查看此free course on the MongoDB Aggregation Pipeline。如果您可以放心地跨馆藏检索相关数据,那么标准化数据模型可能会更具吸引力。
使用每个模型的较小数据集测试读/写查询。您将清楚了解每种方法的优点和挑战。对于我当前的项目,我发现规范化数据模型简化了所需的许多写操作。最终,将诸如 orders 和 users 之类的关注点分离到不同的集合中被证明更加简单,尤其是在我了解了如何使用$lookup合并相关集合中的数据之后。