Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wydajność odczytu z bazy XML, Baza danych w formacie .xml
PoProstuRadek
post 12.02.2010, 12:57:53
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 12.02.2010

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


Witam,

sytuacja wygląda tak : musze odczytać dane z bazy danych zapisanej w formacie .xml, która znajduje się na zewnętrznym serwerze (tzn. nie na tym, na którym działa skrypt).
Plik tej bazy zajmuje jakieś 5-6 Mb i jest ona stale uaktualniana. Mój problem polega na tym, że nie wiem jak zrealizować odczytywanie z tej bazy — tj. mam na myśli to, że zwykłe parsowanie przez np. SimpleXML nie bardzo przechodzi, bo to jednak zajmuje troche czasu, aby serwer ją załadował, odczytał dane i wyświetlił.

Jak to rozwiązać tak, aby wyświetlanie było w możliwie krótkim czasie ? Dodam, że baza ma około 100 000 linii, a chodzi tu po prostu o listę produktów sklepu (opis, cena, itp.).

Pozdrawiam,
Radek
Go to the top of the page
+Quote Post
erix
post 12.02.2010, 13:16:16
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Klasa XMLReader dostępna w PHP.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
ucho
post 12.02.2010, 13:25:30
Post #3





Grupa: Zarejestrowani
Postów: 300
Pomógł: 32
Dołączył: 31.07.2006

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


Ja ściągam takie zewnętrzne pliki raz na np 30. minut i zapisuje lokalnie w postaci zserializowanej tablicy
Go to the top of the page
+Quote Post
PoProstuRadek
post 12.02.2010, 13:34:32
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 12.02.2010

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


Dzięki za szybkie odpowiedzi,

@ucho : też o tym myślałem, ale jak to konkretnie robisz ? Tj. dajesz to jakoś w crona, czy jak ?

@erix : czy ta klasa rzeczywiście jest na tyle szybka ? Wybacz pytanie, ale po prostu nie zajmuje się PHP tak na co dzień.
Go to the top of the page
+Quote Post
erix
post 12.02.2010, 13:57:10
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




XMLReader jest najszybszym dostępnym sposobem odczytu plików XML w PHP, gdyż pozwala na odczyt strumieniowy i - AFAIK (ale mogę się mylić) - nie przeprowadza walidacji na starcie.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
PoProstuRadek
post 12.02.2010, 14:00:00
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 12.02.2010

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


No OK, ale tak się zastanawiam, bo skoro plik tej bazy zajmuje jakies 5-6 Mb, to przeciez i tak nie uniknę każdorazowego ściągania go. Wobec tego, chyba lepiej byłoby ściągać ją na dysk i co jakiś czas aktualizować. Tylko jak to zrealizować ? Pytałem o crona, jak byś to zrealizował ? Mam na myśli, żeby to ściąganie np. raz na dzień, działo się automamtycznie.
Go to the top of the page
+Quote Post
erix
post 12.02.2010, 14:29:27
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
to przeciez i tak nie uniknę każdorazowego ściągania go

http://pl2.php.net/manual/en/xmlreader.open.php


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
PoProstuRadek
post 12.02.2010, 15:33:10
Post #8





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 12.02.2010

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


Wybacz, jesli to głupie pytanie, ale mógłbyś wytłumaczyć, co miałeś na myśli podając mi ten link ? Bo z opisu nie wynika nic konkretnego apropo ściągania/nie ściągania za każdym razem zawartości pliku.
Oczywiście, skoro XMLReader odczytuje sekwencyjnie, to pewnie nie robi tego za każdym razem "od nowa" tylko przesuwa wskaźnik pliku, ale mi chodziło o trochę co innego - o ściąganie całej bazy, co jakiś czas, automatycznie, i później o jak najszybszy odczyt z takiej lokalnej bazy.

EDIT: Dodam, że problemem staje się również serialize/unserialize - ponieważ gdy odczytuję bazę za pomocą SimpleXMLa, nie mogę później wywołać poprawnie unserialize. Zna ktoś rozwiązanie tego problemu ?

Ten post edytował PoProstuRadek 12.02.2010, 19:06:52
Go to the top of the page
+Quote Post
erix
post 12.02.2010, 19:03:42
Post #9





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




URI -> adres -> XMLReader sam odczytuje strumieniowo dane z XML.

Potem sobie to, przy odczycie, serializujesz do tablicy i masz szybki dostęp.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
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: 18.07.2025 - 06:55