Just nu i M3-nätverket
Jump to content

Sessions versus nytt mysql-anrop


Sindar

Recommended Posts

Tjena!

 

Jag hade bara en tanke, som jag skulle vilja ha svar på.

 

Vilket är snabbast och minst resurskrävande, att ha ett anrop till Mysql och sedan sätta tio sessions där tre-fem används på varje sida, eller göra varje anrop för sig. Alla är från samma tabell.

 

MVH

 

Link to comment
Share on other sites

Christoffer Eklund

Nu kan jag inget om PHP och mySQL, men principen bör ju vara den samma som ASP och msSQL.

Och då skulle jag säga att strunta i sessionerna. Enligt min efarenhet så sessioner extremt resurskrävande.

Vi hade tex en site med ca 300 samtidiga användare på, där skapade vi då en inloggnigssession per användare som följde med överallt på siten och det gick såååå j*vla trögt efter ett tag, så vi stekte den idén och löste det på annat sätt.

 

Så, som sagt, strunta i sessionerna

 

/doffe

 

Link to comment
Share on other sites

Det här kan utvecklas till en väldigt intressant tråd faktiskt...

 

I PHP så är standardförfarandet för sessioner att de sparas som en fil i /tmp-mappen.

Varje gång du fortsätter en session läses alltså denna fil in, och omvandlas från en sträng till en matris med unserialize() (läs mer i manualen för att se exempel hur dessa strängar ser ut).

 

Om vi istället antar att du hämtar de variabler du behöver för tillfället ur en databas, så läser den ju också in en fil, och öppnar antingen en tcp- eller socket-anslutning. Plus att den kör en SQL-fråga (om du nu hämtar alla variabler i en och samma fråga, och ur en och samma tabell).

Till detta ska också ses att MySQL-måste kontrollera dina databasrättigheter mot en annan tabell.

 

Att tänka på är att för varje fil som ska öppnas så måste din förfrågan även kollas mot fil-rättigheterna, samt om filen är låst eller inte.

Detta är faktiskt den delen av operationen som tar längst tid.

 

I fil-sessions-alternativet blir resultatet alltså att PHP själv läser in en fil, och processar innehållet.

I databas-alternativet måste minst 4 filer läsas (2 filer per tabell - rättigheter och SQL-tabell), en anslutning sättas upp (används eventuellt redan för andra operationen, och då kan man räkna bort den), och till sist en underprocess startas för MySQL.

 

Databaser är aldrig snabbare än direkt filläsning, utan bara mer skalbara.

 

Så lösningen som jag ser det är fil-alternativet, men försöka minimera storleken på sparad data.

Om datan använd ytterst sällan kan du ju istället spara just denna i en databas, och resten i fil.

 

Det finns en hel del intressanta artiklar om (ung.) detta i de två senaste nummrena av php|architect faktiskt (www.phparch.com).

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...