Własny system cache strony

Odpowiedz Nowy wątek
phpcache
2012-01-23 22:53
phpcache
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.

Pozostało 580 znaków

2012-01-24 15:11

Rejestracja: 12 lat temu

Ostatnio: 7 godzin temu

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/man[...]/zend.cache.introduction.html


Pozostało 580 znaków

2012-01-27 03:49

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

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 :)

Pokaż pozostałe 4 komentarze
no ja rozumiem do czego pijesz, ale czy nie uważasz, że trzeba dobrze zrozumieć i dobrze nauczyć się pisać a później zagłębiać się w takie "tajniki"? :) a skoro ma limit na liczbę połączeń do 20 to trzeba ciąć gdzie się da - no_solution_found 2012-01-27 14:37
Uczyć zawsze się warto, tylko nie wiem czy dobrym pomysłem jest wdrażanie czegoś co się dopiero uczysz na widok publiczny :) - giowds 2012-01-27 15:22
skoro ktoś chce się pochwalić tym co robi, to niech się chwali :P nie będzie tam raczej miał bardzo tajnych rzeczy... Nauczy się, to zmieni to co napisał/napisze jeszcze raz tylko lepiej :) a nic tak nie motywuje jak premiera własnego rozwiązania przed całym światem :D - no_solution_found 2012-01-27 15:27
Ja tam mam skrzywienia starej szkoły i piłowania wszystko do perfekcji :) Za duże zużycie RAMu to optymalizujemy, procesora to optymalizujemy, dysku to zmieniamy sposób organizacji danych :P - giowds 2012-01-27 15:34
no i dobrze, ja też tak robię :) tylko wszystko po kolei - no_solution_found 2012-01-27 15:35

Pozostało 580 znaków

Rev
2012-01-27 14:52
Rev
Moderator

Rejestracja: 13 lat temu

Ostatnio: 3 tygodnie temu

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.


edytowany 1x, ostatnio: Rev, 2012-01-27 14:52
cicho pconnect to wiedza tajemna :P - giowds 2012-01-27 15:44
pconnect nic tu nie pomoże, ma trochę inne zastosowanie.. @no_solution_found - ale ty uwielbiasz dawać porady, które mijają się z prawdą ;) - dzek69 2012-01-30 19:55
a to dlaczegożby tak uważasz? :P wystarczy to co napisałem plus leniwe połączenie :) czyli nawiązywanie połączenia dopiero przy wykonaniu pierwszego zapytania. Skoro będzie miał najbardziej potrzebne dane w cache, to nie będzie potrzeba nawet uruchamiać połączenia z DB. Czy to mija się z prawdą? :) - no_solution_found 2012-02-14 15:21
ja mówię, że pconnect nie jest rozwiązaniem. - dzek69 2012-02-14 15:37

Pozostało 580 znaków

Odpowiedz

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