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