2010-04-26 1 views
6

Sto costruendo un'applicazione di condivisione di immagini avanzata. Come ci si potrebbe aspettare, gli utenti possono caricare immagini e altri possono commentare, votare su di esso e favorirlo. Questi eventi determineranno la popolarità dell'immagine, che catturo in un campo "karma".Una home page rotante simile a Digg di contenuti popolari, come includere la data come fattore?

Ora voglio creare un sistema di homepage di tipo Digg, mostrando le immagini più popolari. È facile, dal momento che ho già il punteggio Karma ponderato. Ho semplicemente deciso su quello in modo discendente per mostrare le 20 immagini più apprezzate.

La parte mancante è tempo. Non voglio che le immagini estremamente popolari siano sempre sulla home page. Immagino che una soluzione facile sia limitare il set di risultati alle ultime 24 ore. Tuttavia, sto anche pensando che, al fine di mantenere la rotazione dell'immagine durante il giorno, il tempo può essere una sorta di variabile in cui il suo offset ha un'influenza sull'ordinamento dell'immagine.

Domande specifiche:

  • Raccomanderesti lo scenario facile (appena sorta di migliori immagini entro 24 ore) o il più sofisticato (uso datetime compensati nell'ambito di smistamento)? Se consigli a quest'ultimo, qualche aiuto sulla soluzione matematica a questo?
  • È consigliabile eseguire un servizio programmato per contrassegnare le immagini per la home page o si consiglia una query diretta (sto usando MySQL)
  • Come nota aggiuntiva, la home page dovrebbe supportare il paging e in modo silenzioso giorno dovrebbe includere voci di giorni prima, al fine di assicurarsi che sia sempre "riempito"

non sto chiedendo la comunità per costruire questo algoritmo, solo in cerca di qualche consiglio :)

+0

C'è questa formula di Bernoulli per ordinare le cose che è possibile modificare per prendere tempo come parametro. In questo momento non ricordo il nome, forse qualcuno lo farà. (È un nome lungo e lungo) – Ben

risposta

2

Vorrei andare con una funzione che diminuisce il "karma effettivo" di ciascun elemento dopo un determinato intervallo di tempo. Questo è un po 'come il metodo di Eric.

Determinare la frequenza con cui si desidera ridurre il "karma effettivo". Quindi moltiplica il karma per un fattore di scala basato su questo periodo.

effective karma = karma * (1 - percentage_decrease) 

dove percentage_decrease è determinata da yourFunction. Per esempio, si potrebbe fare

percentage_decrease = min(1, number_of_hours_since_posting/24) 

per fare in modo che il karma efficace di ogni elemento si riduce a 0 oltre 24 ore. Quindi usa il karma effettivo per determinare quali immagini mostrare. Questa è una soluzione leggermente più stabile rispetto alla semplice sottrazione del tempo dal momento della pubblicazione, poiché ridimensiona il karma tra 0 e il suo valore attuale. Il minimo è di mantenere il ridimensionamento a un limite inferiore di 0, come passa una volta al giorno, inizierai a ottenere valori superiori a 1.

Tuttavia, questo non tiene in considerazione la popolarità in senso stretto. La risposta di Tim dà alcune idee su come prendere in considerazione la rigida popolarità (cioè le visualizzazioni di pagina).

0

si può solo calcola un campo di tipo "karma corretto" che prenda in considerazione il tempo:

adjusted karma = karma - number of hours/days since posted 

È quindi possibile calcolare e ordinare in base a quello direttamente nella query, oppure è possibile renderlo un campo effettivo nel database che si aggiorna tramite un processo notturno o qualcosa del genere. Personalmente andrei con un processo notturno che lo aggiorna dato che probabilmente renderà più facile rendere l'algoritmo un po 'più sofisticato in futuro.

1

Per la tua prima domanda, sceglierei il metodo leggermente più complicato. Nel mix vorrai alcuni "preferiti di tutti i tempi". Ma non andare da solo tempo, passare il numero di effettive visualizzazioni l'immagine ha. Tieni presente che non tutti accedono e votano, ma ciò non rende l'immagine meno popolare. Un'immagine che ha due anni con 10 voti e 100k visualizzazioni è ovviamente più importante per le persone di un'immagine che ha 1 anno con 100 voti e 1k visualizzazioni.

Per la seconda domanda, sì, si desidera una sorta di memorizzazione nella cache nella prima pagina. Quante sono molte query per produrre il punto di ingresso nel tuo sito. Tuttavia, proprio come SO, il tuo tipo di sito tenderà a attirare traffico verso le pagine interne attraverso i motori di ricerca .. quindi cerca e guarda/ottimizza le tue query ovunque.

Per la terza domanda, il passaggio da fattori diversi dal tempo (ad esempio # di viste) consente di avere sempre una pagina completa e dinamica. Non sono sicuro di impaginare in prima pagina, portare le persone a tag o ricerche potrebbe essere una strategia migliore.