Come implementare un up / downvote per un elemento per utente connesso, tenendo a mente i bassi costi delle prestazioni?

5

Lo stesso sistema utilizzato da questo sito, ad esempio. Puoi votare verso il basso o verso l'alto, ma i tuoi voti sono persistenti tra gli accessi in modo da non poter trasmettere un voto doppio, ma solo il tuo voto contrario.

Come si dovrebbe implementare questo?

L'unica cosa che ho pensato è avere un campo in più nella riga del database, che memorizzerebbe gli ID degli utenti che hanno votato separati dal deliminatore comune. Quindi, quando gli utenti votano, viene aggiunto alla fine della lista. Qualcosa come ha votato {1, 45, 5} e poi itera su quell'array quando arriva un nuovo voto e lo abbina, se è già nell'array, non contare il voto. In caso contrario, aggiungi il voto e aggiungi l'ID utente al campo. Ma quella spirale sfugge al controllo rapidamente in termini di iterazioni su ogni successivo voto.

Altra cosa è memorizzarlo in un cookie, ma questo potrebbe essere aggirato dagli utenti esperti di tecnologia. Oppure memorizzalo in un file e cerca il file, ma ancora, puoi scorrere il file come se lo avessi conservato nel database.

C'è un altro, più elegante, modo di fare ciò che voglio? Ho provato google per alcune soluzioni, ma sono venuto a mani vuote.

    
posta The Law 14.12.2016 - 18:45
fonte

1 risposta

8

Hai bisogno di una tabella dei voti nel database

UserID
PostID
Vote

e un meccanismo "Upsert". In questo modo, se il voto non esiste già, puoi aggiungerlo e, in caso affermativo, puoi modificarlo.

    
risposta data 14.12.2016 - 18:52
fonte

Leggi altre domande sui tag