![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 6.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
ostatnio zacząłem trochę pisać w PHP i nurtuje mnie pewna kwestia. Czy jest sposób na umieszczenie czegoś w pamięci i odczytywanie tego potem dla wszystkich osób przeglądających nasze strony, zamiast odczytywać to za każdym razem z pliku lub bazy danych? Konkretniej rzecz biorąc, załóżmy, że mamy serwis/grę przeglądarkową/sklep internetowy czy cokolwiek co odwiedzane jest przez dużą liczbę osób. Dajmy na to, że mamy plik XML w którym trzymamy trochę danych które wyświetlamy klientom przy pomocy JavaScriptu. Ale niektóre z tych danych potrzebne nam są gdy odnosimy się do bazy danych, a nie chcemy ich powielać i wstawiać również w bazie, bo ręczna zmiana w jednym wymuszałaby zmianę w drugim. Tak więc piszemy sobie parser XMLa w PHP i za każdym wyświetleniem strony odczytujemy dane z pliku. Wszystko fajnie, ale czy nie stałoby się to problematyczne w przypadku, dajmy na to 6000 zalogowanych użytkowników którzy klikają zakładaczki na naszych stronach? Dane wyświetlane przez JS to nie problem, bo zajmuje się tym przeglądarka każdego klienta, ale PHP obsługuje nasz serwer, więc 6000 odczytów co sekundę chyba by trochę go zmuliło. Wydaje mi się, że szybciej byłoby gdyby dane załadować do pamięci i z niej odczytywać, tylko czy jest to możliwe? ![]() Ps. I przy okazji, czy jest jakiś parser PHP który pozwala odczytywać dokumenty XML w sposób zbliżony do tego w JS? Czy też trzeba go sobie samemu naskrobać? -------------------- "Czasem człowiek sądzi, że ujrzał już dno studni ludzkiej głupoty,
ale spotyka kogoś, dzięki komu dowiaduje się, że ta studnia jednak nie ma dna." - Stephen King |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 206 Pomógł: 18 Dołączył: 6.03.2006 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
ten "sposob z JS" to po prostu DOM - Document Object Model i to standardowy sposob przetwarzania dokumentow XML chyba w niemal kazdym jezyku/srodowisku:
http://www.php.net/dom co do problemu z przechowywaniem zmiennych w pamieci - jako-takie tozwiazanie bezposrenio nie istnieje. ale jest wiele posrednich. po pierwsze wczytane dane z XMLa mozesz przechowywac w formie juz wczytanej na przyklad przez serizalize()/unserialize(). inna mozliwoscia jest uzycie cachowania na przyklad: http://www.php.net/manual/en/book.apc.php -------------------- Wrzasq.pl
Tworzenie stron i aplikacji internetowych. Chillout Development - tworzenie stron i aplikacji internetowych. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Zdaję się że to też będzie pasowało choć nie używałem:
CL. Shared Memory Functions LXXXVI. Memcache Functions a propo korzystał ktoś z tego drugiego? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 300 Pomógł: 32 Dołączył: 31.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Korzystałem przez jakiś miesiąc póki nie natrafiłem na dziwny błąd - dane który miał ustawioną ważność na 60 sekund nie wygasały wcale, nawet po jednej godzinie i na stronie wyświetlały się stare informacje. Po zrestartowaniu demona memcached wszystko wróciło do normy, ale wolałem wyłączyć cachowanie niż mieć takie źródło niespodzianek :/
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 411 Pomógł: 35 Dołączył: 27.06.2004 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Nie jest rolą PHP cacheowanie danych. Od tego jest cache bazy danych, czy oprogramowanie typu squid.
Przy 6000 requestów na sekundę, będziesz potrzebował farmy serwerów cache'ująch do obsłużenia ruchu Schemat wygląda tak w uproszczeniu tak: baza danych -> cache bazy danych -> PHP -> wynik w postaci XML -> reverse proxy -> użytkownicy -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
@legorek: Twoje słowa nabierają genialnego wymiaru gdy się przeczyta manual
Cytat Memcache module provides handy procedural and object oriented interface to memcached, highly effective caching daemon, which was especially designed to decrease database load in dynamic web applications. czyli Memcache odpowiada za cache aby zmniejszyć ładowanie danych z bazy i na dodatek jest efektywnym program zewnętrznym i został specjalnie do tego celu zaprojektowany (sic!) wartość Twojej opinii staje się delikatnie mówiąc wątpliwa... Ten post edytował zimi 9.07.2008, 14:25:08 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 411 Pomógł: 35 Dołączył: 27.06.2004 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@legorek: Twoje słowa nabierają genialnego wymiaru gdy się przeczyta manual czyli Memcache odpowiada za cache aby zmniejszyć ładowanie danych z bazy i na dodatek jest efektywnym program zewnętrznym i został specjalnie do tego celu zaprojektowany (sic!) Natomiast system cache który jest integralną częścią serwerów baz danych odpowiada za smażenie naleśników, a został zaprojektowany do celu budowy mostów (sic!) Memcache to dobre i elastyczne rozwiązanie, ale podnosi stopień skomplikowania kodu i jest zbyt inwazyjny. Tj nie wprowadzisz go już do gotowego systemu. Autorowi wątku polecam poszukać w pogooglać, ostatnio sporo jest artykułów traktujących o radzeniu sobie z dużym ruchem (chyba zainspirowanych naszą klasą). Prawda jest też taka, że nie ma wielu specjalistów którzy mają doświadczenie z takimi obciążeniem, a pytanie kierowałbym raczej do adminów niż do programistów. Rozpisałbym się jeszcze, ale muszę poprzewracać naleśniki zanim MySQL je przypali. Ten post edytował legorek 9.07.2008, 16:09:46 -------------------- |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
ok ale autor wspomniał o pliku xml i cache'm co tutaj ma być?
rolą PHP jest spełniać to co mu napiszesz aby spełniał... Cytat Natomiast system cache który jest integralną częścią serwerów baz danych odpowiada za smażenie naleśników, a został zaprojektowany do celu budowy mostów (sic!) ![]() wiadomo że memcache jest po to żeby był cache, chodzi mi raczej o to że memcache został zaprojektowany po to by zdjąć obciążenie z SZBD co do reszty się zgadzam |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 6.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za podpowiedzi
![]() ![]() W sumie nie wiem, czy to co robie ma sens. Generalnie mam plik XML, będzie w nim duży element, który będzie miał około 20 dzieci i każdy z nich również około 5 dzieci. Będzie to plik który nie będzie się raczej zmieniał, służyć ma po prostu przetrzymywaniu stałych danych w przejrzysty sposób (zamiast grzebać w kodzie skryptów) i ułatwić ewentualne bardzo sporadyczne zmiany. Do tego ewentualne zmiany w nim dokonywane przez osoby 3 nie będą wymagały znajomości SQLa (dlatego plik XML zamiast tabeli w bazie danych) no i najważniejsze, nauczę się wykorzystywać XMLa ^^ W każdym razie ten plik będzie zawsze odczytywany podczas wejscia na daną podstronę, doszedłem więc do wniosku, że zamiast odczytywać za każdym razem dane z pliku XML, mogę wrzucić dane do RAMu i stamtąd je odczytywać. Ale brak mi doświadczenia w programowaniu, więc nie wiem czy mój pomysł ma sens ![]() -------------------- "Czasem człowiek sądzi, że ujrzał już dno studni ludzkiej głupoty,
ale spotyka kogoś, dzięki komu dowiaduje się, że ta studnia jednak nie ma dna." - Stephen King |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 10:49 |