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
26.11.2007, 13:17:40
Uzyj DOM'a, jesli tylko CZYTASZ XML'a to zuzywa on bardzo malo pamieci, wlasciwie O(1)
albo XMLReadera
Kocurro
26.11.2007, 20:20:28
dr_bonzo: poczytaj o DOM'ie

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

Jedynie jakieś SAX'y czyli np. XMLReader.
dr_bonzo
27.11.2007, 01:05:14
Kocurro - no wlasnie sprawdzalem zuzycie pamieci za pomoca funkcji w php i bylo ciagle stale, nawet dla duzych plikow, co mnie tez zdziwilo.
Kocurro
27.11.2007, 01:47:04
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ć
dr_bonzo
27.11.2007, 09:21:24
Szit, Kocurro masz racje.
Glupie memory_get_usage() pokazuje ciagle male wartosci.
A 'top' dla pliku 100MB wskazuje 200MB pamieci zajetej :/
Kocurro
27.11.2007, 11:20:20
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.