Пауза в cron-скрипте из-за ограничений в системе - PullRequest
0 голосов
/ 14 января 2012

У меня есть сценарии cron, которые входят в систему на другом сервере, получают информацию для обновления моих таблиц в моей базе данных, а после завершения закрывает соединение и отправляет мне электронное письмо.

Проблема, которую я сейчас получаю, состоит в том, что они развернули ограничение, согласно которому я могу обновлять только 20 строк за 60 секунд.

Я посмотрел на функцию sleep (), и кто-топредложение создавать партии и тд.Какой лучший способ справиться с этим и получить хорошее решение.Мне нужно, чтобы сценарий продолжался, пока все строки в этой таблице не будут обновлены.

1 Ответ

0 голосов
/ 14 января 2012

Сон действительно, как вы обычно делаете это.В PHP sleep может спать только полные секунды, поэтому используйте usleep или time_nanosleep, если вы выполняете второй метод.

Если вы хотите сделать предположение, что все ваши запросы выполняются мгновенно, ивы просто запускаете пакет, тогда очень легко ограничить до 20 рядов за 60 секунд: спать 3 секунды после каждого ряда.Если ваши запросы не являются мгновенными, вы добавляете меньше строк в секунду.

Если вы хотите, вы можете рассчитать время вставки и поспать 3 секунды, это гарантирует 20 строк в 60 секунд,до тех пор, пока для вставки каждой строки по отдельности требуется менее 3 секунд.Если они будут работать дольше, вы упадете ниже 20 за 60 секунд.Я полагаю, что это на самом деле не стоит - у него будет плохой побочный эффект от того, что ваш инсертор будет работать тяжелее, когда база данных уже перегружена.

Если вы не в режиме автоматической фиксации, вам понадобитсясовершать довольно часто - обычно плохая идея хранить незафиксированные изменения дольше, чем необходимо.

Наконец, если вам нужно поддерживать 20 строк / 60 секунд, усредненных за более длительный период времени (и ваши входящие данные являются пакетными)Вы получаете возможность перейти к фильтру токенов-корзин: каждые 3 секунды (60 ÷ 20 секунд) вы добавляете «токен» в «корзину».Ведро вмещает до 20 жетонов.Каждый раз, когда вы вставляете строку, вы удаляете токен из корзины - если корзина пуста, вы ждете, пока ее нет.

...