Cache zapytań SQL

2011-06-16 13:30:24 Post #1 gość_szary user

 
Witam, chciałem zapytać Ciebie nospor , co sądzisz o cachowaniu zapytań sql czy jest sens jak do tego cacha sie odnieść , szczególnie przy serwisach gdzie bardzo często wyniki zapytań się zmieniają.

2011-06-16 13:53:30 Post #2 nospor

 
Zależy jakich zapytań i zależy jak często się te dane zmieniają.
Przykładowo wyników wyszukiwania nie cachuje.
Ale już np. newsy na stronie tak. Tak samo jak cacheuję bloczki "Ostatnio na forum", "Ostatnio komentowane".

Wszystko więc zależy od sytuacji. Ale ogólnie jest na tak z cachowaniem.

2011-06-16 14:06:16 Post #3 gość_szary user

 
Dobra czyli lepiej robic cache. W moim przypadku
Mam sobie system ogłoszeń, defakto na odswierzeniu jednym strony nie robię ogromnej ilość zapytań (koło 10 zapytan) w 90% to są lekkie zapytania typu
$q = 'select `id`, `tytul` from tabela limit x';

natomiast glowne zapytanie na ktorym opiera się dzialnie calej strony jest to "bydlak" z if'ami , join, podzapytami. (lacze w sumie ze soba prawie 14 roznych tabel) . To zapytanie wypadalo by cachowac napewno, ale tutaj pojawia się w moijej glowie "lampka" jak sprawdzić czy np dodano nowe ogloszenia i wtedy czyscic cache.

opcje ktore przychodza mi do glowy:
1. skrypt przy dodawaniu ofert ktory wyszukuje wszystkie pliki zwiazane z ta tabela).
2. zrobic w cronie raz dziennie usuwanie cache

co sądzisz, bo zapytanie te o ktore mi chodzi jak powiedzialem male nie jest, ale takze jest czesto zmieniane (dochadza kolejne warunki sortowania).

i kolejne pytanie:
czy warto cachowac zapytania pobierajace dane uzytkownika wg ciebie, zakladam iz portal ma 1-2k userów, czy warto tworzyc do kazdego uzytkownika pliczek ktory zawieralby dane jego: jesli to jest naprzyklad pobieranie id + nick'a + grupy usera?

2011-06-16 14:17:33 Post #4 nospor

 
Napiszę ci, jak ja to robię.
Po pierwsze używam mojej klasy Cache, która jest dostępna do pobrania.
Klasa ta pozwala przypisawać obiekt do kilku grup. Jako obiekt należy rozumieć dany wynik cache, czyli cache newsów to obiekt, cache "Ostatnio komentowane" to kolejny obiekt.
Czyli jak mówiłem obiekt może należeć do kilku grup. I tak np. obiekt "Ostatnio komentowane" należy do grupy "news" oraz do grupy "comments". I jeśli np. zmienie newsa, to czyszcze wszystko co należy do grupy news. Gdy ktoś doda komentarz, to czyszcze wszystko co należy do grupy comments. W ten sposób kontrolka "Ostatnio komentowane" zawsze będzie aktualna.
Czyszczenie grup to realizuję moja klasa.

Klasa dodatkowo pozwala na określenie czasu cachu i mase innych.

W twoim więc przypadku dodajesz obiekt oferty, przypisujesz go do grupy "oferty" i zawsze jak ktoś doda jakąś oferte to kasujesz grupę oferty.

Co do userów to nie, nie cachuj ich. W momencie logowania pobierasz wszystkie dane o userze i trzymasz je w sesji.

2011-06-16 14:25:50 Post #5 gość_szary user

 
Dziękuje MIND nospor za pomoc

2011-06-16 14:28:29 Post #6 nospor

 
Haha, przyznać się, kto się ukrywa pod tym nickiem "szary_user"

2011-06-16 14:28:37 Post #7 gość_szary user

 
Powinieneś dorobić mozliwosc edycji postów gosci przez ip uzytkownika
Ogolnie co do twojej klasy cache, jestem nia dosc mocno zainteresowany po tej rozmowie i wezne ją przewalkuje od a-z by ją dobrze zrozumieć. Sory także za zawalanie twojego prywatnego forum tym pytaniem ale chcialem skonsultować to głownie z Toba.

2011-06-16 14:31:01 Post #8 nospor

 
Po to właśnie jest to forum, by zadawać na nim pytania. Przecież oprócz działów z moimi projektami, stworzyłem też inne działy właśnie po to by w nich pisać - wiesz, konkurencja dla php.pl

2011-06-16 14:34:43 Post #9 gość_szary user

 
W sumie zarejestrowałem się na tej stronie i ani link aktywacyjny nie doszedl ani nie mogę się zalogować na konto ^^. Wiesz na fphp.pl mnie draźni czesto że odzywaja się osoby ktore maja slabe pojecie o danej dziedzinie, dlatego wolalem tutaj zaglądnac, przy okazji dowiedziałem się pare rzeczy i zaczna mi sie rozjasniac skad ja Ciebie znam z początków mojej "zabawy" za mlodego w php (miedzy innymi strona papaliki mi troche rozjasnila bo tą użytkowniczke łatwo zapamietac )

2011-06-16 14:37:52 Post #10 nospor

 
hpsi? Właśnie aktywowałem ci konto. A czemu nie doszedł mail to nie wiem. Bo poszedł na pewno. Może podałeś zły adres lub google wrzucił do spamu?

2011-06-16 14:39:24 Post #11 hpsi

 
yup ja to ja od dawna zagladam anonimowo na Twoja strone choc nigdy wczesniej się nie udzielałem.

Link doszedł - z opoznieniem.

