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
matix
post
Post #2





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

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


Problem z działaniem podstrony danego utworu rozwiązany. Przy każdym unikalnym wejściu, dawalem $this->model->addVisited(), co dodawało +1 do bazy danych w tabeli `downloaded`. Myślałem, że to nie będzie aż tak uciążliwe, ale po usunięciu tej linijki, skrypt ładuje się 0.5 - 2 sekund, maksymalnie. Dziwne.

Jest jeszcze jeden problem, bo nie wiem jak zoptymalizować wyszukiwarkę, tz. mam coś takiego:

  1. <?php
  2. $query = $this->params->post->query;
  3.  
  4. if ($query != '')
  5. $this->redirectUri($this->url->build('search/'.trim(title($query))));
  6. ?>


Problem nieco śmieszny. Mam sobie formularz z polem `query` gdzie jest wpisywana nazwa utworu. Jeśli nie jest ono puste - robi redirect na strona.pl/search/nazwa+utworu.html. I teraz pytanko, Można to jakoś szybciej załatwić? Sam redirect zajmuje jakieś 1-2 sekund.

-edit-
Oczywiście, są pozakładane indeksy.

Dzięki (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował matix 15.01.2008, 14:27:24
Go to the top of the page
+Quote Post
nrm
post
Post #3





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


Cytat(matix @ 15.01.2008, 09:09:55 ) *
Myślałem, że to nie będzie aż tak uciążliwe, ale po usunięciu tej linijki, skrypt ładuje się 0.5 - 2 sekund, maksymalnie. Dziwne.

Bo nie jest; masz kosmiczne czasy wykonania; nie odpowiedziałeś na pytanie.
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: 2.10.2025 - 20:39