MongoDB:用户和活动的嵌入式或规范化数据模型
我正在为一个新项目设计数据库模型,由于我来自SQL世界,我不确定哪种方法更好 这是我的主要关系:MongoDB:用户和活动的嵌入式或规范化数据模型,mongodb,database-design,model,database,Mongodb,Database Design,Model,Database,我正在为一个新项目设计数据库模型,由于我来自SQL世界,我不确定哪种方法更好 这是我的主要关系: 用户组织的活动。(例如:约翰正在组织一场足球赛 游戏) 参与活动的用户。(例如:安娜和罗布参加了约翰组织的足球赛) 活动属于某一类别/活动类型(约翰的比赛属于足球类) 用户在完成活动后对其他用户进行评分(例如:John对Anna和Rob的绩效评分分别为五星和五星) 在足球比赛期间) 伪代码如下所示: 用户 _身份证 全名 电子邮件 密码 loc({lon:X,lat:Y}) 活动(活动数组)
- 用户组织的活动。(例如:约翰正在组织一场足球赛 游戏)
- 参与活动的用户。(例如:安娜和罗布参加了约翰组织的足球赛)
- 活动属于某一类别/活动类型(约翰的比赛属于足球类)
- 用户在完成活动后对其他用户进行评分(例如:John对Anna和Rob的绩效评分分别为五星和五星) 在足球比赛期间)
- _身份证
- 全名
- 电子邮件
- 密码
- loc({lon:X,lat:Y})
- 活动(活动数组)
- 平均失业率
- 创建于
- 更新地址
- _身份证
- 时间戳
- 活动(活动)
- 评分器用户(用户)
- 额定用户(用户)
- 创建于
- 更新地址
- _身份证
- 名字
- 半径
- _身份证
- 类型(活动类型)
- 组织者(用户)
- loc({lon:X,lat:Y})
- 地址
- 时间
- 最大参与人数
- 描述
- 参与者(用户数组)
- 请求(用户数组)
- 创建于
- 更新地址
我是否应该从这种规范化方法转向嵌入式数据模型 这取决于删除、更新和需要的查询类型
- 对于不嵌入设计,您应该对 检索数据时,需要在硬盘中随机存储数据,这需要一些时间 额外时间
- MongoDb只增加了数据库(在大小上)意味着删除文档不会增加 减少数据库(和文件系统)的大小,如此多的删除操作将导致 数据碎片化。如果用较大的文档更新文档 mongo将删除该文档,并将其插入其他位置和 在删除文档时也会遇到同样的碎片问题,而在嵌入系统中则必须处理 有更多的碎片问题
我建议您阅读《Mongodb应用设计模式》一书,这取决于您需要删除、更新和查询的类型
- 对于不嵌入设计,您应该对 检索数据时,需要在硬盘中随机存储数据,这需要一些时间 额外时间
- MongoDb只增加了数据库(在大小上)意味着删除文档不会增加 减少数据库(和文件系统)的大小,如此多的删除操作将导致 数据碎片化。如果用较大的文档更新文档 mongo将删除该文档,并将其插入其他位置和 在删除文档时也会遇到同样的碎片问题,而在嵌入系统中则必须处理 有更多的碎片问题
我建议您阅读我写的
Mongodb应用设计模式这是一本关于在Mongodb
中嵌入或引用的书。强烈推荐
嵌入更好地用于:
- 小型子文档
- 不定期更改的数据
- 当最终一致性可接受时
- 少量增长的文档
- 通常需要执行第二次查询才能获取的数据
- 快速阅读速度
推荐信对你来说更好
- 大型子文档
- 易变数据
- 当需要立即一致性时
- 文档大量增长
- 经常从文档中排除的数据
- 快速写入速度
-来自《Mongodb权威指南》这里是关于在我写的Mongodb
中嵌入或引用的答案。强烈推荐
嵌入更好地用于:
- 小型子文档
- 不定期更改的数据
- 当最终一致性可接受时
- 少量增长的文档
- 通常需要执行第二次查询才能获取的数据
- 快速阅读速度
推荐信对你来说更好
- 大型子文档
- 易变数据
- 当需要立即一致性时
- 文档大量增长
- 经常从文档中排除的数据
- 快速写入速度
-从《Mongodb权威指南》中您将嵌入什么?例如,活动中的速率和活动类型。但我希望能够获得所有可用ActivityType项目的列表或计算用户的平均速率,这使我成为一种更规范化的方法。您将嵌入什么?例如,Activity中的速率和ActivityType。但我希望能够获得所有可用ActivityType项目的列表或计算用户的平均速率,这使我成为一种更规范化的方法。感谢@Disposer的推荐。行!谢谢您的推荐@Disposer。行!