Come attivare un evento quando un'azione prevista non è avvenuta

3

Sto provando a progettare un sistema che può innescare determinati eventi se un'azione non ha avuto luogo. Ad esempio, supponiamo che una persona debba compilare 3 moduli ogni ora e, se non lo ha, deve essere attivato un trigger.

La condizione sarà diversa per utenti diversi, ogni ora, ogni giorno, ogni settimana.

Un modo è quello di continuare a controllare il database ogni minuto per verificare se l'azione ha avuto luogo. Ma quando ho 1000 di utenti, è anche fattibile, anche nel momento in cui controllo ogni utente sarebbe passato un sacco di tempo con il risultato di molti fallimenti.

Qualche suggerimento di design?

    
posta Sharjeel Ahmed 31.07.2016 - 18:12
fonte

2 risposte

0

Dopo molte indagini ho capito come risolverlo per il linguaggio che sto usando (NodeJS).

Uso un modulo NPM chiamato agenda. link Con l'agenda, ho impostato vari timer, ad es. Alle 10:00, alle 21:00, ecc., Quindi se una persona deve presentare 3 moduli tra le 9 e le 10, c'è un timer per l'agenda fissato alle 10:00 am che controlla se sono stati inviati 3 moduli. Agenda memorizza tutti i timer nel database e quindi non devo preoccuparmi di riavvii del sistema, i dati sono persistenti.

Con questo non devo fare un pooling ogni minuto, e questo ha risolto il mio problema.

    
risposta data 23.03.2017 - 07:55
fonte
0

Ho seguito problemi simili in diversi modi:

1) Controllare periodicamente per vedere quando si è verificata l'ultima azione. Se non è successo abbastanza di recente, hai un problema. Potresti aver bisogno di una tabella specifica per tracciare quando un utente ha compilato un modulo - se non ci sono tre voci per un determinato utente nell'ultima ora, puoi attivare il trigger. Con gli indici giusti, questo dovrebbe essere qualcosa che puoi controllare frequentemente, ma fai attenzione ai tempi limite - quando una persona inizia per la giornata, non raggiungeranno immediatamente tre in un'ora, ad esempio - e tu bisogno di un modo per trovare casi in cui una persona ha mai compilato un modulo.

2) In un sistema basato su attori, il monitoraggio per vedere se un pezzo di hardware è caduto dalla rete wireless, ho avuto l'attore resettare un timer di inattività ogni volta che un messaggio proveniva da quel pezzo di hardware. Quando è scattato quel timer, ho ricontrollato il tempo dell'ultima attività per eliminare i falsi positivi, e se era scaduto il tempo configurato, questo ha attivato un rapporto sul dispositivo non in linea.

    
risposta data 22.03.2017 - 21:02
fonte

Leggi altre domande sui tag