IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Compteur de clics et statistiques


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Compteur de clics et statistiques
    Bonjour,
    je souhaite mettre en place un système de compteur de clics sur des liens, MAIS avec possibilité d'affichage de statistiques : nombre de clics par jour/mois/année...
    Et je me questionne sur la façon la plus efficace d'y parvenir.

    La simple incrémentation d'un compteur (ça, je sais faire) n'est pas suffisante.
    Il faut aussi enregistrer la date (timestamp ?) au moment du clic (?)

    J'ai penser à :
    • créer une table T_STATS_URL_CLICS
      - id_lien (identifiant du lien cliqué)
      - url_lien (URL cliquée)
      - clic_time (timestamp du clic)
    • et AJOUTER 1 LIGNE à chaque clic

    Pour l'affichage par jour/mois/année, il suffira alors d'une requête sur un intervalle de temps donné. (ça, je sais faire)

    INCONVÉNIENT : je risque de me retrouver rapidement avec des milliers, voire des millions de lignes !

    QUESTION : est-ce la bonne méthode ? (+ le nombre important de lignes générées ne risque-t-il pas d'être un problème ?)

    Sinon, avez-vous une méthodologie plus efficace à me proposer ?

    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Pour limiter le nombre d'enregistrement dans ta bdd, tu peux te baser sur l'intervalle le plus court que tu souhaites afficher.

    Si c'est à l'heure près par exemple au plus fin, tu rajoutes une seule ligne dans ta base par heure, avec un compteur que tu incrémentes sur cette heure là.

    Évidemment si c'est à la seconde près ça ne sert pas à grand chose, mais même à la minute près, ça te limite à 1440 (24*60) enregistrements maximums par jour et par lien dans ta base, même si tu as des milliers de clic ce qui n'est pas négligeable. Avec quelques index bien placés, ça devrait tourner sans problème.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci pour vos réponses.

    cela dit, est-ce la méthode la plus couramment utilisée et la plus efficace pour réaliser des statistiques ?

    En l’occurrence, je souhaite connaitre les stats des clics sur les liens de produits, c'est-à-dire combien de fois on a cliqué :
    • sur le lien du produit en page d'accueil ("produits phare")
    • sur le lien du produit dans la liste des produits ("galerie de produits")
    • sur le bouton de commande (dans la "fiche produit")
    • ...

    Bref : des stats sur des évènement précis et différents.

    => Ce qui risque de générer beaucoup de lignes en BdD... et qui m'inquiète donc, en terme de performance (des requêtes) et stockage des infos.

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Je me permet de rajouter que, si vraiment les nombres de clics sont importants et que le nombre de connexion avec la bdd pose problème, tu peux utiliser un système de cache pour php comme APC, MemCached ou phpredis qui possèdent des fonctionnalités pour incrémenter et décrémenter des compteurs de manière atomiques (c'est prévu précisément pour des utilisations comme celle là en fait).

    Une petite cron lancée ensuite à intervalle régulié pour stocker tout ça en base et le tour est joué.

    Ca revient en fait à la solution de Celira mais en utilisant le Cache en tant que table temporaire ce qui sera beaucoup beaucoup plus performant.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Utilisation du cache, cron... sont pour l'instant en dehors de mes compétences/connaissances...

    N.B. J'ai vu qu'OVH propose une méthode simple pour les tâches automatisées :


    Je vais étudier ça de plus près. Merci.

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Bon, je préviens tout de suite : je n'ai jamais mis en place ce genre de système. C'est une idée, mais pas sûre que ce soit une bonne idée.

    Supposons qu'on veuille conserver des stats à l'heure près.

    On fait deux tables :
    une pour les données courantes (T_STATS_URL_CLICS_CURRENT) avec pour structure :
    - id_lien (identifiant du lien cliqué)
    - url_lien (URL cliquée)
    - clic_time (timestamp du clic)
    et une pour la conservation (T_STATS_URL_CLICS_MAIN) avec pour structure :
    - id_lien (identifiant du lien cliqué)
    - url_lien (URL cliquée)
    - clic_time (timestamp du clic)
    - compteur

    A chaque fois que quelqu'un clique une lien, on fait une ligne lien/timestamp dans la table CURRENT.

    On fait un traitement périodique (genre qui tourne à 3h du mat) qui lit les données de CURRENT datant de la veille, les regroupe par tranche d'une heure, insère les compteurs dans la table principale et supprime les données correspondantes de la table CURRENT.

    De cette façon, on a plus que 24 lignes par lien et par jour dans la table principale (avec le compteur qui correspond à tous les clics de cette plage d'heure), et la table temporaire est purgée régulièrement.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. [MySQL] Compteur de clics
    Par Tee shot dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/06/2007, 16h12
  2. [Tableaux] Réaliser un compteur de clic sur un lien
    Par Klimium dans le forum Langage
    Réponses: 15
    Dernier message: 22/10/2006, 22h29
  3. [MySQL] Compteur de clics simple
    Par jim1 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 28/12/2005, 20h18
  4. Aide : Compteur de clic et clic sortant
    Par nono29370 dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 24/11/2005, 16h47
  5. compteur de clic et liens en dur?
    Par xtaze dans le forum Langage
    Réponses: 6
    Dernier message: 16/10/2005, 13h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo