L'applicazione su cui lavoro gestisce centinaia di migliaia di record ciascuno in uno stato diverso nel loro ciclo di vita. Un grande requisito è avere un conteggio quasi accurato di questi oggetti in ogni stato in modo che possano essere assegnati in lotti. OSSIA L'utente X deve sapere che ci sono almeno 25 oggetti nello stato Y in modo che possano assegnare un batch di 25.
Al momento esiste un insieme incredibilmente inefficiente di query eseguite per ogni stato per contare gli oggetti ogni volta che l'utente raggiunge questa pagina Web e restituisce i risultati. Queste query vengono eseguite milioni di volte al giorno.
Un'alternativa che abbiamo creato è quella di eseguire le query ogni 1-5 minuti e memorizzare i risultati in una istanza di Redis, in cui ogni volta che un utente richiede il conteggio, lo legge da lì.
Questo ha ancora una quantità decente di spese generali poiché il numero di stati diversi e le permutazioni dei sottostati sono piuttosto alti. Quindi una volta ogni N minuti dovremo comunque colpire abbastanza duramente il DB.
TLDR; Sento che c'è un modo per mantenere un conteggio accurato di quali oggetti sono in quale stato del loro ciclo di vita senza dover contare costantemente dal DB. Un pensiero che pensavo di avere era essenzialmente di avere un trigger, o un evento push / pop da una coda ogni volta che un oggetto entrava / usciva da uno stato, permettendoti di ottenere il conteggio istantaneamente ottenendo la dimensione della coda, ma questo sembra più dispendioso di risorse di contando solo una volta ogni 3 minuti.