Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zmienne sesji:Ile danych to za dużo?

Po pierwsze, sesje PHP nie są domyślnie przechowywane w pamięci , są one przechowywane na dysku, więc każdy blok/sesja, do której piszesz, będzie zajmować miejsce na dysku, a nie pamięć (dopóki nie użyjesz PHP do odczytania danych sesji).

Tak, potencjalnie jesteś bardziej wydajny, ale nie, jeśli chcesz skalować, a oto dlaczego:


Przechowywanie danych w sesjach

Przechowywanie niektórych jest całkowicie dopuszczalne dane w sesjach. Teoretycznie nie ma limitu (chociaż nigdy nie próbowałem go przełamywać ani nawet go przepychać, po prostu przejdź do wydajniejszego rozwiązania). Będziesz jednak ograniczony przez miejsce na dysku i PHP memory_limit() .

Często dane przechowywane w sesjach obejmują takie elementy, jak:

  • Nazwy użytkownika
  • Hasze
  • Daty rejestracji
  • Inne zmienne (identyfikatory/klucze grup użytkowników itp.)
  • Wiadomości Flash
  • (NIE hasła!)

Istnieje jednak kompromis. Jeśli Twój ruch (i użycie) wzrośnie i przechowujesz dużo danych w $_SESSION , najprawdopodobniej zaczniesz widzieć problemy, zarówno pod względem wykorzystania dysku, jak i pamięci.

Nie sądzę, aby był jakiś problem z tym, co sugerujesz, ale poza wymienionymi przez Ciebie pozycjami i miejscami, w których powyższe przykłady się pokrywają, wymagana jest ostrożność.

Jeśli chcesz skalować (w poziomie) i zachować sesje na dysku, masz opcje ( przyklejone sesje lub sieć pamięci masowej są parą), ponieważ dysk na jednym serwerze nie przechowuje tych samych sesji, co dysk na innym serwerze.


Lokalizacja danych sesji

Możesz znaleźć lokalizację, w której PHP przechowuje dane sesji, wywołując: session_save_path()

lub na CLI:

php -r 'echo session_save_path(), "\n";'

Nie wspomniałeś o swoim systemie operacyjnym, ale typowe lokalizacje plików sesji (w różnych typach systemów operacyjnych):

/tmp 
/var/lib/php5/
/var/lib/php/session
c:/wamp/tmp

Sesje przechowywane na dysku zwykle mają nazwy plików, które wyglądają tak przy użyciu ls -al :

-rw-------  1 www www      0 2013-07-09 20:12 sess_bdsdjedmvtas5njhr5530b8rq6

Warto zauważyć, że często istnieją procesy zbierania śmieci, które usuwają martwe sesje po określonych okresach. Różni się w zależności od systemu operacyjnego, ale zwykle są one obecne w różnych instalacjach opartych na LAMP.


Inne opcje/podejścia do przechowywania sesji

W Twojej bazie danych
Dane sesji są często przechowywane w bazie danych zamiast na dysku lokalnym i działa to dobrze zarówno w przypadku mikro, małych, jak i (w zależności od tego, jak to się robi) średnich witryn o rozsądnym poziomie ruchu.

Jak każde inne rozwiązanie, ma swoje zalety i wady (jak możliwość zbanowania/wyrzucenia użytkownika przez uruchomienie zapytania zamiast usuwania pliku sesji z /tmp )

W pamięci
W przypadku większych witryn (o większym ruchu), a zwłaszcza tam, gdzie liczba jednoczesnych użytkowników jest duża, pamięć jest szybsza do odczytu/zapisu w przypadku bardzo często używanych zmiennych lub danych, zamiast niepotrzebnego obciążania bazy danych. Może i nadal powinien być zapisany w bazie danych (patrz buforowanie z zapisem ), ale także przechowywane w pamięci w celu zapewnienia efektywnego dostępu.

Jedną z technik o szczególnej wartości jest buforowanie pamięci . Powszechnie używanym przykładem rozwiązania open source zgodnego z PHP jest Memcached , który może być używany na jednym serwerze lub wielu [rozproszonych]. Widziałem to używane zarówno przez małe, jak i duże firmy i wystarczy spojrzeć na to, kto z nich korzysta/wnosi wkład...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LOAD DATA INFILE Kod błędu:13

  2. MySQL:Jak pobrać losowy wiersz lub wiele losowych wierszy?

  3. Jak napisać instrukcję IF ELSE w zapytaniu MySQL?

  4. Automatycznie dodawaj litery przed polem automatycznego przyrostu

  5. W jaki sposób można przechowywać godziny pracy firmy w bazie danych/modelu aplikacji Rails?