Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Duże pliki XML
Forum PHP.pl > Forum > PHP
mhs
Witam serdecznie,

muszę przerzucić zawartość dosyć dużych plików XML (powyżej 100 mega) do bazy danych. Pytanie - w jaki sposób to mogę zrobić? Znalazłem jakieś tematy na ten temat na forum, ale nic takiego konkretnego co by mi pomogło. Niestety z wykorzystaniem simplexml nie bardzo wychodzi ponieważ serwer wywala błędy z racji tego, że zbyt dużo pamięci potrzeba do tej operacji. Będę wdzięczny za wszelkie wskazówki oraz jakiś przykładowy kod który będę mógł sobie przenieść i zastosować u siebie.

Pozdrawiam,
mhs.
dr_bonzo
Uzyj DOM'a, jesli tylko CZYTASZ XML'a to zuzywa on bardzo malo pamieci, wlasciwie O(1)

albo XMLReadera
Kocurro
dr_bonzo: poczytaj o DOM'ie biggrin.gif on cały czas ma dane w pamięci, więc najpierw czyta plik, parsuje go i tworzy strukturę drzewa, która pewnie będzie niewiele mniejsza od pliku biggrin.gif

Jedynie jakieś SAX'y czyli np. XMLReader.
dr_bonzo
Kocurro - no wlasnie sprawdzalem zuzycie pamieci za pomoca funkcji w php i bylo ciagle stale, nawet dla duzych plikow, co mnie tez zdziwilo.
Kocurro
Te funkcje mogą błędnie zwracać wynik. Z tego co kojarzę to one podają tylko ilość pamięci zajętej przez Twoje zmienne. A nie podają ilości pamięci, która idzie na przechowywanie danych w modułach (extensions). Ale mogę się mylić.

W każdym bądź razie dla dużych danych lepiej SAX'a używać winksmiley.jpg
dr_bonzo
Szit, Kocurro masz racje.
Glupie memory_get_usage() pokazuje ciagle male wartosci.
A 'top' dla pliku 100MB wskazuje 200MB pamieci zajetej :/
Kocurro
No niestety ... to memory_get_usage wskazuje zużycie pamięci wewnętrznej heap managera przez zmienne php'a ... niestety ilości pamięci zajmowanej przez samego php'a i jego moduły tak łatwo nie sprawdzisz (php bierze sobie dodatkową pamięć na heap managera a także moduły często mają własne bufory, strultury itp) ani chyba nawet nie ograniczysz (ale z tym nie jestem pewien).
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.