Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ Cron N-razy za dnia

Napisany przez: #luq 23.10.2012, 18:03:55

Hej,

mam aplikacje w która jest rankingiem. Punkty rankingowe są przeliczane raz dziennie (w sensie generowanie nowego rankingu). Jako że przeliczenie wszystkich punktów trwa dość długo ostatnio podzieliłem to na mniejsze części, tych części może być zmienna liczba N. Tj. dziś może być tych kroków 20 a jutro 25. Dlatego zastanawiam się jak odpalić cronem całą listę kroków (tzn dziś cron ma się odpalić dokładnie 20 razy a jutro dokładnie 25).

2 pomysły które mi przychodzą do głowy:

1. Odpalać co minute crona i podczas ostatniego kroku zapisywać sobie flage typy "dziś już wygenerowano ranking" i przy następnym odpaleniu crona nic się nie dzieje bo ta flaga jest ustawiona.

Rozwiązanie te jest nie fajne ponieważ w przypadku 120 kroków na wygenerowanie całego rankingu muszę czekać 2h.

2. Odpalić crona raz i po końcu jednego kroku walić nagłówek 'Location: /ponowneWywolanieTejStrony'

A może ktoś ma lepszy pomysł? ;>

Napisany przez: abort 23.10.2012, 19:22:02

uwielbiam jak programiści używają sformułowań czasowych "dużo danych", "dość długo", "dużo pamięci", itp...
"Dużo danych" to może być np. 8KB (limit na $_GET), 8MB (limit na $_POST), 128M (np. ustawiony limit pamięci dla procesu PHP), 4GB (dla 32bit), 25 lub 50GB (dla BluRay)... Anyway, można tak długo. I dla każdego z wcześniej użytych sformułowań.

Ile to jest dla Ciebie "dość długo"? 5minut czy 5 godzin?

Napisany przez: #luq 24.10.2012, 07:31:04

Nie jestem w stanie sprecyzować Ci ile dokładnie, bo to zależy od tego z jakiego przedziału czasowego taki ranking jest budowany.
Uściślając - jest to aplikacja która zlicza aktywności fanów na danym fanpage`u - zlicza ich posty, komentarze, lajki dodając za każdą aktywność różną ilość punktów. Całość może trawać długo z kilku powodów:

- opóźnienie związane z pobieraniem danych z openGrapha facebooka
- dość duży przedział czasowy np. 2 mc - czyli jakieś 100-200 postów na fanpage`u, przyjmując że każdy post polubiło około 100 osób a skomentowało 50 trochę liczenia jednak jest.

Poza tym nie mam dedyka a więc muszę zmieścić się w limicie czasu odpowiedzi na apache`u a także mieć możliwość podpięcia tego do dowolnie popularnego fanpage`a.

Napisany przez: alegorn 24.10.2012, 10:31:40

gdzie to przeliczasz? mysql?
jesli tak, to poczytaj o events'ach

pomysl?
optymalizacja pracy, jesli sie tak dlugo wykonuje - to moze cos jest zle zaprojektowane??

pomysl nad tym, bo co bedzie dalej, jesli tych danych przybedzie jeszcze wiecej, a ty juz teraz nie jestes w stanie ich obsluzyc.

wydaje mi sie ze powinienes przemyslec sposob dzialania, byc moze zainteresowac sie innym softem? np bazami nosql ?

jedno jest pewne, odsuwasz w czasie jedynie problem który i tak bedziesz musiał rozwiazac w przyszlosci... tyle ze bardziej skumulowany.

j.

Napisany przez: lukaskolista 25.10.2012, 09:25:30

Cytat
Odpalić crona raz i po końcu jednego kroku walić nagłówek 'Location: /ponowneWywolanieTejStrony'
Przeanalizuj, czy to ma jakikolwiek sens i czy w ogole zadziala.

Po co Ci jakies kroki? Jeden skrypt dba o aktualizacje danych, a drugi je przelicza. Ten ktory przelicza jest niezalezny od tego, ktory aktualizuje, wiec przeliczanie bedzie szybkie.

Popatrz jak jest na allegro. Wystawiasz aukcje i od razu dostajesz link do aukcji, natomiast w panelu "moja sprzedaz" aukcja jest widoczna dopiero po chwili. Moral z tego jest taki, ze dane zostaly zapisane, a jakis inny skrypt po chwili z nich skorzystal i je przetworzyl.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)