Implementazione della progettazione per un progetto

-2

Ho una domanda riguardo all'implementazione di un programma che sto cercando di fare. Ho un database MySQL con numerosi utenti e ognuno ha un compito eseguito in un determinato momento.

Per ogni utente hanno un tempo per l'esecuzione dell'attività e un fuso orario per l'attività da eseguire (ciascuna colonna separata nel db MySQL). Finora, quando ho provato cose, eseguo il programma ogni 5 minuti VIA cron, scorre in tutti gli utenti e controlla se (timeToBeSent) - (currentTime) < 5 , se è l'attività viene eseguita. So che questo non è accurato al 100%, ma era il modo più semplice e più semplice per iniziare alcuni test.

Ora che ho finito l'idea generale del mio programma, quali sono alcune opzioni per farlo funzionare?

  • Potrei continuare a scorrere tutti gli utenti ogni 5 minuti, ma quello sta per essere intensivo di risorse e non accurato al minuto.
  • Un'altra idea in cui converto tutte le volte che l'attività viene eseguita in un fuso orario comune, quindi ordina il database in base all'ora. Una volta fatto questo, eseguilo ogni minuto e seleziona le righe si riferiscono direttamente al minuto corrente
  • EDIT: Un'altra idea dai commenti sarebbe quella di ordinare il db in base a tutte le volte convertite in UTC. Inizia con il primo utente al più presto ed esegui l'attività. Quindi troverei la differenza di fuso orario tra quell'utente e il successivo e avrò il thread in sospeso fino a quando non verrà visualizzata l'ora successiva.

Sono piuttosto nuovo all'ingegneria del software, e non ho preso lezioni di scuola sull'implementazione del design nella mia scuola, quindi se c'è un modo per farlo mi piacerebbe se i link ad articoli / fonti potessero essere pubblicati così che io può imparare.

Grazie mille!

EDIT: Language is Java

    
posta 97WaterPolo 07.05.2017 - 10:01
fonte

1 risposta

1

Non si specifica una lingua, ma la maggior parte fornisce una classe timer che consente di eseguire codice dopo un ritardo.

Controlla la prossima ora all'avvio e poi attendi.

Ovviamente dovrai gestire i casi limite, il nuovo compito arriverà prima di quello che stai aspettando, il programma termina in attesa ecc.

Per quanto riguarda i fusi orari, devi memorizzare tutti i tempi della data come UTC

    
risposta data 07.05.2017 - 10:43
fonte

Leggi altre domande sui tag