Calcolo del tempo in cui un oggetto rimane in uno stato

-1

Io uso Python sqlalchemy per memorizzare il mio modello in un database MySql. Uno dei miei oggetti ha un campo 'stato' (per semplicità supponiamo che ci siano due stati: DISPONIBILE e NON DISPONIBILE).

Ci sono diversi micro servizi che possono modificare gli stati degli oggetti - come il servizio API, le attività periodiche, le attività in background, ecc. Gli stati sono aggiornati con le query UPDATE, il che significa che attualmente non ho modo di ottenere stati storici per ogni oggetto. Gli stati possono essere aggiornati con la frequenza di più volte al secondo o, meno frequentemente, una volta all'anno.

Il mio obiettivo è tracciare il tempo trascorso da un oggetto in ogni stato. Ad esempio:

  • Nelle ultime 24 ore, l'istanza A ha trascorso 6,5 ore nello stato DISPONIBILE e 17,5 ore nello stato NON DISPONIBILE
  • Negli ultimi 6 mesi, l'istanza B ha trascorso un totale di 95,9 giorni nello stato DISPONIBILE e 84,1 giorni nello stato NON DISPONIBILE

Come progetteresti un'architettura per questo? Creo una tabella separata in MySql per archiviare gli stati storici? O forse un database NoSql è meglio per questa attività? Quali tabelle / struttura di oggetti useresti qui? Preferisco affidarmi a soluzioni open-source o addirittura commerciali piuttosto che svilupparmi.

TIA

    
posta Green Mind 07.10.2018 - 20:46
fonte

1 risposta

0

Sembra che tu stia lavorando con i dati di TimeSeries. Sapendo che potrebbe essere utile per la tua ricerca. Esistono soluzioni e schemi di risoluzione dei problemi specifici per quel tipo di dati.

Potrebbe essere adatto per un database SQL di dati TimeSeries. In genere ogni riga ha un timestamp associato. E ogni colonna memorizza un valore associato al timestamp.

Se prevedi un sacco di record, ti consiglio vivamente TimeScaleDB. Funziona su PostgreSQL. Utilizziamo TimeScaleDB per memorizzare i dati che generano oltre 300 nuovi record inseriti ogni 5 minuti. Ha funzionato per noi senza intoppi per oltre 2 mesi e avremo intenzione di passare a inserti di 2 minuti o 1 minuto, con conseguente oltre 300 nuovi record al minuto 24 ore al giorno. Non prevediamo problemi.

Se si crea un database TimeSeries, si avrà molta flessibilità poiché è possibile avere sistemi indipendenti che segnalano i tempi di aggiornamento senza alcun meccanismo centrale diverso dal database. Quindi puoi utilizzare un'applicazione di elaborazione separata in grado di elaborare il database, tuttavia spesso desideri ottenere i risultati del rapporto che stai cercando.

Modifica: ho pensato che questo potrebbe essere sufficiente per farti andare nella giusta direzione, ma se hai bisogno di più specifiche sulle strutture della tabella o sull'interazione del database, basta commentare e ti aiuterò.

    
risposta data 08.10.2018 - 17:12
fonte

Leggi altre domande sui tag