Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Duże pliki XML
mhs
post 26.11.2007, 11:35:36
Post #1





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


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.

Ten post edytował mhs 26.11.2007, 11:37:22
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
dr_bonzo
post 26.11.2007, 13:17:40
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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

albo XMLReadera

Ten post edytował dr_bonzo 26.11.2007, 13:18:00


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Kocurro
post 26.11.2007, 20:20:28
Post #3





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


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.
Go to the top of the page
+Quote Post
dr_bonzo
post 27.11.2007, 01:05:14
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Kocurro - no wlasnie sprawdzalem zuzycie pamieci za pomoca funkcji w php i bylo ciagle stale, nawet dla duzych plikow, co mnie tez zdziwilo.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Kocurro
post 27.11.2007, 01:47:04
Post #5





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


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
Go to the top of the page
+Quote Post
dr_bonzo
post 27.11.2007, 09:21:24
Post #6





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Szit, Kocurro masz racje.
Glupie memory_get_usage() pokazuje ciagle male wartosci.
A 'top' dla pliku 100MB wskazuje 200MB pamieci zajetej :/


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Kocurro
post 27.11.2007, 11:20:20
Post #7





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


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).
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: 24.06.2025 - 09:49