Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][Cache] Strona 10 k uniqów + potężny dedyk + cache = zamulanie ?
matix
post
Post #1





Grupa: Zarejestrowani
Postów: 278
Pomógł: 10
Dołączył: 13.02.2007
Skąd: Rybnik

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


Witam.

Mam pewien problem, gdyż pracuję obecnie nad serwisem, który ma 10, 000 unikalnych wizyt dziennych (150 online). Nie jest to jakoś specjalnie dużo, ale wystarczyło, abym miał problem z jego optymalizacją. Jest to serwis z mp3 !

Obecnie serwis stoi na potężnym dedyku, bo aż 8 gb ram, inne parametry też tak samo potężne jak ten ram, ale...

Strona działa dobrze z wyjątkiem tego, że gdy wchodzę w podstronę, to ładuje się ona ~35 - 50 sekund.

Problem jest w tym, że baza danych ma około 500, 000 rekordów z piosenkami i ciągle się powiększa. Myślę, że dojdzie do miliona. Wszystko ładnie działa, wyniki wyszukiwania są zapisywane w cache i nie ma problemów. Gdy wybieram pojedyńczy utwór, aby go przesłuchać ładuje mi się akcja MORE w której jest mniej więcej taka budowa(mój własny framework, proszę nie krytykować. chodzi tylko o zaprezentowanie kodu):

  1. <?php
  2. function getMore($iKey)
  3. {
  4. $Name = 'moreinfo-'.$iKey;
  5. $oCache = new cache;
  6.  
  7. if ($oCache->expired($Name, 3600*24*7) || (!$oCache->ping($Name))):
  8.  
  9. $this->db->setWhere("id = '$iKey'");
  10.  
  11. $oCache->save($Name, $this->db->fetchOne(db::FETCH_ASSOC, $this->db->select('song', true)));
  12.  
  13. endif;
  14.  
  15. return $oCache->read($Name, true);
  16. }
  17. ?>


Oznacza to, że skrypt pobiera ID piosenki z linka i do zmiennej Name zapisuje np. moreinfo-6312, następnie sprawdza czy istnieje cache o danej nazwie lub czy w nie jest "przeterminowany" (raz na tydzień). Jeśli tak - pobiera dane z bazy danych. Zapytanie wygląda mniej więcej tak:

  1. SELECT * FROM song WHERE id = 6312


na końcu wyświetla dane z cache.

Nie wiem dlaczego, ale to mi obciąza baardzo serwis.
Moje przypuszczenia to, albo układ plików cache:

- app/cache/ : TUTAJ SĄ WSZYSTKIE PLIKI CACHE, NIE MA PODZIAŁÓW NA KATALOGU (SYSTEM DEBIAN 4 - ponoć może być milion plików i to nic nie zmienia)

albo ...

no nie wiem..
miał ktoś taki problem? z góry dzięki,
Matix.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
qrees
post
Post #2





Grupa: Zarejestrowani
Postów: 275
Pomógł: 44
Dołączył: 23.11.2007

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


Cytat(matix @ 14.01.2008, 19:36:11 ) *
Witam.

Mam pewien problem, gdyż pracuję obecnie nad serwisem, który ma 10, 000 unikalnych wizyt dziennych (150 online). Nie jest to jakoś specjalnie dużo, ale wystarczyło, abym miał problem z jego optymalizacją. Jest to serwis z mp3 !

Obecnie serwis stoi na potężnym dedyku, bo aż 8 gb ram, inne parametry też tak samo potężne jak ten ram, ale...

Strona działa dobrze z wyjątkiem tego, że gdy wchodzę w podstronę, to ładuje się ona ~35 - 50 sekund.

Problem jest w tym, że baza danych ma około 500, 000 rekordów z piosenkami i ciągle się powiększa. Myślę, że dojdzie do miliona. Wszystko ładnie działa, wyniki wyszukiwania są zapisywane w cache i nie ma problemów. Gdy wybieram pojedyńczy utwór, aby go przesłuchać ładuje mi się akcja MORE w której jest mniej więcej taka budowa(mój własny framework, proszę nie krytykować. chodzi tylko o zaprezentowanie kodu):

  1. <?php
  2. function getMore($iKey)
  3. {
  4. $Name = 'moreinfo-'.$iKey;
  5. $oCache = new cache;
  6.  
  7. if ($oCache->expired($Name, 3600*24*7) || (!$oCache->ping($Name))):
  8.  
  9. $this->db->setWhere(&#092;"id = '$iKey'\");
  10.  
  11. $oCache->save($Name, $this->db->fetchOne(db::FETCH_ASSOC, $this->db->select('song', true)));
  12.  
  13. endif;
  14.  
  15. return $oCache->read($Name, true);
  16. }
  17. ?>


Oznacza to, że skrypt pobiera ID piosenki z linka i do zmiennej Name zapisuje np. moreinfo-6312, następnie sprawdza czy istnieje cache o danej nazwie lub czy w nie jest "przeterminowany" (raz na tydzień). Jeśli tak - pobiera dane z bazy danych. Zapytanie wygląda mniej więcej tak:

  1. SELECT * FROM song WHERE id = 6312


na końcu wyświetla dane z cache.

Nie wiem dlaczego, ale to mi obciąza baardzo serwis.
Moje przypuszczenia to, albo układ plików cache:

- app/cache/ : TUTAJ SĄ WSZYSTKIE PLIKI CACHE, NIE MA PODZIAŁÓW NA KATALOGU (SYSTEM DEBIAN 4 - ponoć może być milion plików i to nic nie zmienia)

albo ...

no nie wiem..
miał ktoś taki problem? z góry dzięki,
Matix.



Spróbuj mimo wszystko podzielić cache na katalogi, to że system może obsługiwać milion plików w katalogu to nie znaczy, że będzie to działać szybko. Ponadto może zamiast robić jeden potężny serwer lepiej podzieliś ten serwer na kilka (serwer plików, serwer www, serwer bazy danych).
Go to the top of the page
+Quote Post

Posty w temacie


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: 4.10.2025 - 15:57