Invio di una notifica a ciascun partecipante 3 ore prima dell'inizio della riunione

1

Supponiamo che un'applicazione si occupi di riunioni a cui parteciperanno alcuni utenti.

Quale è un modo efficace per raggiungere questo caso d'uso:
3 ore prima che la riunione inizi, è necessario inviare un promemoria a ciascun partecipante.

È abbastanza facile attivare una notifica basata su un evento, diciamo una creazione o una cancellazione di qualsiasi riunione. Tuttavia, attendere "3 ore prima" non è un evento ... perché ogni riunione ha una data di inizio.

Un modo semplice (e sicuramente non performante) sarebbe di avere un processo in background, che interroga la memorizzazione (database per esempio) per trovare eventi che corrispondano alla regola "entro 3 ore prima" e non contrassegnati con una specie di processed .
Che dire di un'alta frequenza di incontri creati ... questo tipo di processo sarebbe probabilmente inefficiente (senza evocare l'enorme impatto sul database) per garantire l'esatta precisione di 3 ore (anche con un margine di 5 minuti).

Qualche idea?

    
posta Mik378 10.12.2014 - 00:06
fonte

2 risposte

6

Non sono sicuro di vedere quale "enorme impatto sul database" avrebbe un processo che ha interrogato il database ogni 5 minuti.

Presumibilmente, hai una sorta di tabella che memorizza le tue riunioni e i loro orari di inizio. Dovrebbe essere relativamente facile indicizzare la colonna che memorizza l'ora di inizio e scrivere una query che cerca che tutte le riunioni impostate inizino tra 3 ore e 3 ore e 5 minuti da cui si restituirebbe un numero relativamente piccolo di record relativamente rapidamente. Aggiunta di una colonna a questa tabella per indicare se il promemoria è stato inviato o, ancora meglio, creare una tabella che associava le riunioni alle singole persone e monitorato se le persone erano state avvisate (le persone potrebbero essere aggiunte a una riunione dopo la finestra di 3 ore) complicherebbe la logica un po 'ma gli stessi principi si applicherebbero: dovresti essere in grado di indicizzare i dati in un modo che ti permetta di ottenere il sottoinsieme di dati di cui hai bisogno in tempi relativamente brevi.

Se sei davvero attento alle prestazioni, il tuo DBA (o sviluppatore back-end) probabilmente ha un sacco di opzioni per mettere a punto questo tipo di query. Questi probabilmente dipenderanno dalla tecnologia specifica scelta (viste indicizzate in SQL Server, viste materializzate in Oracle, ecc.).

    
risposta data 10.12.2014 - 01:31
fonte
2

Il modo più efficiente sarebbe per l'applicazione client che è responsabile per l'invio del messaggio di posta elettronica per interrogare il DB all'avvio e ricordare la prossima riunione. Dormirebbe fino a 3 ore prima, quindi svegliarlo e inviare l'email.

Tuttavia, l'applicazione dovrebbe anche essere informata delle modifiche alla pianificazione della riunione - le riunioni che sono state aggiunte o cancellate e aggiorna di conseguenza l'ora successiva. In genere, leggere l'ora della riunione successiva ad ogni aggiornamento. Il modo in cui notifichi l'applicazione delle modifiche dipende da te: vorrei riutilizzare l'applicazione come punto di ingresso ai dati delle riunioni, quindi tutte le modifiche alle riunioni, le aggiunte o le eliminazioni vengono inviate all'applicazione per l'elaborazione che quindi memorizza gli aggiornamenti nel DB ( dopo tutto, qualcosa deve fare questo lavoro, potrebbe anche essere questa app).

    
risposta data 10.12.2014 - 10:56
fonte