Cykliczne wykonywanie zadań

Pytanie może nie do końca dotyczy Yii. W jaki sposób wykonywać cykliczne zadania, wykonujące się dość długo i mające spore zapotrzebowanie na pamięć? Chodzi o np. przeliczenie statystyk dla użytkownika (ile napisał postów itd.), cykliczne odpytywanie jakiegośAPI by odświeżyć dane albo wprowadzenie X rekordów i jednorazowe odpytywanie API by uzupełnić niezbędne dane. W przypadku API to może być nawet kilka(naście) tysięcy zapytań na dobę.

Jak rozłożyć takie zadania, kontrolować, które się wykonało i przy okazji nie zawiesić serwera?

Do takich zadań najlepiej zaprząc język programowania, który radzi sobie prężniej z zarządzaniem pamięcią niż PHP, np. Javę. Jeśli jednak w grę wchodzi tylko pehap to zawsze można pobawić się z odpalaniem komend w osobnym procesie i wywoływaniem zadań cyklicznie w cronie.

Zrób to na bazie danych. W zależności od ilości danych i ilości dostępnego RAMu możesz spróbować wykorzystać np silnik MEMORY z MySQL - wtedy nie zajeździsz dysku masą zapisów przy wprowadzaniu tymczasowych danych. Takie zadania odpala się tylko i wyłącznie z użyciem crona. Jeśli dane będą w bazie a w samym skrypcie nie będziesz miał żadnych wycieków pamięci, problem wysokiego zapotrzebowania na pamięć powinien zniknąć.

Co do kontroli tego kiedy i z jakim skutkiem zadania się wykonały, to trochę cięższa sprawa. Możesz do bazy danych wrzucać harmonogram prac, z którego wywołania skryptów przez cron będą zdejmowały kolejne zadania i oznaczały ich stan (np w toku, wykonane, błąd).