首页 文章

MongoDB:用户和活动的嵌入式或规范化数据模型

提问于
浏览
1

我正在为一个新项目设计我的数据库模型,因为我来自SQL世界,我不确定哪种方法更好 .

This are my main relationships:

  • 用户组织的活动 . (例如:约翰正在组织足球比赛)

  • 加入活动的用户 . (例如:安娜和罗布加入约翰组织的足球比赛)

  • 活动属于类别/活动类型(约翰的游戏属于足球类别)

  • 用户在完成活动后对其他用户进行评分(例如:约翰评价Anna为5星,Rob为5星,以表现他们在足球比赛期间的表现) .

The pseudocode would be something like this:

  • User

  • _id

  • 全名

  • 电子邮件

  • 密码

  • loc({lon:X,lat:Y})

  • 活动(活动数组)

  • average_rate

  • created_at

  • updated_at

  • Rate

  • _id

  • 时间戳

  • 活动(活动)

  • rater_user(用户)

  • rated_user(用户)

  • created_at

  • updated_at

  • ActivityType

  • _id

  • 名字

  • 半径

  • Activity

  • _id

  • type(ActivityType)

  • 组织者(用户)

  • loc({lon:X,lat:Y})

  • 地址

  • 时间

  • max_participants

  • 说明

  • 参与者(用户数组)

  • requests(用户数组)

  • created_at

  • updated_at

我应该从这种规范化的方法转向嵌入式数据模型吗?

2 回答

  • 3

    这是关于我在_1867770中嵌入或引用的答案 . 强烈推荐 .

    MongoDB for BI use

    嵌入更适合:

    小子文档不定期更改的数据最终一致性是可接受的文档少量增长的文档您经常需要执行第二次查询以获取快速阅读速度的数据

    参考文献更适合

    大型子文档易失性数据当需要立即一致性时文档会大量增长您经常从文档中排除的数据快速写入速度

    • 从“Mongodb权威指南”
  • 0

    这取决于您需要删除,更新和查询类型 .

    • 对于不嵌入设计,你应该运行一些 Join Like 查询来检索数据,它需要随机的硬盘驱动器,它需要一些额外的时间

    • MongoDb仅增长数据库(大小)意味着删除文档不会减小数据库(和文件系统)的大小,因此许多删除操作将导致数据碎片 . 如果你用更大的文件更新文件mongo将删除文件并将其插入其他地方并且你在删除文件时有相同的碎片问题,在嵌入系统中你必须处理更多的碎片问题

    • ......

    我建议你去看书 Mongodb Applied Design Patterns

相关问题