Questo è più che altro un punto nella giusta direzione del tipo di domanda, ho 2 soluzioni ma entrambe non sono valide perché i dati calcolati non sono validi in alcuni scenari.
Sto lavorando su un sistema in cui un veicolo invia letture di posizione a un server TCP.
Tutti questi dati vengono archiviati in una tabella Log di posizione con i seguenti dati:
Latitude, Longitude, Speed, DateTime, Event, Address (and other relevant data)
Un evento può essere periodico, accensione attivata, ignizione disattivata, velocità eccessiva, frenatura brusca, accelerazione aspra, tornitura dura ecc.
Ora tutti i miei rapporti sono generati in base all'intero viaggio. Un viaggio sarebbe costituito da tutti i registri della posizione tra Ignition On
e Ignition Off
.
Quindi un semplice rapporto sarebbe
Vehicle ID
Journey Start Date Time
Journey End Date Time
Start Address
End Address
Distance Travelled (KM)
Journey Duration
No. Overspeedings
No. Harsh Turnings
Average Speed
Max Speed
Ora ogni volta che creo un rapporto, passa alla tabella LocationLog
e calcola tutti i viaggi durante un intervallo di date.
Che è un processo costoso quando ci sono 300 veicoli che fanno 50 viaggi al giorno nell'arco di 3 mesi, quando c'è un registro di posizione ONE al minuto.
La mia domanda è questa,
Qual è il modo migliore per calcolare e cache questi viaggi su una tabella separata? Perché una volta completato il viaggio, le proprietà non cambieranno.
Ho implementato entrambe le soluzioni seguenti - Ma entrambe non funzionano.
1 - Ogni volta che c'è un evento di Ignition Off - sparo un evento per calcolare i dettagli del viaggio e la cache nel database.
QUESTO NON FUNZIONA - Perché in alcuni casi gli Eventi Accensione / Spegnimento Accensione sono ricevuti prima di inviare Letture Periodiche. [Le letture periodiche hanno una priorità inferiore rispetto a Eventi]
Questo sta causando calcoli non validi di Distanza, Numero di sovravelocità ecc. perché saranno ricevuti dopo che il dispositivo ha inviato le letture di Accensione.
2 - Ho sviluppato un servizio Windows che esegue un'attività giornaliera - Che calcola i viaggi per l'intera giornata e li memorizza nella cache del database.
QUESTO NON FUNZIONA - Perché in alcuni casi il veicolo viaggia durante la notte, il che non consente di calcolare e memorizzare nella cache il viaggio in particolare.
Le tecnologie di questo progetto sono: C #, .NET, Entity Framework, SQL Server 2016.