6
votes

Une page d'accueil tournante de type digg de contenu populaire, comment inclure la date comme facteur?

Je construis une application Web avancée de partage d'images. Vous pouvez vous attendre à ce que vous attendez, les utilisateurs peuvent télécharger des images et d'autres que d'autres peuvent commenter, de voter dessus et de la favoriser. Ces événements détermineront la popularité de l'image, que je capture dans un champ "karma".

Maintenant, je souhaite créer un système de page d'accueil ressemblant à Digg, montrant les images les plus populaires. C'est facile, puisque j'ai déjà le score de karma pondéré. Je trie simplement sur cela descendant pour montrer les 20 images les plus précieuses.

La partie qui manque est temps . Je ne veux pas que les images extrêmement populaires soient toujours sur la page d'accueil. Je suppose qu'une solution facile consiste à restreindre le résultat défini aux 24 dernières heures. Cependant, je pense également que pour que la rotation de l'image se produise tout au long de la journée, le temps peut être une sorte de variable où son décalage a une influence sur le tri de l'image.

Questions spécifiques:

  • Recommanderiez-vous le scénario facile (juste trier pour les meilleures images dans les 24 heures) ou plus sophistiqué (utilisez le compensation DateTime dans le tri du tri)? Si vous indiquez ce dernier, toute aide sur la solution mathématique à cela?
  • Serait-il préférable d'exécuter un service planifié pour marquer des images pour la page d'accueil ou de conseiller une requête directe (j'utilise MySQL)
  • En tant que note supplémentaire, la page d'accueil devrait supporter la pagination et une journée tranquille devrait inclure des entrées de jours avant de pouvoir s'assurer qu'il est toujours "rempli"

    Je ne demande pas à la communauté de construire cet algorithme, à la recherche de conseils :)


1 commentaires

Il y a cette formule Bernoulli pour trier les choses que vous pouvez modifier pour prendre du temps comme paramètre. En ce moment, je ne me souviens pas du nom, peut-être que quelqu'un va. (C'est un long nom long)


4 Réponses :


0
votes

Vous pouvez simplement calculer un champ de type "karma ajusté" qui prendrait le temps en compte: xxx

Vous pouvez alors calculer et trier par cela directement dans votre requête, ou vous pouvez faire C'est un champ réel dans la base de données que vous mettez à jour via un processus nocturne ou quelque chose. Personnellement, j'irais avec un processus nocturne qui la met à jour car cela facilitera probablement plus facilement l'algorithme un peu plus sophistiqué à l'avenir.


0 commentaires

1
votes

Pour votre première question, j'irais avec la méthode légèrement plus compliquée. Vous voudrez des "tous les favoris de tous les temps" dans le mélange. Mais ne partez pas par le temps seul, passez par le nombre de vues réelles l'image a. N'oubliez pas que tout le monde ne va pas se connecter et voter, mais cela ne rend pas l'image moins populaire. Une image âgée de deux ans avec 10 votes et une vue de 100 000 vues est évidemment plus importante pour les personnes qu'une image âgée de 1 an avec 100 votes et une vue 1K.

Pour votre deuxième question, oui, vous voulez une sorte de mise en cache sur votre page d'accueil. C'est beaucoup de questions pour produire le point d'entrée sur votre site. Cependant, beaucoup comme, votre type de site aura tendance à dessiner du trafic vers des pages internes via des moteurs de recherche. Alors essayez de regarder / optimiser vos requêtes partout.

Pour votre troisième question, allez par des facteurs autres que le temps (c'est-à-dire que # de vues) aide à vous assurer que vous avez toujours une page complète et dynamique. Je ne suis pas sûr de la pagination sur la page d'accueil, que des personnes menant aux balises ou à des recherches puissent être une meilleure stratégie.


0 commentaires

0
votes

Ceci, j'ai trouvé cela, le limité inférieur de Wilson score la confiance d'un intervalle de confiance pour un paramètre Bernoulli

Regardez sur ceci: http: // www. dérivante.com/2009/09/01/PHP-Content-ratant-Confidence/

Au deuxième exemple, il explique comment utiliser le temps comme un "facteur de fraîcheur".


0 commentaires

2
votes

J'irais avec une fonction qui diminue le "karma effectif" de chaque article après une quantité de temps donnée. Ceci est un peu comme la méthode d'Eric.

Déterminez la fréquence à laquelle vous souhaitez que le "karma effectif" soit réduit. Multipliez ensuite le karma par un facteur de mise à l'échelle basé sur cette période. P> xxx pré>

pourcentage_decrease code> est déterminé par votre fonctionnement. Par exemple, vous pouvez faire P>

percentage_decrease = min(1, number_of_hours_since_posting / 24)


0 commentaires