Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przetwarzanie dużej ilości danych w XML i grafiki
Forum PHP.pl > Forum > PHP
ZaqU
Witam,

Chciałbym zintegrować swój drobny portal ogłoszeń nieruchomości napisany na Laravelu 4 z systemem Asari.

Specyfikacja integracji dla zainteresowanych tutaj

W dużym skrócie: Jest to narzędzie do którego agencje nieruchomości wrzucają swoje oferty i dalej system rozsyła je na inne portale. Ja otrzymam na swój serwer mnóstwo plików XML z danymi ogłoszeń i obrazkami. Każdy plik XML muszę przetworzyć, a nieraz są to ilości ogłoszeń idące w kilka tysięcy w jednym pliku. Do tego dochodzą obrazki, po max. 10 na jedno ogłoszenie - każde należy przetworzyć dwa razy (zeskalować oryginał + stworzyć miniaturkę).

Moje pytanie do was - jak się za to zabrać? Jestem programistą Laravel i Symfony i szczerze powiedziawszy nigdy nie zajmowałem się takimi dużymi rzeczami, a przydałoby się zdobyć odpowiednią wiedzę. Gdyby dało się to rozwiązać za pomocą PHP, to byłoby idealnie, bo w tym języku czuję się jak ryba w wodzie.

Moją pierwszą myślą na rozwiązanie tego problemu, było zapisywanie w bazie który plik został już przetworzony i do którego momentu. To samo ze zdjęciami. Ustawić limit przetwarzania na np. kilkaset ofert i kilkadziesiąt obrazków, a następnie uruchamiać cyklicznie skrypt PHP przez CRON'a do momentu przetworzenia wszystkich ofert - wówczas plik usuwamy i tym sposobem mamy w bazie ogłoszenia, a na dysku gotowe do publikacji zdjęcia. Jednak pytanie czy to najlepszy sposób (bo na pewno nie jedyny), aby ten problem rozwiązać?

Czy jest jakaś szybsza i równie prosta (dla programisty PHP) metoda? Nie znam innych języków programowania i szczerze nie bardzo mi się widzi nauka czegoś nowego, od podstaw - bo wiadomo - jak coś się robi za pierwszym razem, to nie zawsze jest to najwyższych lotów, a ja nie chcę wracać do tematu kilka razy, tylko wykonać coś raz, a solidnie.

Pozdrawiam.
Pyton_000
Możesz zrobić tak jak zaproponowałeś czyli odpalasz sobie crona co np. 10 min (z ustawieniem lock na już odpalony proces co by kolejny nie odpalił się przed zakończeniem popredniego).
Każde odpalenie crona niech mieli 1 plik i go wywala (ew. przenosi w inne miejsce do archiwum).

Koniec operacji.
nospor
Kilka tysiecy w jednym pliku to cale nic. Mozesz to naraz przetworzyc.

Dotatkowo kazda oferta ma swoje unikalne ID wiec bedziesz wiedzial czy juz to obrabiales czy nie (na wypadek jakby cos w trakcie poszlo nie tak)
I tak, mozesz to spokojnie robic w php - jakos nic specjalnie skomplikowanego i duzego tu nie ma
ZaqU
Ten CRON i limitowanie ma swoje podstawy w tym, że już nie raz zdarzało mi się przekroczyć limity na moim serwerze. Czy to pamięci, czy czasu wykonania skryptu... Najbardziej obawiam się tych obrazków, bo u mnie (hosting współdzielony) jest narzucony limit na wykonywanie skryptów PHP do 30 sekund. A ciężko przetworzyć na współdzielonym kilkaset zdjęć w 30 sekund.
nospor
Wybacz, uznalem ze nie masz limitow.

Jesli tak to faktycznie musisz leciec kawalkami. I samo wczytanie xml tez nie mozesz robic na raz, bo pewnie przekroczysz limit pamieci. Musisz skrypt wczytywac tag za tagiem, pokolei
To moze byc pomocne:
http://php.net/manual/en/book.xmlreader.php
daniel1302
Dyrektywa declare która sprawdza czas wykonywania skryptu i jeśli zbliża sie do max execution Time to zapisuje stan i w kolejnym go wznawiasz.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.