Вы можете написать свой собственный демон в качестве хранимой процедуры и запланировать запуск нескольких копий через равные промежутки времени, скажем, каждые 5 минут, 1 минуту, 1 секунду и т. Д.
используйте get_lock () сN четко определенных имен блокировок, чтобы прервать выполнение события, если еще одна копия события все еще выполняется, если вы хотите, чтобы одновременно выполнялось не более N параллельных копий.
Используйте «таблицу заданий» для вывода списка заданийвыполнить со столбцом идентификатора для определения порядка выполнения.Конечно, обязательно используйте хорошие методы транзакций и блокировок - это, в конце концов, повторное программирование.
Каждая строка может определять хранимую процедуру для выполнения и, возможно, параметры.Вы даже можете иметь несколько типов заданий, таблиц заданий и рабочих событий для разных задач.
Используйте PREPARE и EXECUTE с оператором CALL для динамического вызова хранимых процедур, имена которых хранятся в строках.
Затем просто добавьте строки по мере необходимости в таблицу заданий, даже вставляя их большими партиями, и пусть ваши рабочие события обрабатывают их так быстро, как только могут.
Я делал это раньше, как в Oracle, так и в MySQL, и это хорошо работает.Обязательно обрабатывайте ошибки и регистрируйте их где-нибудь, а также об успехе, в этом отношении, для отладки и аудита, а также для настройки производительности.N = # Процессоры могут не подходить лучше всего, в зависимости от ваших данных и типов заданий.Я видел, что N = 2xCPU лучше всего подходят для задач с интенсивным использованием данных, где большое количество параллельных дисковых операций ввода-вывода важнее вычислительных мощностей.