Design per 'Inbox' con funzione 'non letto'

-2

Sto implementando una funzione simile come la Posta in arrivo di StackExchange e ho molte considerazioni sull'utilizzo delle risorse.

Il mio sistema ha messaggi di posta in arrivo, notifiche sullo stato del sistema e risultati. Su ogni richiesta di pagina sto interrogando il DB se ci sono delle notifiche da tutte queste tre risorse (2 tabelle e una query complessa).

Per risparmiare alcune risorse sto usando Redis Cache per memorizzare nella cache la risposta alle notifiche IEnumerable<NotificationModel> per 10 minuti. In questo modo non devo interrogare troppo spesso il DB, ma potrei dover aspettare 10 minuti per ottenere l'ultima notifica.

Mentre funziona e suppongo che non danneggi il mio Server, ritengo che debba essere una soluzione migliore perché:

  • Redis non funziona bene con oggetti di grandi dimensioni e il mio elenco di notifiche contiene tutte le informazioni che potrebbero essere abbastanza grandi.
  • StackExchange fa meglio con le notifiche istantanee (magari usando SignalR)
  • Interrogare tre tabelle, anche ogni 10 minuti, è uno spreco di risorse.
  • Non ho lo stato visualizzato che nasconde la notifica della bolla, quella che mostra sui nuovi messaggi che non sono stati letti.

Suppongo che dovrei creare una nuova tabella che memorizzerà tutte le notifiche e dovrei interrogare solo quella.

Magari aggiungi una colonna che mi faccia sapere se alcuni dei messaggi sono nuovi e il resto è già stato letto.

Memorizza nella cache di Redis solo il numero delle nuove notifiche e non i messaggi effettivi, usa Ajax per mostrare la notifica solo quando l'utente lo richiede (fai clic sull'icona di notifica).

Cosa ne pensi di questo? Hai implementato qualcosa di simile?

    
posta Menelaos Vergis 27.07.2018 - 10:29
fonte

1 risposta

3

È un argomento importante, ma qui ci sono alcuni consigli generali

  • Redis Cache non dovrebbe far parte della progettazione della soluzione. È qualcosa che hai messo per affrontare il carico, non per ottenere una soluzione. Fai in modo che la soluzione funzioni prima, quindi aggiungi la cache come richiesto.

  • Se vuoi evitare il polling devi tornare all'evento iniziale. In questo caso quando l'utente fa qualcosa che apparirà nella posta in arrivo di qualcun altro; questo è l'evento che innesca tutto il resto. Usa quell'evento come punto di partenza.

  • Non preoccuparti di eseguire query sui database finché la query è semplice. I database sono veloci

  • Non paghi la bolletta elettrica del browser. Tutto ciò che puoi fare sul client, fare sul client.

risposta data 27.07.2018 - 10:58
fonte

Leggi altre domande sui tag