Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Obrobka kolosalnego pliku
pieto
post 24.01.2006, 20:10:03
Post #1





Grupa: Zarejestrowani
Postów: 227
Pomógł: 1
Dołączył: 12.05.2002
Skąd: gdańsk

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


Witam,
Muszę wykonać dość ambitną operacje napliku .xml
a mianowicie plik.xml o romiarze 250Mb wprowadzić so SQL'a
nie wiem do konca jak za to sie zabrać, chodzi o to by sparsować jego zawartość do języka SQL, rekordy odzielone są przez tagi <page></page> ale mniejsza z tym bo wiem jak to zrobić mam problem tylko jak wczytac krok po kroku jego zawartość, najlepiej aby pobrał najpierw pierwszy <page>terefere bla bla bla</page> (nie ladowal calosci) - obrobil poczym chwycil nastepny.

są jakieś odpowidnie funkcje które się nadają się do takiej operacji ?

z góry dzieki za helpa i pozdrawiam


--------------------
Materiały i Wypracowania znajdziesz na zgapa.pl i
Encyklopedii Zgapedia
Jedyny przedawkowany portal motoryzacyjny to autoholik.pl
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Ociu
post 24.01.2006, 20:54:19
Post #2





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




simplexml_load_file
Go to the top of the page
+Quote Post
hwao
post 24.01.2006, 21:38:57
Post #3


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




musisz tak... (w php mimo wsyztko nie polecam tego robic, ale jak nie znasz innych jezykow).

set_time_limit
  1. <?php
  2. ?>


w php ini ustawic musisz maxymalny rozmiar pamieci zajmowanej przez php na ponad plik czyli calkiem sporo smile.gif (w php ini tez mozesz ustaci ten time_limit na 0 - oznacz bez limitu).

Teraz zalezy jak wczytujesz ten plik, mozesz jako xml (to co napisal ociu) badz tez jako zwykly plik i parsowac samemu (polecam to co napisal ociu).

i ladujesz do bazy danych
Go to the top of the page
+Quote Post
FiDO
post 24.01.2006, 23:22:24
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Oj slabo mu doradziliscie.. bardzo slabo winksmiley.jpg

simplexml jest pamieciozerny i nie poleca sie go do duzych xmli.. a 250MB to juz jest kawal pliku... simplexml w tym wypadku zarżnął by serwer. Zreszta nie.. bo memory_limit w php.ini by na to nie pozwolil.. a nawet jak go zwiekszyc to nie zapominajcie, ze 250MB plik XML wcale nie bedzie zajmowal w pamieci 250MB w postaci SimpleXML'a.. raczej duzo wiecej, wiec tego ramu mogloby czasem byc malo.

W przypadku takich duzych plikow to jedynie przetwarzanie strumieniowe wchodzi w gre, zatem: http://www.php.net/manual/en/ref.xml.php Niestety to chyba ta najmniej przyjemna metoda na przetwarzanie XML'a, ale dla tego rozmiaru pliku nie widze innej sensownej opcji.


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
hwao
post 25.01.2006, 08:15:08
Post #5


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Fido jak ma okolo 1gb ramu to bedzie najprostrzy sposob na zrobienie tego
Go to the top of the page
+Quote Post
sf
post 25.01.2006, 08:27:19
Post #6





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


oczywiscie, ze to najlepiej zrobic poprzez php.net/xml jak pisal FiDO, nawet pliki 40 mb tak robilem... i wcale to nie jest takie skomplikowane, kaszka z mleczkiem dla kodera

przy okazji dodam, ze czesto sa ograniczenia na czas procesora skryptu php, wiec jesli nie mamy serwera dedykowanego to proponuje sie zastanowic nad perlem, ktory tak nie molestuje procesora winksmiley.jpg

Ten post edytował sf 25.01.2006, 08:31:12


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
FiDO
post 25.01.2006, 16:39:42
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Cytat(hwao @ 2006-01-25 08:15:08)
Fido jak ma okolo 1gb ramu to bedzie najprostrzy sposob na zrobienie tego

Obawiam sie, ze jednak nie smile.gif

Zrobilem na szybko maly test.. skrypt po zaladowaniu XML'a o wielkosci 7MB przez SimpleXML'a zajmowal ok 48MB w pamieci. Niestety taka obiektowa reprezentacja jest dosc mocno nadmiarowa, wiec roznice miedzy miejscem na dysku, a tym w pamieci sa dosc konkretne. Jesli by to przeskalowac na plik 250MB to wyjdzie, ze potrzeba prawie 2GB ramu... jest co prawda swap, ale to juz troszke przymulic kompa.

Cytat
oczywiscie, ze to najlepiej zrobic poprzez php.net/xml jak pisal FiDO, nawet pliki 40 mb tak robilem... i wcale to nie jest takie skomplikowane, kaszka z mleczkiem dla kodera

Nie napisalem, ze skomplikowane.. ale nie jest tak proste jak SimpleXML. Trzeba troche innego podejscia, ale oczywiscie jest to jak najbardziej do zrobienia i nie jest to trudne.


--------------------
Brak czasu :/
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: 19.07.2025 - 01:32