FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Nykomling
|
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? |
||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Bara ett inlägg till!
|
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 ![]() |
|||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Nykomling
|
Citat:
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". |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Medlem
|
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.
|
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Nykomling
|
Citat:
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. |
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Bara ett inlägg till!
|
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.. |
|||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Medlem
|
Citat:
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 |
||
![]() |
![]() |
![]() |
#8 | ||
|
|||
Nykomling
|
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? |
||
![]() |
![]() |
![]() |
#9 | ||
|
|||
Medlem
|
Citat:
|
||
![]() |
![]() |
![]() |
#10 | ||
|
|||
Nykomling
|
Citat:
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. |
||
![]() |
![]() |
Svara |
|
|