Forum Clubic

Meilleure structure pour un top jour/semaine/mois

Salut à tous,

J’ai pour intention de pouvoir organiser des données par top ou clics jour/semaine/mois/annee/ depuis toujours…
Donc j’ai fait quelques tables :

top_t (id, id_art, hits) # Top jour
top_w (id, id_art, hits) # Top semaine
top_m (id, id_art, hits) # Top mois
top_y (id, id_art, hits) # Top annee

Donc, pour chaque clic vers une vidéo, je remplis chacune de ces tables ou un update si la donnée id_art existe déjà.
Le top jour sera vidé chaque jour à minuit.
Le top semaine chaque Lundi.
Le top mois chaque début de mois.
Le top année, chaque début d’année.

Bref, en gros on ne pourra qu’avoir que le top du jour / semaine / mois / annee courant.

Et je pensais à une autre structure, avec une seule table, comme celle-ci :

tops (id, id_art, hits, date)

De cette façon, je pourrai avoir les clics de la période que je voudrais, mais la table risque de se remplir assez rapidement.

La deuxieme méthode me convient mieux, mais en termes de rapidité je ne sais pas si cela fera l’affaire :frowning:
Car, disons allez… 2000 à 2500 lignes par jour… ça risque de faire beaucoup, non ?
Le format de la date, lequel choisir… ? DATETIME (ce que j’utilise en grande partie) ou TIMESTAMP (plus rapide ?)

Si vous avez quelques conseils d’optimisations, je suis à l’écoute.

Merci.
Edité le 22/03/2008 à 17:35

Dans ta seconde approche, tu peux imaginer grouper les clics par jour. Donc au lieu d’avoir “nombre de clics, id, date/heure” (si j’ai bien compris), tu aurais “nombre de clics, id, jour”. Et quand un utilisateur clic, tu regarde si une entrée existe pour le jour (auquel cas tu fais un update), sinon tu l’insères.

A ce moment là, tu te retrouves sur un an avec “365 * le nombre de vidéo” lignes. Ca reste beaucoup mais au moins la taille est maitrisée (le problème d’une ligne par clic étant que tu ne peux absolument pas prévoir la quantité de données qui vont être stockées).
Edité le 22/03/2008 à 17:39

Ouaip, donc disons que d’ici jusqu’à la fin de l’année, ça ferait à peu près : 365*3000 : 1 095 000
Enorme effectivement, je me demande combien de temps prendrais une requête pour récupérer un top10 d’un jour donné :confused:

Un compromis entre légèreté de la table et vitesse d’exécution… ?
Edité le 22/03/2008 à 18:35