Alla ricerca di consigli su come implementare i Mi piace

0

Sto usando Django e Django-Rest-Framework per creare una semplice app di condivisione di foto / sito web e ora sto lavorando per implementare un sistema "Mi piace". Un paio di opzioni a cui ho pensato (sicuramente ce ne sono altre):

  1. Nel mio modello Photo , aggiungi un campo Many-to-Many like contenente users che piace alla foto. La mia preoccupazione per questo, anche se apparentemente il modo più diretto, è che potrebbe non scalare molto bene.
  2. Crea un modello PhotoLike separato. Questo sembra il modo giusto per essere in grado di ridimensionare, ma non sono sicuro di come implementarlo. Forse i join sarebbero costosi?

Ci sono altri modi? Mi sono guardato attorno, ma non ho trovato molti post utili su questo (in particolare in Django, anche se a questo punto potrebbero essere utili anche altri framework web).

    
posta Evan Zamir 04.09.2017 - 00:58
fonte

1 risposta

2

Entrambe le tue soluzioni sono praticamente le stesse, dato che con i database SQL non puoi avere direttamente una relazione molti-a-molti, devi avere una tabella per unirli a loro. per esempio. con un photo_id , user_id e forse il tempo, che è praticamente quello che il tuo PhotoLike record sarebbe comunque.

Per visualizzare il conteggio simile, utilizza solo una query di stile SELECT COUNT , invece di recuperare tutti i record PhotoLike (o User ). E per garantire che ogni utente possa apprezzare una sola foto una sola volta, puoi aggiungere un vincolo univoco per entrambe le colonne photo_id e user_id (il che significa che la combinazione deve essere univoca).

Assicurati di avere indici e lascerei perdere finché non saprai che si tratta di un problema con i dati effettivamente disponibili.

Puoi ottimizzarlo aggiungendo un like_count a Photo , e poi per visualizzare le foto non hai bisogno di una seconda query (o nested / join / etc.), ma poi devi aggiungere anche logica extra quando aggiungi o rimuovi i Mi piace per assicurarti che rimanga sincronizzato.

    
risposta data 04.09.2017 - 11:58
fonte

Leggi altre domande sui tag