[Linuxtrent] Salvare serie temporali ad alto flusso con Python

  • From: Emanuele Olivetti <emanuele.olivetti@xxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Fri, 19 Mar 2021 07:24:00 +0100

Salve a Tutti,

con Python sto cercando di trovare una soluzione semplice e sperabilmente
"minimalista" al problema di salvare su disco i dati provenienti
rapidamente da più insieme di sensori anche per periodi di tempo molto
lunghi.

Mi spiego meglio: ho alcuni gruppi di 4 sensori (gruppo X: S1, S2, S3, S4)
ciascuno che periodicamente (anche parecchio volte al secondo) mi mandano
la loro lettura tramite un unico websocket. Un messaggio ricevuto di
esempio potrebbe essere: messaggio=('gruppo':1, 'timestamp':123456789,
's1':15, 's2':22, 's3':12, 's4':16)

Io per ora inserisco il messaggio in una coda (queue.Queue()) per essere
certo di non perdermi messaggi e ora sto cercando un contenitore
possibilmente più snello di un database SQL per mettere questi messaggi da
parte. In futuro avrò bisogno di recuperare questi dati con query tipo
"dammi tutte le letture del gruppo X che hanno un timestamp compreso tra
<timestamp 1> e <timestamp 2>".

Il flusso di dati è piuttosto rapido, tipo un milione di messaggi al
giorno. Il timestamp è un intero che esprime il tempo in millisecondi.
Purtroppo, ci possono essere più letture con lo stesso esatto timestamp
(per vari motivi tecnici). In linea teorica, il flusso dei dati non si
ferma mai e quindi devo essere in grado di fare query anche mentre i dati
vengono ricevuti e stoccati.

Sto iniziando a guardare Redis, che trovo estremamente performante. Ma sono
agli inizi e non trovo una struttura dati di Redis che sia perfetta per il
mio caso.

Consigli? Se ci fossero tool/librerie per Python anche più minimaliste di
Redis, sarei contento. Per ora mi accontenterei di avere una soluzione :D

Grazie e a presto,

Emanuele

Other related posts: