У меня есть таблица, которая содержит задачи и их статус, схожие с:
| task_id | task_status |
+---------+-------------+
| 71 | 1 |
| 85 | 3 |
| 110 | 2 |
Давайте назовем таблицу TASKS
.
Состояние - это перечисляемое значение, например:
- =
SCHEDULED
- =
RUNNING
- =
DONE
Мне нужно опросить этот статус, чтобы сообщитьПользователь о задаче, которую он начал.В настоящее время я просто опрашиваю его на сервере, используя цикл while
, например, такой псевдокод:
status = old_status
while(timeout_not_expired and status==old_status) {
status = get_status("SELECT task_status FROM TASKS WHERE task_id=%1", task_id)
wait(check_interval)
}
return status
Это неприятно, не только спамит сервер Oracle SQL, но и наш лог SQLзапросов.
Так что я немного погуглил и нашел около SELECT ... FOR UPDATE
.Я попытался выполнить это утверждение:
SELECT
task_status
FROM TASKS
WHERE task_id = 361
FOR UPDATE OF task_status
Но оно возвращается немедленно.Итак, вопрос:
- Это даже для чего
FOR UPDATE
? - Если да, как мне заставить его ждать в очереди с таймаутом?