Prowadzę serwis turystyczny i mam kilkudziesięciu klientów którzy dają mi na mojej stronie ogłoszenia, reklamy itp.
Odbywa się to zasadzie abonamentu - czyli np. włączam komuś reklamę na rok lub pół roku lub kwartał a on raz na okres opłaca mi abonament za tę usługę.
Piszę teraz na własne potrzeby system, który pilnowałby mi terminów, wystawiał fakturki proforma, powiadamiał mailem kogo trzeba o fakcie fakturowania itd.
Całości koniec końców pilnuje jeden plik uruchamiany cronem raz dziennie.
W pliku tym wykonuję kilka zadań i mam wrażenie, że nie jest on optymalnie przemyślany od strony wydajności ponieważ z logu, który sobie tworzę podczas jego wykonania widzę, iż nie wszystkie zadania wykonywane są płynnie.
Krytycznym momentem jest jak sądzę moment gdzie:
- pobieram z bazy wszystkie abonamenty
- rekordy jeden po drugim sprawdzam z pomocą:
<?php $pytanie="SELECT * FROM ".$prefix."_abonamenty"; { } ?>
- jeśli w danym rekordzie występuje konieczność fakturowania - sprawdzam to po datach: dzisiejszej i przechowywanej w tabeli abonamentów (końca abonamentu)
wykonuję kolejne kroki:
1) wygenerowanie faktury i dodanie jej do bazy
2) wygenerowanie faktury do pfd (robię to za pomocą klasy którą znalazłem w sieci a działa ona na zasadzie takiej iż na podstawie htmla generuje pdfa - czyli najpierw funkcją generuję sobie kompletny html faktury z pełnymi danymi a następnie zapodaję to do tej klasy czego wynikiem jest plik pdf)
3) plik pdf zapisuję na dysku w katalogu tymczasowym
4) uaktualniam dany abonament o informację iż został on zafakturowany
5) za pomocą pear mail (pear-mime) tworzę maila którego wysyłam do klienta i do mnie (bcc) - do maila dodaję załącznik pdf (wygenerowany wcześniej)
6) kasuję z dysku pdf który już nie jest potrzebny
Punkty 1-6 wykonuję w pętli while() i z tego co widzę w logu skrypt przycina się podczas fakturowania więcej niż 2 abonamentów. Przycina się na wysyłaniu maila. Generowanie pdf zajmuje około 2 sekund
I teraz pytanie - jak od strony koncepcyjnej podejść to tego tematu tak by mój ISP nie wywalił mnie z serwera jak zapodam do zafakturowania jednocześnie powiedzmy 30 abonamentów (obciążenie serwera) a dwa by skrypt wykonywał się płynnie.