0

假设我有 10,000 个带有课程名称的课程。以及 100,000 名注册各种课程的用户。我的用户数据模型将包含类似...

course: [
{courseName: 'Programming 101',
cost: 0
},
{courseName: 'How to use stackoverflow',
cost: 100
}
 ]

但是,如果我想更改课程名称,则需要我更新已经分配了该课程的数千条用户记录。实现这一目标的最佳方法是什么?两个表的两个查询?这是 nosql 环境的弱点,还是这样做的有效方法是什么?

4

3 回答 3

2

基本上你有两个选择:

  1. 从用户记录中引用课程 ID 而不是名称本身,然后进行客户端连接。
  2. 继续与学生一起存储完整的课程名称,并在需要时更新这些字段。

这实际上取决于您尝试优化系统的内容,以选择哪个。如果您每学期只更改十几个课程名称,那么选项 2 可能不会有问题。

另外,要回答您关于这是 nosql 系统的弱点的问题,是的,这绝对是一个弱点。这根本不是像 Mongo 这样的 nosql 系统试图解决的问题类型。Mongo 对某些问题非常有用,但对其他问题却非常不利。我想说的是,保留课程和学生数据库并不是 Mongo 的强项之一。这是一个原型关系数据模型,因此在 Mongo 中管理起来比在经典 RDBMS 中更麻烦。

于 2012-06-29T18:47:47.317 回答
1

实际上,我会反其道而行之。用户的名字不会经常改变。

用户最好参加那个课程并说“嘿!我的名字错了,你能改吗?” 如果您有不同的班级名称,那么用户将无法找到您的班级。

这就是我要做的:

courses: [
  { coursename: 'Programming 101',
    cost: 0,
    registered: [
      {id: 11, name: 'John Doe'},
      {id: 12, name: 'Lumber Jack'}
    ]
  }
]
于 2012-06-29T18:30:33.133 回答
0

10,000 个课程,100,000 个用户,你就可以使用 RDBMS。如果您有 100,000 所大学,每所大学有 100,000 个用户(总共 100 亿用户),您可能需要 noSql....如果是这种情况,playOrm 允许您在这种情况下非常轻松地进行连接,因为您可以按大学进行分区(两个表)然后你可以简单地对“大学A分区中的课程”和“大学A分区中的用户”进行连接。嗯,这是一种方法。

于 2012-08-21T14:47:32.200 回答