Question

Je construis un site Web avec un contenu généré par l'utilisateur. Sur la page d'accueil Je veux montrer une liste de tous les éléments créés, et je veux être en mesure de les trier par un compteur de vue. C'est son facile, mais je veux plusieurs compteurs. Je veux savoir qui était l'élément le plus visité au dernier jour, la semaine dernière ou mois ou globale.

Ma première idée était de créer 4 colonnes DB compteur-Table de l'élément. L'un pour chacun des quotidiens, hebdomadaires, mensuels et dans l'ensemble, et créer une tâche cron, qui efface le compteur journalier toutes les 24 heures, le compteur hebdomadaire tous les 7 jours et ainsi de suite.

Mais mon problème avec ceci est, Qu'advient-il si je veux savoir qui était l'élément le plus vu de la semaine, juste après le compteur hebdomadaire se est effacé?

Ce que j'ai besoin est un moyen efficace de créer un compteur continu, qui a obtenu réduit pour chaque page vue qui est trop vieux, et a augmenté pour chaque nouvelle page vue.

En ce moment, je pense à une solution avec le serveur Redis, mais je ne pas encore de solution.

Je suis à la recherche d'une idée générale, mais FYI je développe cette application en Ruby on Rails.

Était-ce utile?

La solution

Ce que je suggère aux coups de suivi sur chaque page, avec juste un horodatage et tout ID utilisateur ou ce que vous pouvez stocker, vous pouvez calculer les compteurs comme vous le souhaitez et le modifier ultérieurement parce que vous avez les données dans un simple d'utiliser le format. Une table avec une entité (page) ID utilisateur et l'horodatage devrait être bon. Il suffit d'ajouter que chaque fois que la page est demandée.

Pour réduire le nombre d'inserts, vous pouvez les lots ensemble dans votre logiciel. La construction d'une ligne multi insérer comme pour MySQL permettra d'économiser les frais généraux. Vous aurez juste besoin de vos classes pour construire l'insert comme décrit et stocker jusqu'à l'insert. Une idée est non seulement du temps, mais fixer un certain nombre de lignes à lots qui vous permet de dire au plus si le serveur va vous ne perdez que x nombre de lignes de hits.

Il y a un déclencheur MySQL que vous pouvez faire fonctionner seulement après que le lot complet d'inserts se fait que vous pouvez utiliser pour mettre à jour les tables de rapports de sorte que vous ne devez pas frapper en permanence la principale table de suivi de succès.

Aussi, si cela n'a pas besoin d'être un débit très élevé, il pourrait être rompu dans son propre tesson et accessible via Ajax appels pour faire le suivi des succès et obtenir les comptes.

Autres conseils

Qu'est-ce que vous pouvez faire est de stocker ce qui est visité et à quelle date (timestamp) et vous le faire pour chaque fois que quelque chose est visité. Lorsque vous voulez récupérer ce qui a été visitied, vous choisiriez ceux dans une fourchette de dates (horodatage) et les additionner.

ou

Chacun de vos liens auront leur propre ligne respective pour chaque jour, ils sont visités. S'ils sont visités plus d'une fois en un jour, alors il ajoutera +1 à la valeur déjà existante.

Vous pouvez utiliser le deuxième exemple et faire le stockage hebdomadaire au lieu de tous les jours si vos semaines sont quelque chose comme dimanche-samedi et non 7 jours avant aujourd'hui. Ainsi, le jour remplacer les mots avec la semaine de mots ayant ainsi plus petites quantités de stockage de données.

Je vois que vous voulez éviter d'énormes magasins de données, mais dans la mesure où vous voulez que cela je travaille ne vois pas beaucoup mieux que this.You pourrait utiliser le second exemple et faire le stockage hebdomadaire au lieu de tous les jours si vos semaines sont quelque chose comme dimanche-samedi et non 7 jours avant aujourd'hui.

Voici une possibilité pour le serveur regis après avoir examiné la documentation.

SET link_id|date => "visit_count"

stocke les link_id ou tout ce que vous appelez avec le date par | ou seperated ce que jamais le caractère que vous souhaitez utiliser. Dans cette valeur-clé que stocker le visit_count.

Dites que vous voulez ajouter un coup à ce lien à cette date. Vous GET link_id|date puis ajouter +1 à la visit_count retourne puis stocker en arrière comme je ci-dessus.

Si vous voulez obtenir le montant des résultats pour une date spécifique, vous pouvez le GET link_id|date à nouveau.

Vous utilisez simplement ruby-on-rails pour remplacer link_id, date et visit_count avec les valeurs appropriées.

L'espoir que cela vous aide.

Ce que vous pouvez faire est de créer une table appelée ViewCounters.

Il y aurait une colonne « pageId », une colonne « jour » et une colonne « vues ». Le pageId correspondrait à la page en cours de visualisation, et le « jour » correspondrait au jour où elle a été visionnée.

A chaque fois qu'une page est affichée, elle trouve (ou crée s'il n'y a pas encore un) de la ligne dans la table ViewCounters avec son pageId, et le jour en cours. Il serait alors incrémenter la colonne « vues » pour cette ligne.

Cela vous donne un maximum de flexibilité en ce qui concerne la création de nouveaux compteurs et l'accès à l'histoire. De plus, nombre de visionnages pour mensuels, hebdomadaires et quotidiens compteurs sont très pas cher pour générer.

Un autre grand avantage à ce serait qu'il est rangée seulement par page par jour, ce qui est vraiment mauvais.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top