RoR Vocabulary测验应用程序的可伸缩性

时间:2013-02-02 20:47:45

标签: ruby-on-rails ruby

我正在ruby / rails中设计一个词汇测验应用程序。 我有基本的模型/关联设置,但我担心可伸缩性。 应用程序中将有一定数量的单词。为简单起见,我们说100。 用户将能够进行问题,该问题将通过查看他们之前遇到的问题而生成。这个问题将为定义提供一个词和4个选择(一个是定义,另外三个是随机选择)。

以下是我目前设置模型和关联的方式;

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尝试 猜猜'干'并且不正确)
  3. 这些方法中的任何一种都可以扩展吗?如果应用程序有一百万用户,则第一个策略在user_questions中将有1亿行。第二个可能远不止于此。

1 个答案:

答案 0 :(得分:2)

你快到了。我建议使用以下内容扩展您的模型,以及对UserQuestion和User association的轻微更正。

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关联表才能在问题和用户之间建立多对多关联。我相信它可以扩展。确保正确设置索引。