SQLite è un'opzione ragionevole per la registrazione dei dati?

7

Sto cercando di configurare una piccola applicazione di registrazione dei dati su Linux. I dati arrivano tramite porta seriale, e da lì dovrebbe essere pompato per la registrazione e per la visualizzazione grafica.

La funzionalità di registrazione è lì per scopi di inizializzazione della funzionalità grafica, dopo un riavvio.

I dati arrivano ogni secondo e sono composti da 1 numero di 5 cifre decimali e devono essere registrati per 2 anni. Il mio attuale spazio libero è di circa 15 GB.

Le lingue del progetto fino ad ora sono bash e python.

I miei obiettivi sono rendere semplice ma robusto (magari alcuni backup live su una chiavetta USB?) sistema di registrazione, che è anche veloce e facile da leggere da python e scrivere da bash.

SQLite è adatto a questo (non l'ho mai usato)? Un file di testo nella mia directory home è adatto a questo?

    
posta Vorac 16.08.2013 - 12:49
fonte

5 risposte

5

Entrambe le opzioni mi sembrano valide. In questi casi, una regola utile da applicare è fare La cosa più semplice che potrebbe Forse lavoro . I file di testo sono più facili da avviare e si prevede che funzionino abbastanza bene almeno all'inizio. Una volta che si presentano i requisiti che sono meglio soddisfatti utilizzando un database, sarà banale importarli. Usando questa strategia, rinvii le decisioni di progettazione il più a lungo possibile (ma non più a lungo). In quanto tale, non fai lavori inutili. Quando, se mai, sarà necessario, avrai una comprensione molto migliore di cosa esattamente ti serve. Quindi, è più probabile che costruisca la cosa giusta e non sprechi tempo a costruire la cosa sbagliata.

    
risposta data 23.08.2013 - 14:03
fonte
11

Direi che, dati i requisiti di robustezza e longevità, un semplice file di testo vecchio è una scelta migliore. Come altri hanno notato, la tua velocità di trasmissione dati non è elevata; Inoltre, la tua post-elaborazione è completamente offline dal sistema di registrazione, quindi non è necessario scrivere i tuoi dati nel modo più efficiente perché puoi leggerli a tuo piacimento.

Un filesystem è un database (anche se degenerato) e gli allegati ai file di testo sono molto leggeri sulle risorse di sistema. Sarebbe difficile da battere

echo data >> mylogfile

per attività di chiamata di sistema minime. Anche i file di testo sono molto più robusti di fronte al danneggiamento interno rispetto a un db sqlite e in particolare a un file pickle.

Immagino che la tua applicazione sia un sensore remoto, non presidiato, da qualche parte non facile da ottenere un operatore. In tal caso, la soluzione tecnologica più bassa dovrebbe essere preferita.

    
risposta data 16.08.2013 - 13:50
fonte
3

Come indicato da @gbjbaanb, SQLite "non è progettato per inserire molti record ad alta velocità."

Direi che 1 numero / 1 secondo non è alto velocità se si mantiene aperta la connessione al database. E questo dovrebbe funzionare ragionevolmente bene, ma i log sono di solito fatti su file, quella soluzione è più convenzionale e forse elegante a causa di ciò.

Userei i file di testo e ne creerei uno nuovo ogni mese. Puoi comprimere e / o cancellare vecchi file dopo un po 'di tempo che potrebbe essere adatto a te se lo spazio su disco fisso è un problema.

If "La funzionalità di registrazione è lì per scopi di inizializzazione della funzionalità grafica, dopo un riavvio." e hai solo bisogno di una finestra temporale con gli ultimi n elementi quindi puoi aggiungere un blocco finally al tuo codice e usare pickle a dump alcune strutture dati e load li dopo il riavvio. Ma assicurati prima che il riavvio ti stia effettivamente permettendo di fare ciò di cui hai bisogno.

Questa è probabilmente la soluzione che richiede meno risorse e si adatta più strettamente ai tuoi requisiti.

    
risposta data 16.08.2013 - 13:30
fonte
2

No. SQLite è un ottimo strumento, ma non è progettato per inserire molti record ad alta velocità.

La soluzione migliore qui è qualcosa che può essere aggiunto rapidamente, e questo è un file. Un file di questo tipo può essere posizionato ovunque tu voglia, su Linux di solito sono messi in / var / log (come alcuni amministratori preferiscono mettere / var su una partizione separata, quindi se un'app canaglia scrive molti dati, non andrà in crash il sistema operativo quando riempie il disco).

Una volta scritti i dati, è possibile scrivere uno strumento che legge i file di registro, li importa in un DB SQLite e li utilizza per la segnalazione.

In alternativa, utilizza uno strumento esistente come Nagios . Scrivi un plug-in per questo (se non riesci a configurarlo per riconoscere i tuoi dati direttamente nel file di registro) e usalo per il monitoraggio e la segnalazione.

    
risposta data 16.08.2013 - 13:15
fonte
0

Sì. SQLite è solo un file binario. Devi solo avere uno scheletro vuoto per il tuo database una volta, quindi puoi semplicemente aggiungere dati a quel file binario per riempire il "database".

In una ex azienda abbiamo implementato questo per il sistema operativo Symbian (usando il linguaggio c ++), facendo anche qualche tipo di registrazione. Sfortunatamente è stato qualche tempo fa e non ricordo i dettagli.

    
risposta data 16.08.2013 - 13:36
fonte

Leggi altre domande sui tag