Как справедливо распределить работы среди пользователей?
В общем задача поначалу показалась мне простой, но когда я стал прикидывать на реальных наборах данных, оказалось что не все так просто (для меня). Условие: есть некоторое количество (любое) экспертов (пользователей), которые проводят экспертную оценку заявок. На каждую заявку выделяется два эксперта. Особенность заключается в том, что эксперт_1 проводит сложную работу, а эксперт_2 более простую. Заявки появляются дискретно во времени (одна за другой). Вся информация о том кто сколько чего хранится в БД. Задача: распределять сложную и простую работу между экспертами равномерно (справедливо).
Примечание: в любой момент может появиться новый эксперт без багажа выполненных работ. Нельзя заставлять его отрабатывать за всех в течение ближайших лет. :)
Гениально! А главное, что даже очередей создавать не нужно, потому что они уже есть - это список выполненных экспертиз. В них хранится тип (простая или сложная) и, главное, есть автоинкрементный id.
Таким образом задача сводится к тому, чтобы для каждого эксперта получить максимальный id существующей экспертизы из нужной очереди, а потом среди всех экспертов выбрать того, у кого он минимальный. Он и должен выполнять следующую работу.
Естественно, прежде всего нужно выбирать среди тех, у кого вообще нет экспертиз.
Блин! Элементарный SQL-запрос!
Спасибо за наводку!