Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [OOP][PHP]Cache i problemy z nim zwiazane
Forum PHP.pl > Forum > PHP
marcio
Witam mam dosyc banalne pytanie tworze cache cos al'a Kohana bo rozwiazanie z katalogami mi sie nie podoba.

I mam problem powiedzmy ze pobieram wszystkie news'y z bazy jest ich 15 i tablica w pliku cache wyglada mniej wiecej tak:
Kod
Array(
        0 => array(
                       'id' => 1,
                       'tytul' => 'Pierwszy news',
                       'autor' => 'marcio'
                      ),

        1 => array(
                        'id' => 2,
                        'tytul' => 'Drugi news',
                        'autor' => 'vodka'
                       ),

        2 => array(
                        'id' => 0,
                        'tytul' => 'Trzeci news',
                        'autor' => 'FLash'
                       )
)

//itp dalesz 12 news'ow

Ok nie ma problemu gdy chcemy pobrac wszystkie news'y.
Co jesli chce pobrac tylko pierwszym 5 na 1 strone potem od 5 do 10 na 2 wiem jak zrobic stronnicowanie nie o to chodzi, jednak nie wiem zabardzo jak zaprojektowac cache bym mogl tez na jego podstawie stronnicowac.

Mysle ze tak jak pokazalem jest good jednak nie jestem pewny.

Powiedzmy ze ten plik z tym array'em ktory pokazalem nazywa sie news.cache.php bez zadnych tagow.
Moglbym tak zaimplementowac funkcje getFromCache() bym mogl zrobic cos takiego:
  1. //1 param: string id cache
  2. //2 param int index poczatkowy
  3. //3 param int index koncowy
  4. $pierwsze_5_newsow = $this -> cache -> getFromCache('news', $this -> router -> getParams(1)*5, 5);

Cos w tym stylu wtedy pobierze mi news'y z index'ami od 5 do 10 np.

EDIT:
Przyszlo mi do glowy jeszcze jedno rozwiazanie by plik robic jednak z tagami:
news|1-5.cache.php
Wtedy w metodzie getAllNews() pobieramy z url'a limit tak jak sie to zawsze robic i pobieram za pomoca tagu ktory wezme z url'a?
Co o tym myslicie?
Zyx
W przypadku newsów możesz rozważyć cache'owanie jedynie pierwszej strony wyników, gdyż to ona przeważnie będzie przedmiotem zainteresowania internauty. Na pozostałych ruch powinien być na tyle mały, że cache raczej tam nic nie da. Natomiast w przypadku jakichś list, gdzie chronologia nie ma znaczenia, będziesz musiał cache'ować każdą stronę oddzielnie, dlatego warto przeanalizować, czy to się opłaca. Ja zawsze w przypadku takich zmieniających się danych staram się buforować jedynie domyślnie wyświetlane wartości, wychodząc z założenia, że to one są najczęściej oglądane przy pobieżnym rzucie oka na stronę.
marcio
Czyli po twojej odpowiedzi moge wywnioskowac ze jesli w linku nie bedzie strony lub bedzie ona rowna 1 to wyswietle cache gdy strona bedzie > 1 to wtedy pobiore rekordy za pomoca sql'a?
Dobrze zrozumialem?
dr4ko
Drugi sposób (z indeksowaniem nazw plików) będzie chyba najlepszy a na pewno najszybszy.
Zyx
Tak, dokładnie o to chodzi.
marcio
Cytat(dr4ko @ 4.11.2009, 13:00:48 ) *
Drugi sposób (z indeksowaniem nazw plików) będzie chyba najlepszy a na pewno najszybszy.



Cytat(Zyx @ 4.11.2009, 13:01:02 ) *
Tak, dokładnie o to chodzi.

Teraz juz nie wiem czy dla kazdej strony zrobic osobny cache czy cache'owac tylko pierwsza strone z news'ami
Crozin
Generalnie jeżeli będziesz cache-ował wszystkie strony to dla każdej strony osobny plik z danymi. Przecież jak będziesz miał sporą liczbę tych newsów to samo odczytanie pliku cache może być kosztowniejsze niż pobranie ich bezpośrednio z bazy danych.

Co do pytania czy cache-ować jedynie pierwszą czy każdą stronę... to zależy. Jeżeli ruch na stronach innych niż pierwszej jest na tyle duży, że obciąża on w dużym stopniu serwer - wtedy możesz cacheować i resztę stron. Jeżeli jednak inne strony są odwiedzane z częstotliwością kilku razy na godzinę to jest to pozbawione sensu.
marcio
Cytat
Co do pytania czy cache-ować jedynie pierwszą czy każdą stronę... to zależy. Jeżeli ruch na stronach innych niż pierwszej jest na tyle duży, że obciąża on w dużym stopniu serwer - wtedy możesz cacheować i resztę stron. Jeżeli jednak inne strony są odwiedzane z częstotliwością kilku razy na godzinę to jest to pozbawione sensu.

Podsumuwujac to juz zalezy odemnie.
Gdy maly ruch tylko pierwsza strona reszta zapytania sql, gdy rush jest duzy zrobie tak by moc cache'owac i inne strony thx.
Dzis wezme sie za kodzenie smile.gif
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.