Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wydajność odczytu z bazy XML
Forum PHP.pl > Forum > XML, AJAX > XML
PoProstuRadek
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
erix
Klasa XMLReader dostępna w PHP.
ucho
Ja ściągam takie zewnętrzne pliki raz na np 30. minut i zapisuje lokalnie w postaci zserializowanej tablicy
PoProstuRadek
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ń.
erix
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.
PoProstuRadek
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.
erix
Cytat
to przeciez i tak nie uniknę każdorazowego ściągania go

http://pl2.php.net/manual/en/xmlreader.open.php
PoProstuRadek
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 ?
erix
URI -> adres -> XMLReader sam odczytuje strumieniowo dane z XML.

Potem sobie to, przy odczycie, serializujesz do tablicy i masz szybki dostęp.
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.