![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 15.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
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ą:
- 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. Ten post edytował mosky 4.05.2006, 09:03:03 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%) ![]() ![]() |
jesli chodzi o wysyłanie maili... robisz tabele 'do_wyslania'... i cronem powiedzmy co 10 min sprawdzasz czy cos w niej jest, jesli jest wysyłasz 1 wiadomosc, i usuwasz rekord
jesli chodzi o '4) uaktualniam dany abonament o informację iż został on zafakturowany' sprawdz czy na pewno masz indeksy na odpowiednich polach. wiecej tak na szybko nie przychodzi mi do glowy |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 15.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(ActivePlayer @ 2006-05-04 09:04:09) robisz tabele 'do_wyslania'... i cronem powiedzmy co 10 min sprawdzasz czy cos w niej jest, jesli jest wysyłasz 1 wiadomosc, i usuwasz rekord (...) sprawdz czy na pewno masz indeksy na odpowiednich polach. (...) Witaj, Dziękuję za odpowiedź. Co do wysyłania: Jeśli dobrze zrozumiałem w jednym cyklu crona wysłać 1 mail? Czyli teoretycznie ustawiając 10 minut dla crona mógłbym wysłać 6 maili na godzinę. Oczywiście można zwiększyć częstotliwość w przypadku większej ilości wysyłek. Ale czy tak częste uruchamianie crona nie obciąża w jakiś sposób serwera? Co do indeksów: w zasadzie błędu tu być nie moze ponieważ w tabeli abonamentu mam pole faktura które ma wartość 1 (termin do fakturowania ale faktura już wystawiona) lub 0 (termin do fakturowania lub nie ale nie fakturowany) Zatem w zależności od potrzeby zmieniam sobie zawartość tego pola pytaniem
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 6.05.2006 Ostrzeżenie: (0%) ![]() ![]() |
Ja tam na twoim miejscu szukał bym rekordów spełniających kryteria.. czyli WHERE data >= coś tam
Tak to baza wyszuka tylko te rekordy które Ci są potrzebne a nie takie ręczne sprawdzanie.. nie potrzebnie przeszukujesz baze.. i nie wykorzystujesz praktycznie możliwości które daje Ci MySQL wogóle jeżeli szukasz po dacie to dodaj do niej indeks w bazie. i powinno być szybciej.. dużo szybciej. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 13:20 |