2010-03-22 8 views
6

J'ai cherché dans les algorithmes de popularité utilisés sur des sites tels que Reddit, Digg et même Stackoverflow.Popularité algorithme - SQL/Django

algorithme de Reddit:

t = (time of entry post) - (Dec 8, 2005) 
x = upvotes - downvotes 

y = {1 if x > 0, 0 if x = 0, -1 if x < 0) 
z = {1 if x < 0, otherwise x} 

log(z) + (y * t)/45000 

J'ai toujours effectué la commande simple, dans SQL, je me demande comment je devrais faire face à cette commande.

Devrait-il être utilisé pour définir une table, ou pourrais-je construire un SQL avec l'ordre dans la formule (sans entraver les performances)?

Je me demande aussi, s'il est possible d'utiliser plusieurs algorithmes de commande dans différentes occasions, sans encourir de problèmes de performance. J'utilise Django et PostgreSQL.

L'aide serait grandement appréciée! ^^

Répondre

3

Vous devez mettre en cache votre cote de popularité dans une propre colonne et la mettre à jour lorsque les valeurs sous-jacentes changent. Vous devez également configurer un index de base de données sur cette colonne. Si vous mettez également en cache le résultat de vos requêtes les plus courantes, vous avez pris les mesures les plus efficaces pour l'exécution de vos requêtes de popularité.

+0

@stefanw J'ai dû lire votre réponse une seconde fois. Merci stefan, je suppose que c'est le chemin à parcourir. Commander ou paramétrer via SQL ne serait pas trop compliqué. :) – RadiantHex