Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Cache zapytań
Noname78
post 8.03.2010, 23:18:38
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 8.03.2010

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


Witam,
Mam do zrobienia bardzo duży portal założenia zleceniodawcy są takie, że 90% wszystkich zapytań to pobieranie danych z bazy a tylko 10% to modyfikacje, dodawanie lub usuwanie rekordów. Baza ma posiadać ok. 5 mln rekordów na początek. Zleceniodawca przyjmuje ok. 50 tys. odsłon dziennie. Przy tak dużej ilości odsłon i ilości pobieranych danych warto zastosować cachowanie zapytań. Chciałbym zrobić to standardowo:
1. Sprawdzanie cache, jeśli zawiera aktualne dane to idź do 4
2. Pobranie treści z bazy
3. Zaktualizowanie cache
4. Zwrócenie danych
Nie chce się martwić o to czy zawartość cache jest aktualna i zamierzam czyścić ją za każdym razem gdy coś dodam, zmodyfikuje lub usunę w bazie. Oczywiście nie cały cache. Z takie rozwiązanie ma kilka wad:
1. Jeśli nie będzie nic w cache i nagle na stronę wejdzie 1000 osób w jednej chwili i każdy zacznie aktualizować cache, będzie to bardzo nieefektywne.
2. Podczas gdy chcę usuwać cache może się okazać, że ktoś właśnie go czyta i nie usunę go, wtedy zostanie stara, nieaktualna zawartość.
Przy tak dużej ilości odsłon nawet tak mało prawdopodobne akcje są możliwe. Czy macie jakieś pomysły jak to mogę rozwiązać?

Ten post edytował Noname78 8.03.2010, 23:21:23
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
erix
post 9.03.2010, 00:36:14
Post #2





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




Jeśli rozwiązujesz cache'owanie na poziomie systemu plików, to powinna wystarczyć standardowa blokada.

W przypadku tworów a'la memcached, to podejrzewam, że jeden podłączony klient na czas operacji zapisu/kasowania blokuje daną komórkę pamięci. A jeśli chodzi o update, to najbezpieczniej jest zrobić to poza skryptem produkcyjnym, np. przez działający skrypt generujący zawartość cache (np. w panelu administracyjnym). Generalnie wystarczy coś bardzo prostego: dane, które zamierzasz zbuforować, zapisujesz najpierw do zmiennej, dopiero potem podmieniasz w buforze. Ważne jest tu najpierw przygotowanie danych, a nie wymazanie. Fakt, zabierze nieco więcej pamięci, ale sam wiesz, że operacje przenoszenia/kopiowania komórek w pamięci przebiegają z prędkością kilku-kilkunastu GiB na sekundę. A pobieranie z bazy, to góra kilka MiB (zależy od systemu). winksmiley.jpg

Wtedy operacja powinna przebiec wręcz niezauważalnie. Tak BTW, popełniłem kiedyś artykuł nt. cache danych w PHP: http://eriz.pcinside.pl/weblog/cache-danyc...teoria-211.html


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

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

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: 14.08.2025 - 06:02