Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [xml]/[php]/[mysql]Optymalizacja wczytywania pliku xml do bazy
lechu80
post 20.02.2008, 09:51:37
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 20.02.2008

Ostrzeżenie: (0%)
-----


Witam wszystkich!

To moj pierwszy post na jakimkolwiek forum poswieconym programowaniu, bo do tej pory dobrze sobie radzilem sam z google ;-)
Ale nadszedl taki moment i potrzebuje rady, bardziej doswiadczonych osob...

Tworze system (php, xml, mysql) dla firmy, ktora jest posrednikiem ofert -> dane sa wczytywane skryptem z roznych adresow www w postaci plikow xml (uzywam do tego biblioteki curl), a nastepnie za pomoca simplexml wczytywalem ten plik i skladalem w petli w zapytanie insert do lokalnej bazy mysql (aby wszystkie oferty byly w jednym miejscu, latwiej w systemie sie wyszukuje).
Problem polega na tym, ze pliki xml maja od 10 do 300MB wielkosci:
1) dla plikow do 100MB trwa to dlugo (zwiekszylem wartosc max_execution_time, zeby w ogole skrypt mogl dzialac) - moze da sie szybciej? Jesli tak, to moze jakies rady?
2) dla plikow powyzej 100MB - simplexml w ogole sie zacina i po wprowadzeniu do bazy ok 1000 rekordow, przestaje dzialac -> macie jakeis pomysly? przejrzalem forum, niektorzy proponuja bibioteke SAX - czy ktos probowal tego w jakims podobnym systemie do mojego? czy poza tym jest jakies inne rozwiazanie?

Z gory dzieki za pomoc!
Leszek
Go to the top of the page
+Quote Post
smialy
post 20.02.2008, 11:21:35
Post #2





Grupa: Zarejestrowani
Postów: 60
Pomógł: 4
Dołączył: 23.05.2007
Skąd: Łódź

Ostrzeżenie: (10%)
X----


Spore te pliki XML. Chyba troche za duże jak na PHP. Całe ładować do pamięci - nie bardzo. Z tego co wiem to nawet ezPublish miał w którejś wersji 128 mega potrzebne na uruchomienie :/ Ale to nie 300 :]

Skoro to XML wiec powinno dać się wczytywać framgentami w którym można będzie znaleźć właściwą gałąź i wstawić do bazy, Powtarzać sekwencję wczytywania fragmentu i wstawiania, aż do końca pliku. :/


--------------------
openSuse, Eclipse i Aptana - daje rade
Go to the top of the page
+Quote Post
lechu80
post 24.02.2008, 16:50:52
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 20.02.2008

Ostrzeżenie: (0%)
-----


Jakos poradzilem sobie z tym problemem, ale jeszcze wydajnosc nie jest zadawalajaca...
Przede wszystkim zamiast simplexml_load_file(), ktore nie radzi sobie z plikami powyzej 70-80MB, uzylem fopen i fread do przeczytania pliku xml, a nastepnie przeanalizowalem plik xml poprzez xml_parser_create(). Udalo mie sie w ten sposob czytac pliki do 250MB (wczesniej ustawilem set_time_limit i ini_set('memory_limit') na odpowiednio duze wartosci), a czas przetwarzania zmniejszyc 3-5 krotnie (obecnie moge zapisac 72 tys. rekordow na godzine do bazy, wczesniej uzyskiwalem 15-25 tys na godzine).
Ale nie wiem czy to w ogole ma sens isc ta droga - moze ktos zna jakies inne rozwiazanie, ktore da przyzwoite rezultaty?
Z gory dzieki za pomoc!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.05.2025 - 07:37