I have a Rails website with three tables: User, Task, and TaskInstance. The Task table is like a master list of tasks, not coupled to any particular user, whereas the TaskInstance table contains records that indicate a user’s completion of a particular task. In other words, a TaskInstance has a User id, a Task id, and a completion status (boolean). A User has many TaskInstances.
I’d like to allow administrators to add new Tasks. Doing so should create a new TaskInstance for that Task for every User. However, that doesn’t sound like it would scale well. Say I have fifty thousand Users, creation of a new Task would require fifty thousand TaskInstances to be created immediately on the spot.
It would be good if some sort of lazy loading could be done instead, but I don’t know where I would do it. I could do it at login e.g. when a User logs in, check if a new Task has been created; if so, create a new TaskInstance only for that particular User. But then what about users that are already logged in when the new Task is created?
I guess I’m just wondering what the preferred approach to this sort of problem is.
Move this to the community wiki if you need to.
Don’t create the
TaskInstances right upfront, but only when they are needed. Since a newTaskgets created anyway, it can be displayed to any User, no matter if there is aTaskInstanceor not. As soon as a user decides to start with aTask, theTaskInstanceshould get instantiated.