Il modo più efficace per mantenere il conteggio degli oggetti nello stato X senza contare costantemente

1

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.

    
posta Adam James 14.04.2016 - 03:19
fonte

1 risposta

1

Non sembra che tu abbia bisogno di un "conteggio quasi accurato" - dici che devi sapere che ci sono almeno 25 oggetti in uno stato.

Per raggiungere questo obiettivo, è possibile ad esempio avere un metodo che conta gli oggetti in quello stato e, eventualmente, interrompere il conteggio una volta che raggiunge 1.000, e diminuire il contatore ogni volta che si sposta un oggetto lontano dallo stato. Quindi hai una proprietà "conteggio disponibile garantito". Se il "conteggio disponibile garantito" scende al di sotto di 25, conti di nuovo gli oggetti in quello stato.

    
risposta data 14.04.2016 - 10:07
fonte

Leggi altre domande sui tag