Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Cache tabeli użytkowników
Inscure
post 5.02.2012, 13:04:26
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 4
Dołączył: 18.09.2010

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


Witam,

Ostatnio spotkałem się ze stwierdzeniem, że optymalnie jest zrzucać całą tabelę użytkowników do cache i z pliku odczytywać potrzebne dane.
Wydaje mi się to mniej wydajne niż odczyt z bazy gdzie nałożony jest indeks na kolumny, po których uzyskiwane są dane użytkownika.

Załóżmy, że tabela z użytkownikami posiada 50 000 rekordów w około 15 kolumnach.
Cache jest tworzony przez serializację do pliku całej tabeli oraz trzymany aż do zarejestrowania nowego użytkownika lub zmiany danych już istniejącego.
Ponadto z cache nie są odczytywane dane takie jak ostatnia wizyta (bo wiadomo, zmienia się z każdym odświeżeniem (leci zapytanie do DB aktualizujące)), jedynie sprawdzanie czy user taki istnieje w bazie (czyli w cache) oraz wyświetlanie podstawowych jego danych, takich jak nazwa, e-mail itd.

Co myślicie: cache tej tabeli ma jakiś sens?

Ten post edytował Inscure 5.02.2012, 13:10:49


--------------------
eXtreme-Fusion CMS - polski, darmowy system zarządzania treścią z rozbudowanym wsparciem technicznym.
Go to the top of the page
+Quote Post
lobopol
post 5.02.2012, 13:20:38
Post #2





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


Nie w takiej formie. Cache całej tabeli jest bezsensowny.


--------------------
Go to the top of the page
+Quote Post
erix
post 7.02.2012, 10:18:13
Post #3





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




Cytat
Co myślicie: cache tej tabeli ma jakiś sens?

Nie ma. Zmieni się choćby jeden rekord i wszyscy użytkownicy muszą aktualizować.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
ActivePlayer
post 7.02.2012, 10:24:05
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


po pierwsze - zależy gdzie chcesz trzymać taki cache. jeśli w pamięci ram (np za pomocą memcached) to ma sens.
po drugie - raczej cache dla każdego uzytkownika osobno. ważne tutaj jest dobranie kluczy po których się wyszukuje. gdybyś np dodał cache z loginem jako klucz cache, wtedy praktycznie w zerowym czasie dostępu mógłbyś pobrać dane o użytkowniku (i np zweryfikować czy wpisał poprawne hasło).
po trzecie - takie rozwiązanie wymaga dobrego przemyślenia architektury aplikacji - tak aby system dbał o aktualizację cache w momencie zmiany bazy danych.

z tego co wiem nk.pl używa tego rodzaju cache. tzn jeśli wyszukujesz znajomych, to wysyłają zapytanie do bazy danych "select user_id from friends..." (nawiasem też to cachują) a potem każdego usera odczytują już bezpośrednio z memcache, lub jeśli części danych to doczytują je z bazy i wstawiają potem do cache, dla przyszłych requestów).
Go to the top of the page
+Quote Post
erix
post 7.02.2012, 10:26:34
Post #5





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




Cytat
po pierwsze - zależy gdzie chcesz trzymać taki cache. jeśli w pamięci ram (np za pomocą memcached) to ma sens.

Nie do końca. Bo marnujesz wówczas pamięć - baaaaaaaardzo rzadko zdarzają się sytuacje, w których 100% bazy jest wczytywany. Pomijam już fakt problemów z synchronizacją.

Cytat
z tego co wiem nk.pl używa tego rodzaju cache. tzn jeśli wyszukujesz znajomych, to wysyłają zapytanie do bazy danych "select user_id from friends..." (nawiasem też to cachują) a potem każdego usera odczytują już bezpośrednio z memcache, lub jeśli części danych to doczytują je z bazy i wstawiają potem do cache, dla przyszłych requestów).

Cache w nk.pl, to w ogóle majstersztyk. Jak mi o tym znajomy opowiadał, to miałem oczy jak pięciozłotówki. biggrin.gif


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
ActivePlayer
post 7.02.2012, 10:33:29
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


na 4developers zeszłorocznym był gość, który o tym opowiadał.

generalnie mają sieć serwerów, każdy z nich ma swoją instancję apache + memcache + jeszcze jakaś struktura główna której nie do końca pamiętam. w praktyce wyglądało to tak że wszystko było trzymane w memcache, a tylko w przypadku braku aktualności danych, doczytywane one były z serwerów "wyższego poziomu" - również memcache a na końcu z bazy danych.

odnośnie marnowania pamięci - umówmy się - dla zastosowań o których rozmawiamy (pewnie nie o milionach userów) takie rozwiązanie jest do przyjęcia. oczywiście można później obcinać cache o pewne dane, które nie są zawsze potrzebne (np trzymać tylko nick, imie, id avatara, etc) ale to wymagało by chyba dyskusji na większym poziomie szczegółowości. Dla baz które mają po 5000 użytkowników, nawet 200MB zajęte przez memcache to pryszcz. w sumie rozwiazanie nie głupie bo zazwyczaj wąskim gardłem na małych serwerach jest procesor a nie brak ramu.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 21.06.2025 - 12:06