Algoritmo de popularidade - SQL/Django
-
21-09-2019 - |
Pergunta
Tenho pesquisado algoritmos de popularidade usados em sites como Reddit, Digg e até mesmo Stackoverflow.
Algoritmo 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
Sempre realizei ordenações simples dentro do SQL, estou me perguntando como devo lidar com tal ordenação.
Deveria ser usado para definir uma tabela, ou poderia construir um SQL com a ordenação dentro da fórmula (sem prejudicar o desempenho)?
Também estou me perguntando se é possível usar vários algoritmos de ordenação em diferentes ocasiões, sem incorrer em problemas de desempenho.
Estou usando Django e PostgreSQL.
Ajuda seria muito apreciada!^^
Solução
Você deve armazenar em cache sua classificação de popularidade em uma coluna própria e atualizá-la quando os valores subjacentes mudarem.Você também deve configurar um índice de banco de dados nessa coluna.Se você também armazenar em cache o resultado de suas consultas mais comuns, terá tomado as medidas mais eficazes para o desempenho de suas consultas de popularidade.