MongoDB建模-如何使用非规范化模型实现这一点?
假设我有10000门课程,课程名称。还有10万用户报名参加各种课程。我的用户数据模型将包含以下内容MongoDB建模-如何使用非规范化模型实现这一点?,mongodb,denormalization,database,nosql,Mongodb,Denormalization,Database,Nosql,假设我有10000门课程,课程名称。还有10万用户报名参加各种课程。我的用户数据模型将包含以下内容 course: [ {courseName: 'Programming 101', cost: 0 }, {courseName: 'How to use stackoverflow', cost: 100 } ] 但是,如果我想更改课程名称,那就需要我更新已经分配了该课程的数千条用户记录。实现这一目标的最佳方式是什么?两个查询和两个表?这是nosql环境的一个弱点,还是这样做的有效方式?实际
course: [
{courseName: 'Programming 101',
cost: 0
},
{courseName: 'How to use stackoverflow',
cost: 100
}
]
但是,如果我想更改课程名称,那就需要我更新已经分配了该课程的数千条用户记录。实现这一目标的最佳方式是什么?两个查询和两个表?这是nosql环境的一个弱点,还是这样做的有效方式?实际上,我会做相反的事情。用户名不会经常更改 最好让用户参加该课程并说“嘿!我的名字错了,你能改一下吗?”如果你有一个不同的类名,那么用户将无法找到你的类 这就是我要做的:
courses: [
{ coursename: 'Programming 101',
cost: 0,
registered: [
{id: 11, name: 'John Doe'},
{id: 12, name: 'Lumber Jack'}
]
}
]
事实上,我会做相反的事情。用户名不会经常更改 最好让用户参加该课程并说“嘿!我的名字错了,你能改一下吗?”如果你有一个不同的类名,那么用户将无法找到你的类 这就是我要做的:
courses: [
{ coursename: 'Programming 101',
cost: 0,
registered: [
{id: 11, name: 'John Doe'},
{id: 12, name: 'Lumber Jack'}
]
}
]
基本上你有两个选择:
另外,要回答您关于这是nosql系统的一个弱点的问题,是的,这绝对是一个弱点。这根本不是像Mongo这样的nosql系统试图解决的问题类型。Mongo对某些问题很好,但对其他问题却很糟糕。我想说,保持课程和学生的数据库不是Mongo的强项之一。这是一个典型的关系数据模型,因此在Mongo中管理起来比在经典的RDBMS中更麻烦。基本上,您有两种选择:
另外,要回答您关于这是nosql系统的一个弱点的问题,是的,这绝对是一个弱点。这根本不是像Mongo这样的nosql系统试图解决的问题类型。Mongo对某些问题很好,但对其他问题却很糟糕。我想说,保持课程和学生的数据库不是Mongo的强项之一。这是一个典型的关系数据模型,因此在Mongo中管理起来比在经典的RDBMS中要麻烦得多。10000当然,100000用户,那么您就可以使用RDBMS了。如果你有100000所大学,每个大学有100000个用户(总共100亿个用户),那么你可能需要noSql…如果是这样,playOrm允许你在这种情况下非常容易地进行连接,因为你可以按大学分区(两个表),然后你可以简单地在“大学课程分区”上进行连接,然后“大学中的用户划分”。好吧,这是一种方法。10000个课程,100000个用户,然后你可以使用RDBMS。如果你有100000所大学,每个大学有100000个用户(总共100亿个用户),您可能需要noSql…如果是这样,playOrm允许您在这种情况下非常轻松地进行连接,因为您可以按大学分区(两个表),然后您可以简单地在“大学课程分区”和“大学用户分区”上进行连接“。好吧,这是一种方法。这是一个比我上面提供的更好的模型,但是如果用户名发生变化,那么我们的情况与下划线问题相同,即使这样,您仍然会有更好的结果。”。类的数量将大大低于用户的数量。这是数据非规范化时必须面对的问题。使用MongoDB,您可以使用查找和更新功能(请注意,为什么我还包括用户ID)。你需要经常运行一个批处理脚本来更新数据。一个用户最多只能注册十几个类。我认为你宁愿扫描10000个类,也不愿意扫描100000个用户。这是一个比我上面提供的更好的模型,但是如果用户名更改,那么我们的情况与下划线问题相同,即使这样,你仍然会有更好的结果。类的数量将大大低于用户的数量。这是数据非规范化时必须面对的问题。使用MongoDB,您可以使用查找和更新功能(请注意,为什么我还包括用户ID)。你需要经常运行一个批处理脚本来更新数据。一个用户最多只能注册十几个类。我想你宁愿扫描10000个类,也不愿扫描100000个用户。