Позвольте T
быть набором Задач, W
будет набором Рабочих, работающих над T
.
Я полагаю, чтобы получить случайный t
из T
и перейти к любому w
от W
.
Как только w
будет сделано с t
, я отмечу t завершенной (представьте sql запись с isCompleted
логическим значением).
Каждый t
только должен быть сделано только w
.
Исходная логика c проста:
When w requests for t:
get random t from T where t.isCompleted is False.
When w submits t:
mark t.isCompleted to True.
Однако после попытки одного цикла несколько t
имеют очень странные свойства.
Причина, как T
становится меньше, другой w
имеет более высокий шанс получить тот же t
до его завершения.
w1 gets t1.
w2 gets t1 before w1 submits.
w1 submits.
w2 submits.
Теперь есть 2 записи t1'
(ответы представлены как w1
и w2
).
Есть ли обходной путь для этой проблемы?
Учитывая У меня есть 3-х уровневая архитектура (клиент, серверная часть, БД).
Как лучше поддерживать состояние для обеспечения этой согласованности.
Или любые другие предложения.
Некоторые идеи:
- Таблица «очереди» в БД
- «Очередь» в бэкэнде, обнаружены некоторые проблемы с масштабированием
- Маркер истечения срока действия на стороне клиента.