2011-07-03 4 views
3

J'ai un site Web, où les utilisateurs peuvent poster leurs articles et je voudrais donner des statistiques complètes sur les visites de chaque article et les renvois à son auteur. La réalisation semble assez simple ici, il suffit de stocker un enregistrement de base de données pour chaque visite, puis d'utiliser des fonctions d'agrégat pour dessiner des graphiques et ainsi de suite. Le problème, c'est que les articles reçoivent environ 300k vues en 24 heures et juste en un mois, la table de stats va recevoir environ 9 millions d'enregistrements ce qui est un très grand nombre, car mon serveur n'est pas très puissant.Approches de la collecte de grandes statistiques de visite

Existe-t-il une solution à ce genre de tâche? Existe-t-il un algorithme ou un mécanisme de mise en cache qui permet de stocker des statistiques à long terme sans perdre en précision?

P.S. Voici ma table stats originale:

visitid INT 
articleid INT 
ip INT 
datetime DATETIME 

Répondre

6

En supposant une solution de suivi de l'utilisation maison (contrairement à dire GA comme suggéré dans une autre réponse), une configuration de deux bases de données peut être ce que vous cherchez :

  • une base de données "en temps réel" qui capture les événements de la visite comme ils viennent.
  • une base de données "hors ligne" où les données de la base de données "en temps réel" sont collectées régulièrement, pour être [éventuellement] agrégées et indexées.

Le but de cette configuration est principalement motivé par des préoccupations opérationnelles. La base de données "temps réel" n'est pas indexée (ou minimalement indexée) pour une insertion rapide, et elle est régulièrement vidée, généralement chaque nuit, lorsque le trafic est plus léger, la base de données "offline" collectant les événements collectés.

Les deux bases de données peuvent avoir le même schéma, ou la base de données "hors ligne" peut introduire diverses formes d'agrégation. Les détails d'agrégation spécifiques appliqués à la base de données hors ligne peuvent varier fortement selon la volonté de contrôler la taille de la base de données et selon les données jugées importantes (la plupart des statistiques/fonctions d'agrégation entraînent une perte d'information). sont acceptables et qui ne le sont pas). En raison de la nature "demi-vie" de la valeur des journaux d'utilisation, par laquelle la valeur relative des détails diminue avec le temps, une stratégie commune consiste à agréger les informations dans plusieurs niveaux, de sorte que les données collectées dans le dernier, disons, X jours restent pour la plupart intacts, les données collectées entre les jours X et Y sont partiellement agrégées, et enfin, les données antérieures à Y jours ne conservent que les informations les plus saillantes (disons, le nombre de visites).

Questions connexes