Kom ihåg mig?
Home Menu

Menu


Besökare "online"

 
Ämnesverktyg Visningsalternativ
Oläst 2007-10-15, 12:33 #1
Stylesearch.se Stylesearch.se är inte uppkopplad
Nykomling
 
Reg.datum: Jul 2006
Inlägg: 8
Stylesearch.se Stylesearch.se är inte uppkopplad
Nykomling
 
Reg.datum: Jul 2006
Inlägg: 8
Hej,

Vet inte om detta passar under server eller klient men det är ju i alla fall en form av kodning det handlar om.


En fråga som konstant dyker upp i mitt huvud är hur andra brukar lägga upp mätningen av sina online-besökarsiffror.

Personligen kör jag ofta ett script som uppdaterar besökarens online-tillstånd ett par gång per minut. Så att jag får en bra inblick i hur många som verklilgen är på sidan "just i denna minut".

Det som är förbryllande är när man börjar kolla andra sidor, ofta med en hundradel så många besökare/användare, som visar riktiga fantasisiffror som säger tiotusentals besökare är online.

Många av dessa måste räknar en besökare som aktiv/online även om den inte gjort något på en timma eller hur fungerar det?

Jag menar det är en viss skillnad att gå ut med 250st besökare som verklilgen varit kvar på sidan den senaste minuten vs 4500 som gjort något den senaste timman, eller de 10 000 som som loggat in men inte klickat "logga ut" under de senaste 12 timmarna (det verkar faktiskt som att en del använder den sistnämnda)

Jag vet att det i grund är en löjlig fråga men den återkommer och irriterar mig,
så hur gör ni/du?
Stylesearch.se är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-15, 12:55 #2
coredevs avatar
coredev coredev är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Sep 2007
Inlägg: 1 554
coredev coredev är inte uppkopplad
Bara ett inlägg till!
coredevs avatar
 
Reg.datum: Sep 2007
Inlägg: 1 554
Om du kör Apache 2 och PHP4 på debian linux kan du alltid räkna antalet aktiva sessioner:

ls -l /var/lib/php4 | wc -l

Ingen vidare snygg metod, av ett antal anledningar. Men den är lätt och ger bra siffror
coredev är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-15, 13:06 #3
Stylesearch.se Stylesearch.se är inte uppkopplad
Nykomling
 
Reg.datum: Jul 2006
Inlägg: 8
Stylesearch.se Stylesearch.se är inte uppkopplad
Nykomling
 
Reg.datum: Jul 2006
Inlägg: 8
Citat:
Om du kör Apache 2 och PHP4 på debian linux kan du alltid räkna antalet aktiva sessioner
Nej, kör inte Apache men visst, det finns flera sätt att ta fram data men min fråga handlar mest om hur lång timeout andra sätter på dessa sessioner. En minut? En timma? Alltså hur länge en besökare anses vara "aktiv"?

Jag antar att inte ens apache/php-sessioner automatiskt time'ar ur i precis samma sekund som användaren lämnat sidan. Så frågan handlar inte om implementationen utan om vilket timeout man väljer "innan besökaren anses vara borta".
Stylesearch.se är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-15, 13:36 #4
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
Jag sätter en användare till aktiv då denna har varit aktiv inom de 10 senaste minuterna. Tycker att det är en rätt lagom tid faktiskt.
fors är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-15, 13:59 #5
Stylesearch.se Stylesearch.se är inte uppkopplad
Nykomling
 
Reg.datum: Jul 2006
Inlägg: 8
Stylesearch.se Stylesearch.se är inte uppkopplad
Nykomling
 
Reg.datum: Jul 2006
Inlägg: 8
Citat:
Jag sätter en användare till aktiv då denna har varit aktiv inom de 10 senaste minuterna. Tycker att det är en rätt lagom tid faktiskt. *
Okej, ja tio minuter låter ju som en okej siffra.

Varför jag egentligen frågar är nog baserat kring att nuförtiden (när man har lite besökare) så blir det en så väldig skillnad. På tio min ligger värdet på över 3000, medans med 1 min så har hamnar det på en tiondel av det.

Som sagt en ganska löjlig fråga men det vore ändå kul att ha med denna siffra tillsammans med övrig information emot annonsörer och dylikt. Känns bara som att det skapar risk för en skum situation där man sedan måste gissa sig till varför xxx-sajten som ska vara så "mindre" ändå visar 4000 medan vi bara har 300. Man har ju ingen aning om hur "övriga" väljer att sätta sin timeout.
Stylesearch.se är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-15, 14:02 #6
coredevs avatar
coredev coredev är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Sep 2007
Inlägg: 1 554
coredev coredev är inte uppkopplad
Bara ett inlägg till!
coredevs avatar
 
Reg.datum: Sep 2007
Inlägg: 1 554
Fråga: hur gör man detta på ett vettigt sätt när man har över 100.000 användare i databasen. Att göra en select på det tar lite väl mycket databaskraft...

Kanske cacha frågan i memcache iofs..
coredev är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-15, 14:40 #7
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
Citat:
Originally posted by coredev@Oct 15 2007, 13:02
Fråga: hur gör man detta på ett vettigt sätt när man har över 100.000 användare i databasen. Att göra en select på det tar lite väl mycket databaskraft...