2011-06-16 14:40:43 Post #12 nospor

 
Bo ja maile wysyłam co 5 minut a nie od razu. pewnie natrafiłeś na ten maksymalny czas oczekiwania


No i witam. Możesz tu śmiało pytać na forum. Ruchu mi na stronie się nageneruje

2011-06-16 14:43:21 Post #13 hpsi

 
Ze tak sie spytam mały offtopic, ale mialeś cos wspolnego z wspolnota jportal2. Bo nie wiem czy dobrze w moim mozgu swieci się lampka by Tam ciebie podpiąć.

Co do Twojej stronki - jakość przyciąga ludzi, rzeczowe odpowiedzi także. Ja zadając pytanie byłem ciekaw paru rzeczy typu czas odpowiedzi Twojej i ogólnie podejscie do zadawania pytan. Fakt faktem ze zadałem pytanie ktore mnie irytowalo bo nigdy nie cachowalem zapytań i nie wiem dlaczego tego nie robilem.

No na to wychodzi bo przyszedl po mniej wiecej 5 minutach (glupi ma zawsze szczescie )

Zrobiłem edit: bo zamiast jakość napisałem jakoś

2011-06-16 14:46:44 Post #14 nospor

 
jportal? Nie kojarze. Jeśli to ma jakiś związek z joomlą, to mój związek z joomlą jest tylko taki, że wydałem moduł shoutbox pod joomla.

Co do odpowiedzi to jak jestem online to zazwyczaj odpowiadam od razu. No ale czasami mnie nie ma online

: bo zamiast jakość napisałem jakoś
Tak się właśnie zastanawiałem nad sensem zdania z jakoś - co autor miał na myśli

2011-06-16 14:48:18 Post #15 hpsi

 
hmm to ja już się totalnie zapętliłem. Wiem, że Ciebie (twój nick) kojarze od niepamiętnych czasów - praktycznie od samego początku jak zaczełem się interesować programowaniem.
Wybacz jestem człowiekiem, robię literówki (niestety) ...

2011-06-16 14:48:48 Post #16 nospor

 
Pisałeś, że masz 10 zapytań na stronę.
Ja mam 0 zapytań. Wszystko jest w cache.

Mój nick pojawił się od daty rejestrracji na forum.php.pl - było to bardzo dawno temu 7 lat bodajże

2011-06-16 14:51:04 Post #17 hpsi

 
Zaczyna mnie intrygować koncepcja robienia cacha zapytań. W koncu szybkość generacji strony itd zwiększa się ogormnie bez kolejnych polaczeń do sql'a (...)
Mój nick pojawił się od daty rejestrracji na forum.php.pl - było to bardzo dawno temu 7 lat bodajże

No ja mniej więcej 7.5 roku temu zaczełęm się interesować programowaniem. Robiłem to hobbistycznie dopiero od jakiegoś dłuższego czasu 2-3 lat robie to zarobkowo) Niestety jak to student mialem lenia i się nie rozwijalem (koncowka liceum, koniec studiów) wiec mam teraz co nadrabiac

2011-06-16 14:56:59 Post #18 nospor

 
Ja u siebie mam tak zrobione, że w ogóle mogę nie nawiązywać połączenia z bazą. Połączenie nawiązuję dopiero, gdy pojawia się pierwsze zapytanie. No a skoro bardzo często nie pojawia się żadne zapytanie, więc i w ogóle z bazą się nie łącze.

Oczywiście, gdybym zaczął dorabiać takiego bajery, jak ile jest osób online, kto co akurat robi itp to już by to trochę inaczej wyglądało, bo niestety wówczas bym latał częściej do bazy.

Pomijam tu oczywiście shoutbox, bo ten kieruje sie na innych prawach, choć i w nim ograniczam zapytania jak się da.

Cachować trzeba z głową, zastanowić się czy jest sens czy nie. Przykładowo tematu na forum już nie cachuję. Ale listę tematów na stronie głównej forum chyba już tak.
Tak samo kontrolki po prawej stronie - nie ma sensu latać po nie za każdym razem do bazy. Tutaj nie dość, że cachuje wynik z bazy, to cachuje cały kod html kontrolki - nie muszę za każdym razem obrabiać wyników tylko od razu mam pod ręką cały kod html.

2011-06-16 15:10:16 Post #19 hpsi

 
No właśnie z głową - ale do to się tyczy nie tylko tego.

Ostanio zrobiłem cache w troche dziwny sposób ponieważ mialem sobie strone która generuje dane (przykładowo katalog stron). Zawartość strony jest generowana (podejrzewam że wiesz o co chodzi ). I po generacji tej tresci zapisuje sobie dane w osobnej tabelce cache , gdzie mam id strony , dzięki temu ograniczłęm ilość zapytan b. mocno.

cóż , muszę przemyśleć bardzo mocno aspekty cachowania danych szczególnie zapytań.
Ogólnie dzięki za pomoc, jak przemyśle wszystko i będę miał pytania zgłoszę się do Ciebie nakierunkowałeś mnie tak jak sądziłem b. dobrze ;]

2011-06-16 15:18:52 Post #20 nospor

 
Są różne techniki cachowania.
Jednym z nich jest właśnie też to co ty napisałeś, że cachuje całą stronę jako całość/jedność. To też jest rozwiązanie.
A jeszcze w ogóle super jest, gdy taką stronę zapisujesz na dysku jako .html - wówczas robi się z niej strona statyczna i nie przechodzi w ogóle przez php. Ale tego zazwyczaj się używa gdy naprawdę będzie bardzo, bardzo, bardzo duży ruch na daną konkretną stronę.

Także myśl a ja spadam. Będę pewnie dopiero jutro.

Odpowiedz

1 2 >

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer