Cache och statistik

Events happening in the community are now at Drupal community events on www.drupal.org.
_dala_'s picture

Jag vill med det här inlägget berätta om ett problem jag stött på i mitt arbete och tipsa om en tänkbar lösning på detta. Problemet är ett krav på tillförlitlig och (relativt) uppdaterad statistik på ett välbesökt community utan att tappa för mycker prestanda. Statistiken gäller unika sidvisningar per inlägg.

Eftersom sajten förrutom besökarstatistik ska innehålla data som kräver många databasanrop och tunga beräkningar är den starkt beroende av bra cache (vilket många hävdar att Drupal per definition är). Vid strikt cachening kommer dock Drupal oftast (förhoppningsvis) vara ovetandes om besökarna och kan därför heller inte räkna dem.

En lösning på detta är att använda Google analytics. Google tillhandahåller ett API som låter kontoinnehavare hämta statistik i xmlformat via htttp. Det finns en uppsjö program som utnyttjar detta, bland annat en Drupal modul som heter Google Analytics API.

Som jag såg det hade jag nu två vägar att välja mellan:

  1. Skriva en modul som, i samarbete med Google Analytics API eller på egen hand hämtar Googledata.
  2. Skriva en fristående applikation som agerar på egen hand.

Det uppenbart positiva med att bidra med en modul övervägdes dessvärre av tidspress då det innebär mer arbete med att få modulen så abstrakt att den passar den breda massan än att skriva en skräddarsydd applikation, så jag valde att börja med en fristående applikation.

Mitt sätt att tackla problemet innebar att jag med ett shellskript (en gång per natt):

  • Hämtar data (cURL).
  • Delar upp resultatet i mindre delar på filsystemet.

Och sedan med ett PHP-skript (upprepade gånger, någon gång på natten):

  • Läser in fil.
  • Parsar xml.
  • Uppdaterar statistiktabeller.
  • Raderar fil

Till shellskriptet utgick jag ifrån ett exempelskript från Google code.

Eftersom att jag uppdaterar Drupals "egna" statistiktabell med data från Google kan jag forsätta använda Views för statistik förutsatt att jag lägger in ett "dummy-värde" i history-tabellen. (Views kör en join på historytabellen)

Den stora nackdelen med att använda Google analytics är att statistiken har upp till 12 timmars fördröjning. Så Dagens mest lästa blir egentligen gårdagens mest lästa. Fördelarna är att statistiken är tillförlitlig (godkänd av KIA-index) och framför allt så tillåter det oss att använda en Reverse proxy och samtidigt ha korrekt statistik.

Jag har testat systemet I en utvecklingsmiljö och det ser ut att fungera bra, mer tester behövs dock.

Som sagt är planen att jag när tid finns ska skriva en modul av detta men tills dess publicerar jag gärna min nuvarande kod om intresse finns.

Är det fler som har erfarenhet av detta får ni gärna berätta hur ni hanterade problemet och kritisera gärna mitt sätt att lösa det på.

Mvh, Dan

Sweden

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: