3 votes

Approches pour recueillir de grandes statistiques de visite

J'ai un site web, où les utilisateurs peuvent publier leurs articles et j'aimerais donner des statistiques complètes sur les visites et les référents de chaque article à 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égation pour dessiner des graphiques, etc.

Le problème est que les articles reçoivent environ 300 000 vues en 24 heures et en un mois seulement, la table des statistiques comptera environ 9 millions d'enregistrements, ce qui est un très grand nombre, car mon serveur n'est pas assez puissant.

Y a-t-il une solution à ce type 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 de statistiques d'origine :

visitid INT
articleid INT
ip INT
datetime DATETIME

6voto

mjv Points 38081

En supposant une solution de suivi d'utilisation faite maison (par opposition à Google Analytics comme suggéré dans une autre réponse), un système à deux bases de données pourrait être ce que vous recherchez :

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

L'objectif de cette configuration est principalement lié à des préoccupations opérationnelles. La base de données "temps réel" n'est pas indexée (ou minimallement 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, tandis que la base de données "hors ligne" récupère les événements collectés au cours de la journée.

Les deux bases de données peuvent avoir exactement le même schéma, ou la base de données "hors ligne" peut introduire différentes formes d'agrégation. Les détails d'agrégation spécifiques appliqués à la base de données hors ligne peuvent varier considérablement en fonction du désir de maîtriser la taille de la base de données et en fonction des données jugées importantes (la plupart des fonctions de statistiques/agrégation introduisent une certaine perte d'informations, et il faut décider quelles pertes sont acceptables et lesquelles ne le sont pas).

En raison de la nature à "demi-vie" de la valeur des journaux d'utilisation, selon laquelle la valeur relative des détails diminue avec le temps, une stratégie courante est d'agréger des informations sur plusieurs niveaux, de sorte que les données collectées au cours des derniers, disons, X jours restent principalement inchangées, les données collectées entre X et Y jours sont partiellement agrégées, et enfin, les données plus anciennes que Y jours ne conservent que les informations les plus saillantes (par exemple, le nombre de hits).

1voto

UtopiaLtd Points 755

Sauf si vous êtes particulièrement intéressé par le stockage de vos données statistiques vous-même, vous pourriez envisager d'utiliser Google Analytics ou l'un de ses homologues modernes, qui sont bien meilleurs que les anciens compteurs de visites hébergés à distance des années 90. Vous pouvez trouver l'API de l'interface PHP Google Analytics à http://code.google.com/p/gapi-google-analytics-php-interface/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X