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?