Qui è l'algoritmo hot di Reddit:
cpdef double _hot(long ups, long downs, double date):
"""The hot formula. Should match the equivalent function in postgres."""
s = score(ups, downs)
order = log10(max(abs(s), 1))
if s > 0:
sign = 1
elif s < 0:
sign = -1
else:
sign = 0
seconds = date - 1134028003
return round(order + sign * seconds / 45000, 7)
Il mio cervello dice che il calore di un post dovrebbe essere calcolato su ogni richiesta perché i vecchi post dovrebbero avere un punteggio basso di hotness.
Ho implementato questa funzione in MySql ma, come puoi immaginare, è lenta. Ci sono anche indici molto lenti.
E poi penso di aggiornare il campo hotness del post su ogni upvote o downvote del post. Supponiamo di avere un post appena pubblicato ora e ha 100 upvote e 1 downvote ed è hotness 78 (esempio). Ma non ottiene voti per 3 giorni. Dopo 3 giorni appare un nuovo post e ottiene 100 upvotes e 1 downvote e ha 78 punti. Se sto aggiornando il punteggio di hotness sui voti, il post di 3 giorni e il nuovo post verranno visualizzati insieme. Ma in teoria, il post di 3 giorni non dovrebbe nemmeno comparire in prima pagina.
Qual è il metodo più attuabile da implementare per questa situazione?