Получить дифференциальные данные с момента последнего запроса из MySQL - PullRequest
1 голос
/ 18 марта 2012

Я создаю мобильное приложение, которое каждые 10 секунд опрашивает базу данных на наличие открытых вакансий ($ .getJSON).Результат запроса может быть довольно тяжелым (около 50 Кбайт в формате JSON), поэтому я ищу способы его облегчить.Я предполагаю, что есть способ извлечь только изменения из базы данных, но я не могу обернуться вокруг него.

В настоящее время в части PHP я просто делаю SELECT * FROM table WHERE status = 'open'.Работа будет оставаться открытой около 5 минут, поэтому за это время я бесполезно получаю много данных, которые у меня уже есть.Вместо этого мне нужно было бы получить только новые задания (добавленные после моего последнего запроса) и, вероятно, те задания, которые тем временем были закрыты, чтобы я мог удалить их из списка.

Есть ли практическиеспособ выполнить это?Может быть, на стороне PHP?

Спасибо!

1 Ответ

0 голосов
/ 18 марта 2012

Трудно сказать, что было бы лучше, не зная схему вашей таблицы. Если многие пользователи будут проводить этот опрос, я бы порекомендовал вам выполнить фильтрацию в клиенте. Я имею в виду, отслеживайте каждое открытое задание, которое вы получаете из запроса, и отфильтровывайте их из запроса, если время опроса, связанное с этим заданием, составляет менее 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 минуту может показаться большой:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...