Implementazione del modello di conteggio nel database

2

Ho avuto un po 'di problemi con l'implementazione di un sistema count nel mio progetto.

Ho un sistema in cui gli utenti possono gradire un post . Dovrei tenere un conto di esso nella stessa tabella come

o dovrei rimuovere la colonna like_count dalla tabella dei post.

La mia preoccupazione se ho la colonna like_count nella tabella dei post è - aggiornamento frequente del valore.

Se scelgo per non aggiungere una colonna like_count nella tabella dei post, dovrei usare count() frequentemente per visualizzare i dettagli. Devo progettare un modello di dati per migliaia di utenti. Quindi quale modello è il modo giusto per implementare?

P.S: si prega di ignorare i tipi di dati delle colonne. Ho appena fatto una versione veloce per postarlo qui.

    
posta Magesh Kumaar 15.12.2016 - 11:12
fonte

2 risposte

4

Primo:

  • Nello schema post_id è il PK di PostLikes che obbliga qualsiasi post ad avere solo un like. PK dovrebbe essere (post_id,user_id)
  • I nomi delle tabelle devono essere singolari, quindi PostLikes deve essere denominato POST_LIKE .

Detto questo, la mia raccomandazione è:

Una funzione di conteggio simile non è critica (come, ad esempio, il saldo di un conto bancario), il che significa che non è fondamentale avere il conteggio esatto di un post in un dato secondo, quindi in quello caso ti suggerisco di mantenere la tabella LIKE e la colonna like_count in POST e aggiornarla ogni N minuti. Non è nemmeno necessario aggiornare il conteggio di ogni post ogni N minuti. Ogni esecuzione del processo batch può aggiornare il conteggio di un gruppo di post o di quelli più recenti.

Si noti che con questa colonna si sta consapevolmente de-normalizzando per motivi di prestazioni, il che è OK se ben sostenuto.

    
risposta data 15.12.2016 - 13:01
fonte
1

Non ottimizzare prima del tempo.

Essenzialmente stai scambiando un "Conteggio" per più frequenti scritture sulla tua tabella "Post" e dovendo mantenere le cose in sincronia. Vorrei rimuovere la colonna "like_count" per ora e scrivere test di sistema per profilare le prestazioni delle tue applicazioni.

Se diventa un problema di prestazioni, puoi ottimizzare a quel punto.

EDIT: non si rendeva conto che si trattava già di un problema di prestazioni.

Da un punto di vista delle prestazioni non ci sono solo informazioni sufficienti per dire quale miglior rendimento generale.

EDIT2: cambiato idea

Dal punto di vista del design ha più senso tenerlo sulla tabella "post" se non si è in grado di ottimizzarlo.

    
risposta data 15.12.2016 - 11:33
fonte

Leggi altre domande sui tag