私は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
この基本モデルを維持すると仮定すると、次のアプローチのどれを使用する必要がありますか?
- ユーザーごとに設定された数のUserQuestionオブジェクト(100)を用意し、計算列を使用して、特定の単語に対するユーザーのパフォーマンスの統計を保存します。(たとえば、ユーザー502は「arid」という単語を3回試行し、正解は2回応答しました)。
- 質問の試行ごとに、新しいUserQuestionオブジェクトを作成します。(たとえば、ユーザー502が「arid」を推測しようとしましたが、正しくありませんでした)
これらのアプローチのどちらかがスケーラブルですか?アプリケーションに100万人のユーザーがいる場合、最初の戦略ではuser_questionsに1億行が含まれます。2番目はそれ以上のものを持っている可能性があります。