Voglio creare un'app utilizzando MongoDB (database NoSQL) che consente alle persone di votare sui post (da simillar a Reddit). Qual è il modo consigliato per memorizzare voti per gli utenti?
Probabilmente la struttura del database dovrà rispondere rapidamente a domande come:
Scrivi:
- Voti dell'utente X (su o giù) post A.
Leggi:
- L'utente X ha già votato per il post A?
- Quanti voti (su-giù) il post A ha?
- Ottieni post ordinati per conteggio voti (post principali)
Stavo pensando di salvare tutti i voti nel documento Utente, quindi ogni utente ha un elenco di voti con la struttura { voteID, postID, value }
, dove value
può essere 1
per upvote e -1
per downvote.
Ho letto che questo va bene perché di solito i post possono avere centinaia di migliaia di voti, ma ogni utente di solito ha meno voti di così, quindi i voti sono distribuiti meglio attraverso i documenti.
Stavo anche pensando di mettere in cache il conteggio dei voti per post, quindi ho un po 'come un gancio, ogni volta che un voto viene aggiunto / rimosso il conteggio per quel documento specifico viene anche aggiornato. Un problema che vedo è che se metti / elimina un utente con 10k di voti, dovrai eseguire operazioni di aggiornamento 10k sui post per aggiornare il conteggio dei voti.
Qual è il modo consigliato di memorizzare voti / Mi piace in un database NoSQL?