0

私はruby/railsで語彙クイズアプリケーションを設計しています。動作する基本的なモデル/アソシエーションのセットアップがありますが、スケーラビリティが心配です。アプリケーションには一定数の単語が含まれます。簡単にするために、100としましょう。ユーザーは質問に進むことができます。質問は、以前に受けた質問を確認することで生成されます。質問は、単語と定義の4つの選択肢を提供します(1つは定義であり、他の3つの定義はランダムに選択されます)。

これが私のモデルと関連付けが現在設定されている方法です。

class User < ActiveRecord::Base
  has_many :user_questions
end

class UserQuestion < ActiveRecord::Base
  belongs_to :user
  belongs_to :vocab_word
end

class VocabWord < ActiveRecord::base
  has_many :user_question
end

この基本モデルを維持すると仮定すると、次のアプローチのどれを使用する必要がありますか?

  1. ユーザーごとに設定された数のUserQuestionオブジェクト(100)を用意し、計算列を使用して、特定の単語に対するユーザーのパフォーマンスの統計を保存します。(たとえば、ユーザー502は「arid」という単語を3回試行し、正解は2回応答しました)。
  2. 質問の試行ごとに、新しいUserQuestionオブジェクトを作成します。(たとえば、ユーザー502が「arid」を推測しようとしましたが、正しくありませんでした)

これらのアプローチのどちらかがスケーラブルですか?アプリケーションに100万人のユーザーがいる場合、最初の戦略ではuser_questionsに1億行が含まれます。2番目はそれ以上のものを持っている可能性があります。

4

1 に答える 1

2

もうすぐです。以下を使用してモデルを拡張し、さらにUserQuestionとユーザーの関連付けを少し修正することをお勧めします。

class User < ActiveRecord::Base
  has_and_belongs_to_many :user_questions
end

class UserQuestion < ActiveRecord::Base
  has_and_belongs_to_many :users
  belongs_to :vocab_word
end

class VocabWord < ActiveRecord::base
  has_many :user_question
end

class Attempt < ActiveRecord::base
  belongs_to :vocab_word
  belongs_to :user
  belongs_to :user_question

  attr_accessible :result
end

質問とユーザーの間に多対多の関連付けを行うには、user_questions_users関連付けテーブルが必要です。スケーラブルだと思います。インデックスを正しく設定してください。

于 2013-02-02T21:09:27.167 に答える