У меня есть таблица с 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 записей не обновляются однажды - процесс должен запуститься по тому, после того как все записи обновляются однажды.
У меня есть некоторая идея о том, как это могло быть достигнуто, но я уверен, что существуют более эффективные способы сделать ее.
Какие-либо предложения?
Вы можете использовать красно-черную систему (например, для управления кластером).
Обычно все строки начинаются черным. Когда вы запустите свой cron, он пометит обновленные строки как «красный». Как только все строки станут красными, вы переключаетесь и начинаете превращать все красные строки в черные. Вы продолжаете это чередование, и оно должно позволить вам эффективно отмечать строки, чтобы вы не обновляли их дважды. (Вы можете сохранить любую желаемую цветовую цель в файле или в чем-то еще, чтобы она была доступна всем кронам)
Я бы просто запускал скрипт PHP каждые 10/5 минут с помощью cron, а затем использовал бы PHP функции времени и даты для выполнения остальной логики. Если вы не можете рассчитать время, вы можете сохранить переменную маркировки позиции в небольшом файле.