0

コース名が付いた10,000のコースがあるとします。そして、さまざまなコースに登録する10万人のユーザー。私のユーザーデータモデルには、次のようなものが含まれます...

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

ただし、コース名を変更したい場合は、そのコースがすでに割り当てられている何千ものユーザーレコードも更新する必要があります。これを達成するための最良の方法は何ですか?2つのテーブルを持つ2つのクエリ?これはnosql環境の弱点ですか、それとも効率的な方法は何ですか?

4

3 に答える 3

2

基本的に2つのオプションがあります。

  1. 名前自体ではなく、ユーザーレコードからコースIDを参照してから、クライアント側の結合を実行します。
  2. 引き続き学生と一緒にフルコース名を保存し、必要に応じてこれらのフィールドを更新します。

どちらを選択するかは、システムを最適化しようとしているものによって異なります。学期ごとに1ダースほどのコース名を変更するだけの場合は、オプション2はおそらく問題になりません。

また、これがnosqlシステムの弱点であるという質問に答えるために、はい、これは絶対に弱点です。これは、Mongoのようなnosqlシステムが解決しようとしているタイプの問題ではありません。Mongoは特定の問題には最適ですが、他の問題には非常に悪いです。コースと学生のデータベースを維持することは、モンゴの強みの1つではないと思います。これは典型的なリレーショナルデータモデルであるため、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億ユーザー)の100,000の大学がある場合は、おそらくnoSqlが必要です。その場合、playOrmを使用すると、大学ごとに分割できるため、その状況で非常に簡単に参加できます。 (両方のテーブル)次に、「universityAパーティションのコース」と「universityAパーティションのユーザー」で単純に結合できます。まあ、それは行く方法の1つです。

于 2012-08-21T14:47:32.200 に答える