Ruby on rails RoR词汇测验应用程序可伸缩性

Ruby on rails RoR词汇测验应用程序可伸缩性,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在用ruby/rails设计一个词汇测验应用程序。 我有基本的模型/关联设置,可以正常工作,但我担心可伸缩性。 应用程序中将有一组字数。为了简单起见,让我们假设100。 用户将能够继续进行一个问题,该问题将通过查看他们以前遇到的问题生成。该问题将为定义提供一个单词和4个选项(一个是定义,另外三个定义是随机选择的) 以下是我目前建立模型和协会的方式 class User < ActiveRecord::Base has_many :user_questions end class

我正在用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
class用户
假设我要保留这个基本模型,我应该使用以下哪种方法

  • 每个用户都有一组UserQuestion对象(100),并使用 用于存储用户性能统计信息的计算列 特别的词。(例如,用户502尝试使用单词'AND'3 次,正确回答了2次)
  • 每个问题 尝试创建一个新的UserQuestion对象。(例如,用户502尝试 猜测“干旱”是不正确的)

  • 这两种方法都是可伸缩的吗?如果应用程序有一百万用户,第一个策略将有一亿行用户问题。第二个可能不止这些。

    你就快到了。我建议用以下内容扩展您的模型,再加上对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
    
    class用户

    您需要一个用户-问题-用户关联表,以便在问题和用户之间建立多对多关联。我相信它是可伸缩的。确保正确设置索引。

    “如果应用程序有一百万用户”-听起来是个不错的问题,也许你现在不需要担心它了?一旦你有了这么多的用户,你可能会使用memcache和其他技术来扩展,而不仅仅是依赖数据库。哈哈,是的,这将是一个非常好的问题。我提到它只是为了强调我想在第一次正确地进行数据库设置。