Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [dyskusja]Cache
Moli
post
Post #1





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

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


Nie wiedziałem czy napisać to tu czy w dziale o php. Jeśli źle wybrałem to sorka i prosze o przeniesienie.

Ostatnio dużo zastanawiam się nad cache, jak to jest zbudowane w dużych serwisach. Weźmy na przykład serwis grono.net/fotka.pl. Miliony wpisów w bazie, miliony odwiedzić. Jak w taki dużych serwisach zorganiozwane jest cache ? Każde zapytanie ma swoje cache ? Prosił bym o jakieś dokładne informacje od osób orientujacych sie w temacie.

Pozdrawiam.
Go to the top of the page
+Quote Post
nrm
post
Post #2





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


memcached
Go to the top of the page
+Quote Post
batman
post
Post #3





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Nie wiem jak sprawa się ma w przypadku podanych przez Ciebie serwisów, jednak z doświadczenia wiem, że najlepszym rozwiązaniem jest generowanie treści statycznej, która następnie jest prezentowana użytkownikowi. Wszystkie dynamiczne operacje są wykonywane w ostateczności. Mówiąc prościej. Generuje się pliki HTML, które są wyświetlane użytkownikom. W przypadku zmian (np dodanie zdjęć, edycja profilu, nowe newsy, itd), plik HTML jest generowany ponownie. W najgorszym wypadku, gdy taki plik się nie utworzy, uruchamia się skrypt PHP/ASP/JSP, który to mieli i wyświetla.
Oczywiście nie należy zapominać o cache w bazie danych i na serwerze. Tam też dzieje się magia (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Moli
post
Post #4





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

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


Czyli tak, w modelu do bazy danych dodać cache oraz całą stroną cachować za pomocą jakiegoś narzędzia ?

@normanos - Memcache wydaje mi się ciekawe, ale nie każdym serwerze jest.

Ten post edytował Moli 15.01.2008, 09:15:40
Go to the top of the page
+Quote Post
batman
post
Post #5





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Sam serwer bazy danych oferuje cache-owanie wyników zapytania, przez co każde kolejne zapytanie jest wykonywane znacznie szybciej. Jednak nie jestem ekspertem w dziedzinie baz danych, więc nie pomogę za bardzo w tym temacie.
Dodatkowe cache-owanie zapytań może się przydać. Dzięki temu nie będziesz nawet łączył się z bazą danych.
Go to the top of the page
+Quote Post
nrm
post
Post #6





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


@Moli: pytasz się o mega serwisy, a potem mi coś mówisz o hostingach (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Moli
post
Post #7





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

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


No to był przykład, chodziło mi o o jak obsłużyć zapytania do bazy jeśli jest tyle redkordów a nie to czy maja memcachce (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Myślałem nad czymś takim:
- Sprawdza czy istnieje plik cachu html (czyli już gotowy kod html z szablonem oraz wstawionymi elementami).
- Jeśli jest wczytuje go i konczy prace.
- Jeśli nie, sprawdza czy jest cache zapytania do bazy
- Jesli jest, tworzy cache html i wyswietla go
- Jeśli nie ma, pobiera wpisy z bazy normalnie, oraz tworzy cache bazy.

Dobre bedzie takie wyjście ?
Go to the top of the page
+Quote Post
seaquest
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

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


batman: cache jest wykorzystywany tylko gdy kolejne zapytanie jest DOKŁADNIE takie samo jak wywołane wcześniej. Przynajmniej tak jest w MySQL.
Go to the top of the page
+Quote Post
batman
post
Post #9





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




@seaquest
O to mi właśnie chodziło. Za duży skrót myślowy mi wyszedł (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
nrm
post
Post #10





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


dobre do jakiegoś momentu bo przy takiej (podales przyklad fotki) ilosci danych tyle keszu moze byc problematyczne (i/o).

lepiej też by było trzymać same dane w keszu a nie całe htmle. te przy takich ilosciach zajmą ci ogromne duzo miejsca, a samo podstawienie danych do szablonu to przeciez niezauwazalne wartosci. poza tym jak dobrze napiszesz sobie klasę do takiego keszu obiektów to potem tylko zamienisz sterowniki i np. z keszu plikowego w sekundke przejdziesz na memcached. nie mówiąc już o jakiś zmianach w ogolnym htmlu strony. ja w kazdym razie jestem przeciwnikiem keszowania calych htmli, dla mnie nie jest to sensowne rozwiazanie.
Go to the top of the page
+Quote Post
sefs
post
Post #11





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 20.08.2007
Skąd: Szczecin

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


Hm, myślałem ostatnio o cache'owaniu, ale mam kilka wątpliwości...

Na jak długo tworzyć cache? Jak sprawdzać czy w między czasie nie powinien powstać nowy cache (aktualizacja danych)?
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Na jak długo tworzyć cache
Na tyle ile ci potrzeba. Cache konfiguracyjny moze byc np. na dzien, a cache z newsami, np, na pol dnia. Jak to mowia: zalezy jak lezy.

Cytat
Jak sprawdzać czy w między czasie nie powinien powstać nowy cache (aktualizacja danych)?
Jesli dodajesz nowego newsa, to czyscisz cache newsow. Proste. Analogicznie wszystko inne
Go to the top of the page
+Quote Post
Moli
post
Post #13





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

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


@normanos
W widokach gdzie są dynamiczne treści, mogę usunąć cache. Tam gdzie są dynamiczne, ale już mniej ważne, mogę ustawić czas trwania cache a tam gdzie mam stały, pobrany z template + baza + jakieś dodatki widok, cachuje (też na określony czas). Robiłem małe testy z tym i przyśpiesza bardzo widocznie. Trzeba będzie tylko dobrze dobrać widoki w których mogę stosować cache, ale już zadanie oddzielnie do każdego projektu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Moli 15.01.2008, 14:50:34
Go to the top of the page
+Quote Post
seaquest
post
Post #14





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

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


Cytat(sefs @ 15.01.2008, 14:33:07 ) *
Hm, myślałem ostatnio o cache'owaniu, ale mam kilka wątpliwości...

Na jak długo tworzyć cache? Jak sprawdzać czy w między czasie nie powinien powstać nowy cache (aktualizacja danych)?


Ja stosuję prostą zasadę: średnia(przewidywana) częstotliwość zmienności danych / 2.
Go to the top of the page
+Quote Post
Moli
post
Post #15





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

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


Ale w przypadku takich cache jak np. profil uzytkownika, mozna je usuwac tylko po zapisie nowych danych tego usera. Wtedy zyskujemy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
batman
post
Post #16





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Cytat
Na jak długo tworzyć cache?

Na jak najdłużej. Dopiero zmiana w treści powinna wymusić odświeżenie zawartości cache.
Go to the top of the page
+Quote Post
nrm
post
Post #17





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


niekoniecznie. są sytuacje w których zmiana treści wymusiła by non-stop zmiane keszu i tym samym podważyła jego sens (a raczej zamiast poprawić by tylko pogorszyła). w takich przypadkach stosuje się kesz na dany czas.
Go to the top of the page
+Quote Post
batman
post
Post #18





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Skoro zmiana treści występuje w tak krótkich odstępach czasu to nie ma sensu wówczas w ogóle korzystać z mechanizmów cache-owania, ponieważ tak jak napisałeś, spowoduje to spadek wydajności. Poza tym tworzenie i usuwanie zbuforowanych plików powinna odbywać się nie w momencie wejścia na stronę. Tworzenie cache-u powinno odbywać się w momencie zmiany treści (np dodano news), po stronie tzw. admina.
Go to the top of the page
+Quote Post
nrm
post
Post #19





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


@batman: pozwolę się z tobą całkowicie... NIEzgodzić (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Może rzucę jakimis przykładami aby było łatwiej:

choćby bardzo częsta sprawa => zliczanie danych z kategorii, ot powiedzmy, że mamy imageshacka z menu

Architektura (2324342525 zdjec)
Krajobraz (45352632362 zdjęc)

itd. robienie countów jest masakryczne (używa się też często dodatkowego pola w sql i inkrementuje ale chciałbym uogólnić przykład) a zmiana keszu przy dodaniu fotki (n-fotek na sekunde) mija się z celem. Nie mówiąc o tym, że sytuacja nie wymaga aby w takim menu były dane dokładne co do 1 w danej sekundzie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Wtedy robisz sobie cache na n-minut i po sprawie. Zysk OGROMNY.

Takich sytuacji jest trochę, na ogół są to dane globalne serwisu, a nie spersonalizowane usera. Ale ciężko tak uogólniać bo co serwis to inne potrzeby i wymagania, chciałem tylko nakreślić pewien punkt widzenia, mam nadzieje, że widac o co mi chodzi.
Go to the top of the page
+Quote Post
batman
post
Post #20





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Masz rację, w takim przypadku ustawia się cache na określony czas. Jednak, jak dobrze zauważyłeś, zazwyczaj nie oblicza się ilości plików w folderze lub wierszy w bazie, tylko stosuje dodatkowe pole, które zawiera informację o aktualnej ilości danych. Do tego należy dodać, iż sam licznik może być cache-owany co 5 min, a reszta strony co tydzień.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 12:45