Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> pobranie z bazy czy z sesji, porównanie dwóch rozwiązań
AxZx
post
Post #1





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


witam,

chciałbym się poradzić, które rozwiązanie będzie korzystniejsze. nie chcę nic przeoczyć, a co dwie głowy to nie jedna:)

w moim serwisie zalogowany użytkownik może dodawać innych do ulubionych. chciałbym, żeby w zależności od tego czy dany użytkownik jest już dodany do ulubionych był widoczny link dodaj do ulubionych albo informacja, że ta osoba jest w ulubionych.
jak to sprawdzić?

ja mam w głowie 2 rozwiązania:
za każdym razem po wejściu na profil sprawdzać w bazie.
drugie rozwiązanie jest trochę bardziej skomplikowane, bo wymaga więcej operacji. podczas logowania pobierane są z bazy ID ulubionych użytkowników i zapisywane w sesji jako tablica. przy każdym wejściu na jakiś profil sprawdzana jest ta tablica z sesji. w przypadku gdy użytkownik zostanie dodany do ulubionych tablica ta musi zostać zmodyfikowana.

które rozwiązanie będzie lepsze jeżeli chodzi o wydajność? bo jeżeli mam patrzeć na łatwość implementacji to wybieram rozwiązanie pierwsze, dokładam tylko jedno zapytanie.
Go to the top of the page
+Quote Post
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Odpowiedz sobie na pytanie: A jak często użytkownik będzie wchodził do profilu?
Go to the top of the page
+Quote Post
legorek
post
Post #3





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


Pierwsze jest prostsze w implementacji i szybsze.

Dane sesji przecież są trzymane zazwyczaj na dysku lub w bazie, więc tak czy siak musi być wykonany odczyt.

Jakbyś chciał sobie odciążyć bazę to musiałbyś te dane w ciasteczkach trzymać, co IMHO jest bez sensu.

Ten post edytował legorek 27.11.2008, 00:16:35
Go to the top of the page
+Quote Post
AxZx
post
Post #4





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


Cytat(mike @ 27.11.2008, 00:11:27 ) *
Odpowiedz sobie na pytanie: A jak często użytkownik będzie wchodził do profilu?


raczej często. a ma to jakieś znaczenie? przy każdym wejściu musi być wykonane dodatkowe jedno zapytanie lub przy drugim rozwiązaniu odczyt z pliku (z sesji).
Go to the top of the page
+Quote Post
legorek
post
Post #5





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


Naprawdę nie masz co kombinować. Zakładając że tabela ma strukturę zawierającą dwa pola user_id, ulubiony_user_id to zapytanie jest tak mało zasobożerne, że nie widzę powodów dla szukania czegoś w zastępstwie. Nie wykonujesz żadnych złączeń, transfer między bazą a php jest znikomy, a warunek wyszukiwania operuje na indeksie. Wydaje mi się, że jakiekolwiek inne operacje potrwają dłużej.
Go to the top of the page
+Quote Post
AxZx
post
Post #6





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


skoro tak mówisz:)

a tak przy okazji, to ile zapytań jest powiedzmy w normie?
16 zapytań to nie jest lekka przesada?
Go to the top of the page
+Quote Post
erix
post
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Hmm, kwestia sporna, ale IMHO wydaje mi się, że trochę za dużo... To naprawdę zależy od tego, jakie zapytania wykonujesz i jak masz pozakładane indeksy.
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #8





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




To ie hydepark - przenosze na php
16 to norma (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #9





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




Cytat
16 to norma
Moze w joomli...
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




16 może norma, ale widać, że za mało cache'ujesz. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
AxZx
post
Post #11





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


jeszcze w Symfony nie doszedłem do tego jak robić cache dla pojedyńczych zapytań;) a całego widoku nie mogę zapisywać w cache bo dla każdego zalogowanego użytkownika może to wyglądać inaczej.

a w Joomli 16 zapytań to jest chyba wtedy gdy nie dorzuci się do niej więcej dodatków.

ja mam między innymi 6 zapytań, które tylko liczą, indeksy pozakładane na kolumnach z warunków.
zobaczymy w praktyce jak to będzie wyglądać:)
Go to the top of the page
+Quote Post
nospor
post
Post #12





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




Cytat
ja mam między innymi 6 zapytań, które tylko liczą,
czasami takie 6 zapytan mozna zastapic jednym - zależy co liczą (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
AxZx
post
Post #13





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


Cytat(nospor @ 27.11.2008, 13:22:19 ) *
czasami takie 6 zapytan mozna zastapic jednym - zależy co liczą (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)


tak, wiem o tym:)
ale gorzej jak są one porozrzucane w kilku miejscach aplikacji:)
czasem są wykonywane tylko 2, a czasem właśnie te 6. nie zawsze można je połączyć.
ale co się da to połączę:)
tylko zastanawiałem się czy rzeczywiście to wpłynie pozytywnie na wydajność.

np. 2 zapytania
  1. SELECT count(idkontakt) FROM kontakt WHERE idprofil = 23
  2. SELECT count(idulubione) FROM ulubione WHERE idprofil = 23

vs. jedno
  1. SELECT (SELECT count(idkontakt) FROM kontakt WHERE idprofil = 23) AS kontakt, (SELECT count(idulubione) FROM ulubione WHERE idprofil = 23) AS ulubione
Go to the top of the page
+Quote Post
erix
post
Post #14





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
ale gorzej jak są one porozrzucane w kilku miejscach aplikacji:)
czasem są wykonywane tylko 2, a czasem właśnie te 6. nie zawsze można je połączyć.
ale co się da to połączę:)

A stored procedures?
Go to the top of the page
+Quote Post
nospor
post
Post #15





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




Cytat
tylko zastanawiałem się czy rzeczywiście to wpłynie pozytywnie na wydajność.
Tak.
Przy dwoch zapytaniach musisz doliczyc chociazby dwukrotny czas wyslania ządania do mysql i spowrotem. Przy jednym masz tylko jedno.
Akurat osobiscie twoje dwa zapytania zastąpilbym jednym union.
Go to the top of the page
+Quote Post

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: 26.09.2025 - 18:12