Jag håller på att bygga upp en egen site och ska spara statistik över alla som besöker sidan.
Jag är dock lite osäker på hur jag bygger upp strukturen på bästa sätt, så jag skulle vilja få lite feedback på hur jag tänkt mig det ska fungera.
Då jag är .NET utvecklare har jag byggt upp följande domänmodell för att representera tabellerna databasen:
Kod:
public class Visitor : EntityWithTypedId<long>
{
public virtual DateTime Time { get; set; }
public virtual string UserAgent { get; set; }
public virtual string OS { get; set; }
public virtual bool IsSpider { get; set; }
public virtual VisitorIP Ip { get; set; }
public virtual VisitorTarget Target { get; set; }
public virtual VisitorReferrer Referrer { get; set; }
}
public class VisitorIP : EntityWithTypedId<long>
{
public virtual string Ip { get; set; }
public virtual string CountryCode { get; set; }
public virtual int Count { get; set; }
}
public class VisitorTarget : EntityWithTypedId<long>
{
public virtual string Url { get; set; }
public virtual int Count { get; set; }
}
public class VisitorReferrer : EntityWithTypedId<long>
{
public virtual string Url { get; set; }
public virtual int Count { get; set; }
}
public class VisitorDaily : EntityWithTypedId<long>
{
public virtual DateTime Date { get; set; }
public virtual int UniqueVisits { get; set; }
public virtual int TotalVisits { get; set; }
public virtual string CompressedDetailedStatistics { get; set; }
}
Varje gång någon besöker en sida så lägger man till en rad i Visitor tabellen.
Om IP adressen redan besökt så refererar man till raden som finns i VisitorIP tabellen. Samma gäller för VisitorTarget och VisitorReferrer.
En gång om dagen, troligast midnatt, så kör man sedan ett schemalagt jobb som tar ut all statistik för dagen, bearbetar, komprimerar och stoppar sedan in det i en ny rad i VisitorDaily tabellen.
efter detta så tömmer man Visitor, VisitorIP, VisitorTarget och VisitorReferrer tabellerna så att allt är rent för nästa dag.
Låter detta som ett bra sätt att hantera besöksstatistik, eller är jag helt ute och cyklar?