Трудно сказать, что было бы лучше, не зная схему вашей таблицы. Если многие пользователи будут проводить этот опрос, я бы порекомендовал вам выполнить фильтрацию в клиенте. Я имею в виду, отслеживайте каждое открытое задание, которое вы получаете из запроса, и отфильтровывайте их из запроса, если время опроса, связанное с этим заданием, составляет менее 5 минут. Когда время опроса, связанное с этим заданием, превысит 5 минут, запросите его снова.
Например, если вы запрашиваете сервер и открываете задания 1, 2 и 3, свяжите значение времени для каждого (оно будет одинаковым).
При следующем запросе к серверу (в данном случае через 10 секунд) убедитесь, что вы отфильтровываете задания, которые не старше 5 минут:
select * from table
where status = 'open' and jobid not in (1, 2, 3)
По истечении 5 минут вы должны удалить эти идентификаторы работы из предложения not in
.
Обратите внимание, что это решение оставит работу клиенту и не потребует никаких изменений схемы базы данных.
Изменить:
Интересно, но время работы в среднем составляет 5 минут, обычно от 1 до 8 минут. - Крис
Алгоритм все еще применяется. Вам нужно будет выбрать подходящий timeout
. Если вы выберете 1 минуту, клиент будет чаще получать ненужные данные (но узнает об изменении состояния раньше). Если вы выберете 8 минут, клиент будет реже получать ненужные данные (но будет знать об изменении состояния максимум через 8 минут). Вам нужно будет выбрать подходящий тайм-аут в зависимости от требований к программному обеспечению. Это компромисс, как и все в вычислительной технике.
Мое мнение: Это мобильное приложение: не загружайте 50 КБ каждые 10 секунд. Используется ли приложение, чтобы сообщить мне, когда ресторан теперь «открыт»? Если это так, то это нормально, если у вас 8 минутная задержка. Однако, если заданиями являются датчики ядерного реактора, задержка в 1 минуту может показаться большой:)