Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System cache na plikach, struktura, wydajność
Forum PHP.pl > Forum > PHP
Quantum
Hej, napotkałem na problem przy budowie klasy do obsługi cache.

Mianowicie, mam zamiar stworzyć sterownik cache oparty o pliki. Rzecz jasna nie byłoby z tym większego problemu, gdyby aplikacja miała nie być skalowalna. Problem wydajnościowy - systemy mają problem jeżeli w jednym folderze znajduje się więcej niż ~500 plików. Żeby zapobiec takiej sytuacji napisałem poniższy kod (dzieli on nazwę pliku na podfoldery):

  1. $str = sha1('abcd'); // 81fe8bfe87576c3ecb22426f8e57847382917acf
  2. $chunks_amount = 10;
  3. $chunk_length = 1;
  4.  
  5. $filepath = implode('/', str_split(substr($str, 0, $chunks_amount), $chunk_length)) . substr($str, $chunks_amount);
  6.  
  7. echo $filepath; // 8/1/f/e/8/b/f/e/8/7576c3ecb22426f8e57847382917acf


Gdzie jest ten problem ? Pojawia się wtedy gdy przychodzi tagować pliki (aktualizacja cache-u itp.). Dotąd wyglądało to podobnie do..
Kod
tag-unix_timestamp-hash_nazwy

Jak Wy to rozwiązujecie ?
wookieb
http://forum.php.pl/index.php?showtopic=49...st&p=568649
Jeżeli nie masz numerów w nazwie pliku cache możesz zamienić parę pierwszych znaków id sesji na numer ord
Jeżeli chodzi o usunięcie starych sesji no to już bywa różnie. Taka naprawdę nie jest to takie fajne jeżeli robisz to na plikach. Lepiej raportować w bazie listę sesji. Stąd też będziesz wiedział które sesje dobiegają ku końcowi i usuwasz te pliki. Generalnie bardzo dobrym sposobem na sesje jest użycie MEMCACHE.
Quantum
Memcache to świetne rozwiązania dla obsługi sesji, które i tak zamierzam wprowadzić jako kolejny sterownik. Problem w tym, że sesje na plikach mają być sterownikiem podstawowym, nie chciałbym zaprzęgać do tego jeszcze bazy, ale jeżeli nie będzie innego wyjścia to tak zrobię smile.gif
andycole
Tak, MemCache jest bardzo przyjazny w użyciu i odpowiedni czy to do sesji czy do innego rodzaju danych. Dodatkowo jest szybszy bo trzyma wszystko w ramie.
Z tym że na shared tego nie zainstalujesz, poza tym musisz mieć jakieś tam zasoby pamięci RAM przydzielonej dla memcache.

Jak dużą objętość prognozujesz dla tego cachu?
Quantum
Cytat
Z tym że na shared tego nie zainstalujesz, poza tym musisz mieć jakieś tam zasoby pamięci RAM przydzielonej dla memcache.

Jak dużą objętość prognozujesz dla tego cachu?

Dlatego też pisze kilka sterowników - jeżeli postawię coś na współdzielonym hostingu to na pewno użyję sterownika sesji na plikach, a jeżeli będzie to coś większego to będzie i memcache smile.gif Co do drugiego pytania - nie robię tego pod konkretną aplikację, to jedna z części mojego framework'a.
wookieb
To jeszcze jedno zasadnicze pytanie. Z jakiej metody wywołania gc korzystasz. Phpowej? Czy sam na końcu każdej sesji wywołujesz gc?
Quantum
W tym momencie przeprojektowuje dopiero pierwszy sterownik cache, ale najprawdopodobniej nowe sterowniki sesji podpinane będą przez session_set_save_handler tj. do tej pory czyli przypadek pierwszy. Wzorowałem swoją klasę na cache z Kohana 2.3, ale nawet tam nie ma obejścia na przekroczony limit plików w jednym folderze. Ogólnie to GC w sterownikach sesji na cache zwraca po prostu TRUE, bo przedawnione pliczki są czyszczone przez sam GC klasy cache. Po głębszym zastanowieniu to z tym raportowaniem plików cache do bazy nie powinno być chyba aż tak źle - zastąpi to wywołania glob i raczej nie powinienem odnotować większego spadku wydajności, a przy większej ilości plików powinno wyjść nawet na plus.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.