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):
<?php function getMore($iKey) { $Name = 'moreinfo-'.$iKey; $oCache = new cache; if ($oCache->expired($Name, 3600*24*7) || (!$oCache->ping($Name))): $this->db->setWhere("id = '$iKey'"); $oCache->save($Name, $this->db->fetchOne(db::FETCH_ASSOC, $this->db->select('song', true))); endif; return $oCache->read($Name, true); } ?>
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:
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.