sql >> Database teknologi >  >> RDS >> Mysql

Sessionsvariabler:Hvor meget data er for meget?

For det første er PHP-sessioner ikke gemt i hukommelsen som standard , de er gemt på disken, så hver blok/session, du skriver til, kommer til at optage diskplads og ikke hukommelse (indtil du bruger PHP til at læse sessionsdataene).

Ja, du er potentielt mere effektiv, men ikke hvis du vil skalere, og her er grunden:


Lagring af data i sessioner

Det er helt acceptabelt at opbevare nogle data i sessioner. Teoretisk set er der ingen grænse (selvom jeg aldrig har prøvet at bryde den eller endda skubbe den, bare gå til en mere effektiv løsning). Du vil dog være begrænset af diskplads og PHP memory_limit() .

Ofte omfatter data, der er gemt i sessioner, ting som:

  • Brugernavne
  • Hashes
  • Registreringsdatoer
  • Andre variabler (brugergruppe-id'er/nøgler osv.)
  • Flash-beskeder
  • (IKKE adgangskoder!)

Der er dog en afvejning. Hvis din trafik (og forbrug) stiger, og du gemmer en masse data i $_SESSION , vil du højst sandsynligt begynde at se problemer, både med hensyn til disk- og hukommelsesforbrug.

Jeg tror ikke, der er noget problem med det, du foreslår, men ud over de elementer, du har angivet, og hvor eksemplerne ovenfor overlapper hinanden, kræves forsigtighed.

Hvis du vil skalere (vandret) og beholde diskbaserede sessioner, har du muligheder ( klæbrige sessioner eller lagernetværk er et par), da disken på en server ikke gemmer de samme sessioner som en disk på en anden server.


Sessionsdataplacering

Du kan finde det sted, hvor PHP gemmer sessionsdata, ved at ringe til: session_save_path()

eller på CLI:

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

Du har ikke nævnt dit OS, men almindelige placeringer for sessionsfilerne (på tværs af forskellige OS-typer) er:

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

Sessioner gemt på disk har normalt filnavne, der ser sådan ud ved hjælp af ls -al :

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

Det er værd at bemærke, at der ofte er affaldsindsamlingsprocesser, der renser døde sessioner ud efter bestemte perioder. Det varierer efter OS, men de er normalt til stede med forskellige LAMP-baserede installationer.


Andre muligheder for sessionslagring/tilgange

I din database
Sessionsdata gemmes ofte i en DB i stedet for på lokal disk, og dette fungerer godt for både mikro-, små og (afhængigt af hvordan det gøres) mellemstore websteder med et rimeligt trafikniveau.

Som enhver anden løsning har den sine fordele og ulemper (som at være i stand til at udelukke/sparke en bruger ud ved at køre en forespørgsel i stedet for at slette en sessionsfil fra /tmp )

I hukommelsen
for større (mere trafik) websteder og især hvor mængden af ​​samtidige brugere er høj, er hukommelsen hurtigere at læse/skrive til for meget ofte tilgåede variabler eller data i stedet for at tilføje unødig belastning til din DB. Det kan og bør stadig skrives til databasen (se gennemskrivningscache ), men også opbevares i hukommelsen for effektiv adgang.

En særlig fordelagtig teknik er hukommelsescache . Et udbredt eksempel på PHP-kompatibel open source-løsning er Memcached , som kan bruges på én server eller mange [distribuerede]. Jeg har set dette brugt af små virksomheder såvel som store, og du skal kun se på, hvem der bruger det/bidrager...



  1. Forstå resultaterne af Execute Explain Plan i Oracle SQL Developer

  2. genstart mysql server på windows 7

  3. mysql_num_rows() forventer, at parameter 1 er ressource, boolesk givet ind

  4. SCHEMA() Funktion i MySQL