![]() |
![]() ![]() |
![]() |
![]()
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 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 4 Dołączył: 23.05.2007 Skąd: Łódź Ostrzeżenie: (10%) ![]() ![]() |
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
|
|
|
![]()
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! |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.05.2025 - 07:37 |