Как эффективно выполнить это задание крона?

У меня есть таблица с 200 строками. Я выполняю задание крона каждые 10 минут для выполнения некоторого вставляемый/обновлять операцию на таблице. Операция должна быть выполнена только на 5 строках за один раз каждый раз прогоны задания крона. Таким образом в первых 10 минимальных записях 1-5 обновляются, записи 5-10 на 20-й минуте и так далее.

Когда прогоны задания крона в 20-й раз, все записи в таблице были бы обновлены точно однажды. Это - то, что должно быть достигнуто, по крайней мере. И следующее задание крона должно повторить процесс снова.

Проблема: это, каждый раз крон прогоны задания, вставить/обновить операция должна быть выполнена на N строки (не всего 5 строк). Так, если N 100, все записи были бы обновлены всего 2 заданиями крона. И следующее задание крона повторило бы процесс снова.

Вот пример:

Это - таблица, которую я в настоящее время имею (200 записей). Каждый раз, когда задание крона выполняется, оно должно выбрать N записи (который я установил как переменная в PHP), и обновление time_md5 поле со значением MD5 текущего времени.

+---------+-------------------------------------+ 
|      id | time_md5                            | 
+---------+-------------------------------------+ 
|      10 | 971324428e62dd6832a2778582559977    |  
|      72 | 1bd58291594543a8cc239d99843a846c    |  
|       3 | 9300278bc5f114a290f6ed917ee93736    |  
|      40 | 915bf1c5a1f13404add6612ec452e644    |  
|     599 | 799671e31d5350ff405c8016a38c74eb    |  
|      56 | 56302bb119f1d03db3c9093caf98c735    |  
|     798 | 47889aa559636b5512436776afd6ba56    | 
|       8 | 85fdc72d3b51f0b8b356eceac710df14    |     
|      .. | .......                             |     
|      .. | .......                             |     
|      .. | .......                             |     
|      .. | .......                             |     
|     340 | 9217eab5adcc47b365b2e00bbdcc011a    |  <-- 200th record   
+---------+-------------------------------------+ 

Так, первая запись (идентификатор 10) не должна быть обновлена несколько раз, пока все 200 записей не обновляются однажды - процесс должен запуститься по тому, после того как все записи обновляются однажды.

У меня есть некоторая идея о том, как это могло быть достигнуто, но я уверен, что существуют более эффективные способы сделать ее.

Какие-либо предложения?

1
задан Yeti 11 May 2010 в 17:50
поделиться

2 ответа

Вы можете использовать красно-черную систему (например, для управления кластером).

Обычно все строки начинаются черным. Когда вы запустите свой cron, он пометит обновленные строки как «красный». Как только все строки станут красными, вы переключаетесь и начинаете превращать все красные строки в черные. Вы продолжаете это чередование, и оно должно позволить вам эффективно отмечать строки, чтобы вы не обновляли их дважды. (Вы можете сохранить любую желаемую цветовую цель в файле или в чем-то еще, чтобы она была доступна всем кронам)

2
ответ дан 3 September 2019 в 00:39
поделиться

Я бы просто запускал скрипт PHP каждые 10/5 минут с помощью cron, а затем использовал бы PHP функции времени и даты для выполнения остальной логики. Если вы не можете рассчитать время, вы можете сохранить переменную маркировки позиции в небольшом файле.

0
ответ дан 3 September 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: