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

  • From: Emanuele Olivetti <emanuele.olivetti@xxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Sun, 21 Mar 2021 19:01:22 +0100

Salve a Tutti,

prima di tutto vi ringrazio per le numerose e interessantissime risposte
che continuano ad arrivare (comprese qulle linguistiche! :)).

Ho fatto una prima prova usando SQLite da Python come suggerito da più
persone: funziona molto bene. Ho dopo aver scritto e debuggato un paio di
pagine di codice, ho fatto un primo test parziale, ricevendo dati per 10
ore (solo per pochi gruppi), con una media di poco più di qualche messaggio
al secondo, ed è andato tutto perfettamente, con un carico della CPU
trascurabile.

Quindi i dati arrivano da un websocket che passa il messaggio in arrivo a
una funzione (handle_message()) che viene eseguita in un thread e che non
fa altro che inserire il messaggio in una coda. Un altro thread si occupa
di spacchettare i messaggi della coda a uno a uno, gestire eventuali
errori, e fare l'insert nel db giusto. Uso un db per ogni gruppo di sensori
[*]. Per ora ho deciso di fare il "commit" solo quando il timestamp del
nuovo messaggio supera una quantità di tempo dall'ultimo timestamp del
precedente commit. Per ora ho impostato 1000 millisecondi e tutto funziona
liscio. Ma potrei mettere una soglia più alta. Quindi il thread che fa
l'insert tiene conto di quando ha fatto l'ultimo commit su ogni db
(banalmente, con un dizionario) e in coda a ogni insert valuta se è passato
abbastanza tempo per fare il nuovo commit.

Oggi sto provando per diletto se tutto funziona "a regime", cioè ricevendo
dati da tutti i gruppi, e per ora vedo che il carico della CPU per gestire
il tutto rimane sempre <= 5%. Un ottimo risultato.

Una nota tecnica: usando i thread di Python si è limitati dalla Global
Interpreter Lock (GIL), per cui in realtà i diversi thread non vanno in
parallelo ma in alternanza su un singolo core. Pur con questo limite, tutto
sembra filare liscio con minimo uso della CPU.

A presto,

Emanuele

[*] Il timore è che se uno un solo db per tutti i gruppi, prima o poi il
file del db diventerà troppo grande o scomodo da gestire.

On Sun, Mar 21, 2021 at 6:24 PM Lele Gaifax <lele@xxxxxxxxxxxxxxx> wrote:

"Chris Mair" <chris@xxxxxxxx> writes:

"cimelio" è un sostantivo usato per definire una anticaglia, cosa
vecchia, di nessun valore; che ha fatto il suo tempo.

E' questo che volevi dire?

Oops, no assolutamente :)

Pensavo "cimelio" fosse sinonimo di qualcosa di prezioso, tipo "gioello"
con la connotazione di "storico", ma in senso positivo.

Anch'io l'ho intesto così, e Treccani sembra d'accordo:

  https://treccani.it/vocabolario/cimelio/

ciao, lele
--
nickname: Lele Gaifax | Quando vivrò di quello che ho pensato ieri
real: Emanuele Gaifas | comincerò ad aver paura di chi mi copia.
lele@xxxxxxxxxxxxxxx  |                 -- Fortunato Depero, 1929.

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



Other related posts: