Возможно что то вроде этого.
Проверяющий: [ {непроверенные док-ты: кол-во свободных(непроверенных) параграфов} ]
Документ: [ Параграф: {проверка1(свободен/занят/valid/invalid), проверка2(свободен/занят/valid/invalid)} ]
Мы бьем на две части.
Сначала находим документ, который текущий юзер еще не проверял и который имеет наименьшее кол-во непроверенных параграфов.
А затем пытаемся захватить параграф в этом документе.
Если 1000 пользователей делают запрос, и для них для всех один и тот же документ будет следующим, что делать?