[Linuxtrent] Re: Salvare serie temporali ad alto flusso con Python

  • From: Marco Ciampa <ciampix@xxxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Fri, 19 Mar 2021 08:32:44 +0100

On Fri, Mar 19, 2021 at 07:24:00AM +0100, Emanuele Olivetti wrote:

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

Mi pare di capire che a te interessa la velocità di insert. Penso che il
tuo problema sia essenzialmente di tuning e che più o meno qualunque DB
SQL, _ben tarato_ ti possa andar bene, dal classico mysql (scegliendo il
db e le opzioni accuratamente) o posgresql. Vedi questo:

https://dba.stackexchange.com/questions/75075/how-do-i-maintain-high-insert-performance-on-postgresql

bye

--

Saluton,
Marco Ciampa
-- 
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: