MarkUsProject/Markus — pull request #1479 by zhangsu (2014-05-28 10:25:17+00:00)
Title: Assign grader performance

Grader assignment to groupings are currently done in nested loops, so
each grader/group combination will issue a query to the database, which
is slow. This can be solved by doing a bulk operation in single queries.

The view also requires some fields that are not eagerly loaded in the
controller, which introduces n+1 query problems.

This patch improves the back end performance of assigning, randomly
assigning and unassigning graders, as well as populating the grader
index page. Assigning graders to criteria is still slow. The front end
is also super slow (it takes a few seconds just to check all the
checkboxes when the number of groups is over 1000!).

This partially solves #1443. The front end JavaScript also has to be
GREATLY optimized to fully resolve that issue.

Tested:
- rake test:units
- rake test:functionals
- local server testing
- with
- 2 assignments
- 3 TAs
- 1000+ students and groups
- 2 * 3 * 1000+ = 6000+ TaMembership records
- wall clock response latency is < 5 second for the optimized
operations (only counting the back end, the front end can take more
time than the back end to load)