将数据添加到数据库的最可扩展方法?

时间:2012-07-27 09:15:37

标签: ruby-on-rails database database-design scalability

我有一个包含三个表的Rails网站:User,Task和TaskInstance。 Task表就像一个主要的任务列表,没有耦合到任何特定用户,而TaskInstance表包含指示用户完成特定任务的记录。换句话说,TaskInstance具有用户ID,任务ID和完成状态(布尔值)。用户有许多TaskInstances。

我想允许管理员添加新任务。这样做应该为每个用户为该任务创建一个新的TaskInstance。然而,这听起来并不像它会很好地扩展。假设我有五万用户,创建一个新任务将需要立即在现场创建五万个TaskInstances。

如果可以做一些延迟加载会很好,但我不知道我会在哪里做。我可以在登录时进行,例​​如当用户登录时,检查是否已创建新任务;如果是这样,只为该特定用户创建一个新的TaskInstance。但那么在创建新任务时已经登录的用户呢?

我想我只是想知道这种问题的首选方法是什么。

如果需要,请将其移至社区维基。

1 个答案:

答案 0 :(得分:2)

不要预先创建TaskInstance,而是仅在需要时创建Task。由于无论如何都会创建新的TaskInstance,因此无论是否有Task,都可以向任何用户显示。一旦用户决定以TaskInstance开头,{{1}}就会被实例化。