FAQ |
Kalender |
2006-03-30, 16:30 | #11 | ||
|
|||
Medlem
|
Citat:
|
||
Svara med citat |
2006-03-30, 19:48 | #12 | |||
|
||||
Bara ett inlägg till!
|
Citat:
|
|||
Svara med citat |
2006-04-04, 22:05 | #13 | ||
|
|||
Medlem
|
Citat:
För bättre prestanda blir det nog ganska sällan med en userland-implementation i PHP än att använda PHP:s inbyggda funktioner som är skrivna i C. Det är bättre att koncentrera sig på sin applikation eller webbplats än att hålla på och bygga grejer som redan finns inbyggt i språket. Dock är det nog viktigt att man ändå "har koll på sina bitar". Att lagra sessionsdata på fil, i en databas eller i RAM-minnet är en smaksak och beror på den miljö applikationen/webbplatsen körs i. På till exempel en delad unix-server skulle jag nog vara försiktig med att lagra sessionsdata i /tmp som ju ofta är standard. Enda gången jag ser någon anledning till att inte använda PHP:s inbyggda sessionshantering (med eller utan egna krokar) är om man använder någon produkt eller extension för en single-sign-on-lösning. |
||
Svara med citat |
2006-04-05, 00:36 | #14 | |||
|
||||
Bara ett inlägg till!
|
Citat:
Citat:
En mycket svag punkt för PHP är att den inte finns en standard för hur allt är konfigurerat. Låt oss säga att du har satt upp en LAMP-server konfigurerat så att du klarar mycket trafik med PHP's inbyggda sessionhanterare (dvs. lagrar datan på säkert ställe samt inte på disk). Vad händer då när du plötsligt ska byta server/webbhotell? Då sitter du kanske plötsligt på en mer standard-installation som både är osäker och långsam då den ska ändra datat i 200 sessions per sekund (stackars diskar). Hade det inte varit enklare då att haft en egen sessionhanterare integrerad i sajten? Jopp, det hade det nog. Och åter igen, det är så mycket enklare att ha all data på samma ställe. Försök plocka ut användarnamnet på alla som är online just nu på en sajt som använder en separat sessionhanterare. Då ska du först ha ut alla användar-ID:n från alla sessioner (hur gör man ens det med PHP's inbyggda?) och sen ska du formulera det till en två mil lång SQL-fråga som läser ut användarnamnet från databasen. Suck och stön vad krångligt och segt. |
|||
Svara med citat |
2006-04-05, 01:25 | #15 | ||
|
|||
Medlem
|
Citat:
Citat:
Finns ingen anledning att skapa en egen sessionshantering när det finns så bra möjligheter att integrera PHP:s sessionshantering med sin egen kod. Jag misstänker att vi är helt överens egentligen. Är det så att det du kallar för "egen sessionshanterare" egentligen bara är dina userland-funktioner du registrerar via session_set_save_handler()? I så fall missförstod jag nog din första post. När jag läser "egen sessionshantering" så läser jag det som att man ersätter session_start() och $_SESSION med egen cookie-hantering och egna metoder för att registrera och läsa sessionsvariabler. Det var länge sen man behövde det. Däremot har många olika behov av lagringslösning för sessioner och det är en helt annan sak. |
||
Svara med citat |
2006-04-05, 11:50 | #16 | |||
|
||||
Bara ett inlägg till!
|
Citat:
Nu har du inte tänkt till riktigt. Index är ju till för att snabba upp. Om du använder vettiga index går det snabbare. Om du missbrukar index så går det långsammare. Du kan ju inte utgå från att man använder korkade index bara för att man slänger upp sessions i en SQL-databas. Nej, jag menar inte att en egen sessionhanterare använder PHP's färdiga sessionsfunktioner. Den sessionhanteraren jag gjort och som jag använder på ett flertal sajter är bara 12kiB stor. De timmarna det tagit att göra den och slipa på den är den värd många gånger om. |
|||
Svara med citat |
2006-04-05, 20:56 | #17 | ||
|
|||
Medlem
|
Som jag sa tidigare, vilka behov man har skiljer sig åt väldigt. Har man en distribuerad miljö med flera lastbalanserade servrar är det ganska meningslöst att hålla sessionsdata i minnet på en enskild server. Då har man andra behov än om man har en enda server. Då måste man ha en fristående server för sessioner - oavsett metod för datalager. Ofta används t ex LDAP-databaser som lagringsmetod för single-sign-on-system då det normalt ger väldigt snabb åtkomst till data.
Om du pratar om HEAP (eller MEMORY) i MySQL finns också en del nackdelar eller risker om du hanterar många sessioner. Låt säga att du behöver lagra sessioner i minnet för att orka med prestandamässigt - då har du troligen många sessioner du hanterar och hög trafik (eller en dåligt dimensionerad maskin). Om du skulle få osedvanligt hög last helt plötsligt riskerar du att slå i taket och då konverterar MySQL automatiskt minnestabellerna till diskbaserade tabeller. Orkar maskinen med det då om du inte dimensionerat för detta? Och om du dimensionerat för detta - varför inte köra med diskbaserade tabeller redan från början? Vill du ha hög tillgänglighet och använder replikering mellan två eller fler databaser finns också problem med minnesbaserade tabeller som måste hanteras. Skulle master-databasen gå ner rensas de minnesbaserade tabellerna helt från data. Detta hanteras inte alls av child-servrarna som då behåller gammal data. Oavsett vilken modell man väljer, distribuerad eller ej, ser jag fortfarande ingen vits med att inte använda $_SESSION och php:s inbyggda sessionsmekanismer eftersom man ju normalt sett bygger egna lagringsmetoder och registrerar dem. Jag har svårt att tro att du nånsin kan få bättre prestanda med 12k php-kod än om du använder dig av den kompilerade c-koden i php-interpretatorn - oavsett om du lagrar det lokalt i minnet eller använder dig av mer raffinerade modeller. Däremot inte sagt att din kod inte fungerar. Det gör den säkert. Alla, eller många, skrev sin egna sessionshantering innan den inbyggda implementerades i php - även jag. Så du gör som du vill - bra va |
||
Svara med citat |
Svara |
|
|