Kanske cacha frågan i memcache iofs..
Jag har visserligen inte lika många användare, men jag gör följande:
1) Jag har en kolumn i användartabellen som avser senaste aktivitet som även är indexerad
2) Vid varje sidhämtning (om man är inloggad) så uppdaterar jag fältet för senaste aktivitet i användartabellen
3) När de aktiva användarna visas så används ju indexet ovan och så cachar jag resultatet i 1 minut i minnet
fors är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-15, 15:17 #8
Stylesearch.se Stylesearch.se är inte uppkopplad
Nykomling
 
Reg.datum: Jul 2006
Inlägg: 8
Stylesearch.se Stylesearch.se är inte uppkopplad
Nykomling
 
Reg.datum: Jul 2006
Inlägg: 8
Jag har ett par olika aproch,

1. Den ena (som jag i vanliga fall använder, och för att inte blanda in databasen)
är att ha en cachad tabell/array i minnet som innehåller ip eller anvID + senast uppdaterad. Sen kör jag en count på hur många rader den innehåller.

När cachen gör timeout så kopieras den automatiskt tillbaka till en ny cache men först går den igenom tabellen och tar bort de ip-adresser som inte har uppdaterats inom en minut.


2.
Är det du nämner om att köra lite select, det gör inte så ont att göra en
select count(*) from XXX with (nolock) where online=1 and senastuppdaterad > getdate()...
men då brukar jag köra var 5:e minut istället så att det inte blir för mycket ont för databasen, dock gör ju nolock att den egentigen inte påverkar något annat. Har slagit sådana mot db's med över 250 000 användare. Nyckeln är att ha en online-bit så att den inte behöver gå igenom precis allihopa (sen köra en uppdate av onlinebitten varje timma eller liknande för att få bort dem som lämnat sidan utan att logga ut).

3.
Är att varje användare cachar sin ip+senasttid i en public cache, sen loopar jag igenom alla nycklar hela cachen och ser hur många.. (precis samma som 1:an men utan någon array)


När det gäller att uppdatera användarens "senast" i databasen så rekommenderar jag starkt en cache där också... som uppdaterar databasen med den specifika användarens tidpunkt när cachen gör timeout, sätt den på 20 sekunder, det tar bort mellan 20-30 updates i databasen per användare och minut.


Fors,
du cachar resultatet en gång i minuten. Men på vilka kritera? alltså hur länge sedan måste användaren ha gjort något innan du räknar den som aktiv?
Stylesearch.se är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-15, 15:34 #9
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
Citat:
Originally posted by Stylesearch.se@Oct 15 2007, 14:17
Jag har ett par olika aproch,

1. Den ena (som jag i vanliga fall använder)
är att ha en cachad tabell i minnet som innehåller ip eller anvID + senast uppdaterad. Sen kör jag en count på hur många rader den innehåller.

När cachen gör timeout så kopieras den automatiskt tillbaka till en ny cache men först går den igenom tabellen och tar bort de ip-adresser som inte har uppdaterats inom en minut.


2.
Är det du nämner om att köra lite select, det gör inte så ont att göra en
select count(*) from XXX with (nolock) where online=1 and senastuppdaterad > getdate()...
men då brukar jag köra var 5:e minut istället så att det inte blir för mycket ont för databasen, dock gör ju nolock att den egentigen inte påverkar något annat.

3.
Är att varje användare cachar sin ip+senasttid i en public cache, sen loopar jag igenom alla cachade värden och ser hur många..


När det gäller att uppdatera användarens "senast" i databasen så rekommenderar jag starkt en cache där också... som uppdaterar databasen men den specifika användarens tidpunkt när cachen gör timeout, sätt den på 20 sekunder, det tar bort mellan 20-30 updates i databasen per användare och minut.


Fors,
du cachar resultatet en gång i minuten. Men på vilka kritera? alltså hur länge sedan måste användaren ha gjort något innan du räknar den som aktiv?
SQL-frågan hämtar användarna som har varit aktiva inom de 10 senaste minuterna. Sedan så cachar jag resultatet i 1 minut. Vilket egentligen innebär att listan som visar antalet användare i värsta fall kan skriva ut användare som inte har gjort någonting på maximalt 11 minuter. Dock kan man ju gå in på användarens profil och se den exakta tiden för den senaste aktiviteten. Men jag ser det inte som något problem, eftersom det bara är 1 minut som den maximalt kan fela.
fors är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-15, 15:41 #10
Stylesearch.se Stylesearch.se är inte uppkopplad
Nykomling
 
Reg.datum: Jul 2006
Inlägg: 8
Stylesearch.se Stylesearch.se är inte uppkopplad
Nykomling
 
Reg.datum: Jul 2006
Inlägg: 8
Citat:
Dock kan man ju gå in på användarens profil och se den exakta tiden för den senaste aktiviteten. Men jag ser det inte som något problem, eftersom det bara är 1 minut som den maximalt kan fela.
Visst, det spelar ju liksom ingen större roll om det blir lite fel på så vis.
Jag är ju mest ute efter att se vad folk anser vara en "aktiv användare". Som jag skriver ovan så är det i mitt fall skillnad mellan att visa 300 online eller tio gånger så många online, beroende på om jag väljer att kalla "senaste minuten" för aktiv eller om det är "de senaste tio minuterna" som anses vara en aktiv medlem.
Stylesearch.se är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 08:44.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017