Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB:用户和活动的嵌入式或规范化数据模型_Mongodb_Database Design_Model_Database - Fatal编程技术网

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

MongoDB:用户和活动的嵌入式或规范化数据模型,mongodb,database-design,model,database,Mongodb,Database Design,Model,Database,我正在为一个新项目设计数据库模型,由于我来自SQL世界,我不确定哪种方法更好 这是我的主要关系: 用户组织的活动。(例如:约翰正在组织一场足球赛 游戏) 参与活动的用户。(例如:安娜和罗布参加了约翰组织的足球赛) 活动属于某一类别/活动类型(约翰的比赛属于足球类) 用户在完成活动后对其他用户进行评分(例如:John对Anna和Rob的绩效评分分别为五星和五星) 在足球比赛期间) 伪代码如下所示: 用户 _身份证 全名 电子邮件 密码 loc({lon:X,lat:Y}) 活动(活动数组)

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

这是我的主要关系:

  • 用户组织的活动。(例如:约翰正在组织一场足球赛 游戏)
  • 参与活动的用户。(例如:安娜和罗布参加了约翰组织的足球赛)
  • 活动属于某一类别/活动类型(约翰的比赛属于足球类)
  • 用户在完成活动后对其他用户进行评分(例如: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。行!