Własny system cache strony

0

Witam,
chciałbym poradzić się bardziej doświadczonych osób.

Mam stronę na hostingu, gdzie w konfiguracji mysql ustawiona jest maksymalna liczba połączeń na 20 i niestety nie mogę jej zmienić. Nie mam pieniędzy na dedyka.. jeszcze nie mam.

Ostatnio moja strona się zawiesiła ze względu na zbyt dużą ilość połączeń. Wymyśliłem taki system cache.

  1. user próbuje załadować stronę
  2. sprawdzanie czy istnieje plik ./cache/cache_XXX.html gdzie XXX = md5(adres url z przeglądarki)
  3. jeśli istnieje:
    a. jeśli plik jest starszy niż 5 + random(1,2) [min] => wykonaj ponowną kopię strony
    b. else include(plik cache);
  4. else wykonaj kopię strony

Nie wiem jak z wydajnością funkcji sprawdzających datę utworzenia pliku.. podobno mają własny cache. Na mojej stronie obecnie jest około 10 userów, nie mam jak przetestować tego rozwiązania.

Rozwiązanie nie jest dobre, jeśli np. 100 userów jednocześnie trafi na stronę, którą trzeba ponownie zapisać do cache.

0

to może cachuj zapytania z bazy
np dane użytkownika przy logowaniu pobierasz z bazy danych, prawda? A mogą być w cache, cache można aktualizować gdy user zmieni na przykład swoje hasło, lub admin coś pomajstruje przy jego profilu. I wtedy gdy ktoś wypełni pole w logowaniu, to robisz MD5 z nazwy użytkownika i sprawdzasz, czy istnieje plik cache/user_profile_76eywiurv65vc6xv576cxv5675s
jeśli istnieje, to odczytujesz stamtąd tablicę/obiekt, który reprezentuje profil użytkownika (login, hash hasła, email itp - w skrócie cały profil)
jeśli taki plik nie istnieje, to wtedy pytasz bazę danych i wynik zapytania zapisujesz do pliku cache/user_profile_76eywiurv65vc6xv576cxv5675s

tak samo można zrobić z pobieraniem artykułów. Za pierwszy razem (po wyczyszczeniu cache) wczytujesz tablicę z artykułem do pliku cache cache/article_id, i następnym razem po prostu sprawdzasz czy taki plik istnieje, jak tak, to wczytujesz go i masz dane o arcie bez zapytania do bazy, a jak nie ma to pobierasz rekord i sru do pliku :)

do czego ma służyć random(1,2)?

a po trzecie, to wg mnie warto zerknąć http://framework.zend.com/manual/en/zend.cache.introduction.html

0

Wydaje mi się, że cache-owanie danych takich jak login i hasło użytkownika to słaby pomysł - przynajmniej jeśli chodzi o hash hasła :)

0

Poza tym, ograniczona maksymalna ilość połączeń z MySQL wcale nie oznacza, że właśnie tylu użytkowników na raz będzie mogło przeglądać stronę. Przy 20 połączeniach, stronę może i przeglądać 200 osób. Połączenie jest otwierane (powinno być) na kilkadziesiąt, maksymalnie kilkaset milisekund. Znaczy to tyle, że dokładnie w tym samym czasie, strona nie wygeneruje się dla więcej niż 20 osób. Na przykładzie średnich czasów generowania podstrony na forum 4programmers - przy jednym połączeniu z bazą danych, przez jedną sekundę wygenerować można ok. 15 razy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1