Applicazione chat - scrive su file e quindi salva nel database

1

Ho seguito questo approccio descritto qui per implementare una semplice applicazione di chat: link

Sto scrivendo su un file e sto leggendo dal file.

Voglio implementare una funzione che salva la cronologia della chat quando la chat non è attiva (quando nessuno ha scritto qualcosa in un istante).

Per fare ciò, prenderei il file con i messaggi di chat, leggerlo e inserire tutti i messaggi come righe nel database. Una volta completato l'inserimento nel database, rimuoverò il file.

La prossima volta che qualcuno visita la chat, la cronologia viene recuperata dal database.

Quando qualcuno inizia a scrivere nuovi messaggi nella chat, vorrei seguire lo stesso approccio: scrivi su un nuovo file, poi leggi dal file.

Ma mi stavo chiedendo delle prestazioni qui.

Come puoi vedere, una richiesta di ajax viene eseguita ogni 2,5 secondi al backend che legge il file e ne restituisce il contenuto.

La mia domanda è: è un modo valido per andare ed è più efficace leggere dal database invece di un file sul filesystem ogni 2,5 secondi?

    
posta Bryan 17.05.2018 - 12:38
fonte

1 risposta

5

La parte relativa all'efficienza della domanda non può essere risolta con il contesto dato poiché tutto ciò che sappiamo è che un client farà una richiesta ogni 2,5 secondi. Ad un livello elevato non sappiamo quanti client ci saranno contemporaneamente usando l'applicazione, quanto grande può essere il file, che tipo di database viene utilizzato, ecc. Inoltre non sappiamo cosa è importante per te. Solo disco IO? Prestazioni del cliente? Rete? PROCESSORE? Tutti loro, ma alcuni hanno pesato più degli altri? Quindi il file vs il database dovrebbe essere fatto meglio misurando le prestazioni di ciascuno sotto un carico previsto e monitorando quali aspetti sono più importanti per te.

Ma la domanda "è un modo valido per andare", vorrei prima chiedere, se si sta utilizzando un database per memorizzare / leggere i messaggi, quale vantaggio si ottiene avendo un messaggio temporaneo in archivio? Perché non scrivere direttamente nuovi messaggi nel database?

Senza il file, quando un client esegue il polling sul server per i nuovi messaggi, può passare una data / ora dell'ultimo messaggio recuperato o l'ultimo ID messaggio recuperato e il database può recuperare i messaggi postati dopo tale data o id. Non dovrai restituire le informazioni che il cliente ha già. Si consideri che la chat è molto attiva e il file non ha la possibilità di scrivere nel DB e cancellare. Inoltre non dovrai preoccuparti di un nuovo client che si unisce, leggendo i messaggi dal database, attivando il file letto nel database e cancellando il file prima che i client passino 2,5 secondi, e ora al client mancano quegli ultimi messaggi.

In questo momento, se la chat è molto attiva e il file non "ripulisce", si invierà un sacco di dati non necessari ai client. Indipendentemente dal fatto che ciò causerà o meno un impatto sulle prestazioni effettivo, sarà necessario determinarlo, ma per lo meno si tratta di dati non necessari che indicherebbero un problema di progettazione più ampio.

    
risposta data 18.05.2018 - 01:02
fonte

Leggi altre domande sui tag