我正试图弄清楚如何最好地设计 Mongo DB 模式。 Mongo DB 文档建议严重依赖嵌入式文档来改进查询,但我想知道我的用例是否真的证明了引用文档的合理性。
我当前架构的一个非常基本的版本基本上是: (为伪格式道歉,我不知道如何表达 Mongo 模式)
users {
email (string)
}
games {
user (reference user document)
date_started (timestamp)
date_finished (timestamp)
mode (string)
score: {
total_points (integer)
time_elapsed (integer)
}
}
游戏很短(大约 60 秒长),我预计会发生大量并发写入。
在某些时候,我想要计算一个高分列表,并且可能以一种隔离的方式(例如,特定游戏模式或日期的高分列表)
嵌入文档是最好的方法吗?或者这真的是一个关系可以更好地解决的问题吗?这些用例如何在 Mongo DB 中得到最好的解决?
最佳答案
... is this truly a problem that relations solves better?
这里的关键不是关于“这是一个关系吗?”,更多的是关于“我将如何访问这个?”
MongoDB 不是“反引用”。 MongoDB 确实不具有连接的好处,但它确实具有嵌入文档的好处。
只要您了解这些权衡,那么在 MongoDB 中使用引用是完全公平的。这实际上是关于您计划如何查询这些对象。
Is embedded documents the best approach here?
也许吧。需要考虑的一些事项。
games
在user
的上下文之外是否具有值(value)?- 一个
用户
会有多少个游戏
? 游戏
本质上是事务性的吗?- 您将如何访问
游戏
?您是否总是需要用户的所有游戏?
如果您打算建立排行榜并且用户可以生成数百个游戏文档,那么将游戏放在他们自己的收藏中可能是公平的。在每个用户内部存储一万个“游戏”实例并不是特别有用。
但是根据您对上述问题的回答,您真的可以选择任何一种方式。作为试金石,我会尝试运行一些 Map/Reduce 作业(即构建一个简单的排行榜),看看您对数据结构的感受。
关于mongodb - 何时在 Mongodb 中嵌入文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5073979/