2010-04-15 11 views
51

Ho una domanda relativa ai database e a che punto vale la pena immergersi in uno. Sono principalmente un ingegnere embedded, ma sto scrivendo un'applicazione che usa Qt per interfacciarlo con il nostro controller.A che punto vale la pena usare un database?

Siamo a un punto strano dove abbiamo dati sufficienti che sarebbe fattibile per implementare una banca dati (circa 700 + oggetti e in crescita) per gestire tutto, ma non sono sicuro che vale il momento giusto per affrontare con. Non ho problemi ad implementare la GUI con file generati da Excel e analizzati, ma diventa noioso e difficile da tracciare anche con gli script VBA. Ho giocato con la conversione dei nostri dati in qualcosa di più gestibile per il lato delle applicazioni con Microsoft Access e sembra funzionare bene. Se funziona, sono solo un passaggio (o diversi) dall'utilizzo di un database SQL e dall'utilizzo della libreria Qt per accedere e modificarlo.

Non ho molta esperienza nella gestione dei dati a questo livello e sono curioso di sapere quale potrebbe essere il modo migliore per avvicinarsi a questo. Quindi quali sono alcuni dei reali vantaggi dell'utilizzo di un database, se ce ne sono alcuni in questo caso? Mi rendo conto che molto di questo può essere molto specifico per l'applicazione, ma alcune idee e suggerimenti generali su come cavalcare la linea di programmazione incorporata/dell'applicazione sarebbero utili.

Non si tratta di inserire un database in un progetto incorporato. Inoltre, non è un'applicazione di tipo business in cui vengono comunemente utilizzati database di dimensioni maggiori. Sto progettando una GUI per un singolo utente su un desktop da interfacciare con un microcontrollore per scopi di monitoraggio e configurazione.


Ho deciso di utilizzare SQLite. Puoi fare cose molto interessanti con i dati che non ho considerato un'opzione quando avvii per la prima volta questo progetto.

+21

Userei sempre un database: quello che vuoi è probabilmente SQLite su http://www.sqlite.org/. –

+0

Stai leggendo e scrivendo o semplicemente leggendo i dati? –

+0

Farà la lettura e la scrittura, userà la GUI per configurare e configurare il controller e monitorare i dati in tempo reale mentre il controller è in funzione. – radix07

risposta

38

Un database è utile quando:

  1. L'applicazione si evolve in una certa forma di data-driven esecuzione.
  2. vostro tempo di spesa di progettazione e sviluppo di memorizzazione esterna di dati strutture.
  3. condivisione dei dati tra le applicazioni o organizzazioni (tra cui le singole persone)
  4. I dati non è più breve e semplice .
  5. dati duplicazione

Evolution Dati Driven esecuzione
Quando i dati sta cambiando ma l'esecuzione non è, questo è un segno di un programma basato sui dati o di parti del programma sono guidate dati. Una serie di opzioni di configurazione è un segno di una funzione basata sui dati, ma l'intera applicazione potrebbe non essere guidata dai dati. In ogni caso, un database può aiutare a gestire i dati. (La libreria di database o l'applicazione non deve essere enorme come Oracle, ma può essere snella e media come SQLite).

Progettazione & sviluppo di strutture di dati esterni
domande postando Stack Overflow circa serializzazione o alberi conversione e liste per utilizzare i file è una buona indicazione del programma si è laureato ad usare un database. Inoltre, se stai spendendo un po 'di tempo a progettare algoritmi per archiviare dati in un file o progettare i dati in un file è un buon momento per cercare l'utilizzo di un database.

condivisione dei dati
Se la vostra applicazione è la condivisione di dati con un'altra applicazione, un'altra organizzazione o di un'altra persona, un database può aiutare. Utilizzando un database, la coerenza dei dati è più facile da ottenere. Uno dei principali problemi nell'indagine sui problemi è che le squadre non utilizzano gli stessi dati. Il cliente può utilizzare un set di dati; il team di validazione un altro e lo sviluppo utilizzando un diverso insieme di dati. Un database semplifica il controllo delle versioni dei dati e consente alle entità di utilizzare gli stessi dati.

dati complessi
programmi iniziano con piccole tabelle di dati codificati duri. Questo si evolve nell'uso di dati dinamici con mappe, alberi ed elenchi. A volte i dati si espandono da semplici due colonne a 8 o più. La teoria dei database e i database possono semplificare la complessità dell'organizzazione dei dati. Lascia che il database si preoccupi della gestione dei dati e libera la tua applicazione e il tuo tempo di sviluppo. Dopo tutto, la modalità di gestione dei dati non è tanto importante quanto la qualità dei dati e la loro accessibilità.

dati duplicazione
Spesso, quando i dati cresce, c'è un'attrazione sempre crescente per i dati duplicati. I database e la teoria dei database possono minimizzare la duplicazione dei dati. I database possono essere configurati per mettere in guardia contro le duplicazioni.

Passare all'utilizzo di un database ha molti fattori da considerare. Alcuni includono ma non sono limitati a: complessità dei dati, duplicazione dei dati (comprese parti dei dati), scadenze dei progetti, costi di sviluppo e problemi di licenza. Se il tuo programma può funzionare in modo più efficiente con un database, fallo. Un database può anche risparmiare tempo di sviluppo (e denaro). Esistono altri compiti che tu e la tua applicazione potete eseguire rispetto alla gestione dei dati. Lascia la gestione dei dati agli esperti.

+1

Vorrei poterti consigliare questa risposta ... soprattutto perché è così generale. Non sono realmente uno sviluppatore, di per sé, ma posso usare questa risposta per aiutarmi a capire quando usare un database sarebbe una buona idea. Ben affermato –

4

Ti consiglio di introdurre un Database nella tua app, la tua applicazione acquisirà flessibilità e sarà più facile da mantenere e migliorare con nuove funzionalità in futuro.
Vorrei iniziare con un file leggero basato su db come Sqlite.
Con un ben progettato db avrete:

  1. ridondanza dei dati ridotto
  2. maggiore integrità dei dati
  3. sicurezza dei dati migliorata

Ultimo ma non meno importante, utilizzando un database vi salverà dall'importazione/aggiornamento/esportazione Excel Hell!

2

Quando si dispone di molti dati che non si è sicuri di come verranno sfruttati in futuro.

Ad esempio, è possibile aggiungere un database SQLite in un'applicazione incorporata che deve registrare le statistiche che non si è sicuri di come verranno utilizzate. Successivamente si invia il database completo per l'iniezione in uno più grande in esecuzione su un server centrale e tali dati possono essere facilmente sfruttati, utilizzando le richieste.

Infatti, se lo scopo dell'applicazione è "raccogliere dati", è necessario disporre di un database.

+0

A volte è meglio scaricare semplicemente i dati e creare il database su un altro sistema che non ha vincoli temporali forti. –

3

vedo un bel paio di requisiti che ben soddisfatti dalle banche dati:

1). Query ad hoc Trovami tutti i {X} che soddisfano i criteri Y

2).Dati con struttura che possono trarre vantaggio dalla normalizzazione: il factoring di valori comuni in "tabelle" separate. È possibile risparmiare spazio e ridurre la possibilità di incoerenza in questo modo. Una volta che hai fatto questo, quelle query ad-hoc iniziano ad essere davvero utili.

3). Grandi volumi di dati. I database professionali sono molto bravi nel fare buon uso di resoruces, intelligenti interruzioni delle query e strategie di paging. Cercare di scrivere queste cose da solo è una vera sfida.

Ovviamente non hai bisogno di quest'ultimo, ma gli altri due, forse si applicano a voi.

3

Motivi per l'utilizzo di un database:

  • Concurrent scrive. È facile ottenere la concorrenza nei database
  • Interrogazione facile. Le query SQL tendono ad essere molto concise rispetto al codice procedurale per la ricerca dei dati. UPDATE, INSERT INTOs può anche fare un sacco di cose con pochissimo codice
  • Integrità. I vincoli sono molto facili da definire e vengono applicati senza scrivere codice. Se si dispone di un vincolo non nullo, si può essere certi che il valore non sarà nullo, non è necessario scrivere controlli ovunque. Se hai un vincolo di chiave esterna in atto, non avrai "riferimenti ciondolanti".
  • Prestazioni su set di dati di grandi dimensioni. L'indicizzazione è molto semplice da aggiungere a un database SQL

motivi per non usare un database:

  • Si tende ad essere una dipendenza in più (anche se esistono databases- molto leggero mi piace H2 per Java, ad esempio)
  • Dati non adatti a uno schema relazionale. Cose che sono fondamentalmente mappe chiave/valore. XML (sebbene i database spesso supportino XPath, ecc.).
  • A volte i file sono più convenienti. Possono essere diffuse, unite, modificate con un editor di testo semplice, ecc. A volte i fogli di calcolo possono essere più pratici (non è necessario creare un editor, è possibile utilizzare un foglio di calcolo)
  • I tuoi dati sono già da qualche parte altro
+0

"UPDATE, INSERT INTOs può anche fare un sacco di cose con un codice molto piccolo". E GROUP BY è praticamente assurdo, assumendo quello che sembra essere quello che vuoi :-) –

-2

"A che punto vale la pena utilizzare un database?"

Se e quando è necessario gestire i dati?

1

Per aggiungere un negativo: non adatto per l'elaborazione in tempo reale, a causa della latenza non deterministica. Tuttavia, sarebbe abbastanza ampio per cercare e impostare i parametri operativi, ad esempio durante l'avvio. Non inserirò gli accessi al database su percorsi temporali critici.

1

Non è necessario un database se si dispone di qualche migliaio di righe in una o due tabelle da gestire in un'unica app utente (per il punto incorporato).

Se è per più utenti (accesso simultaneo, blocco) o la necessità di transazioni, è necessario prendere in considerazione un database. Gestione di strutture di dati complesse in tabelle normalizzate e mantenimento dell'integrità o un'enorme quantità di dati sarebbe un'altra indicazione che è necessario utilizzare un database.

1

Sembra che l'applicazione sia in esecuzione su un computer desktop e che comunichi semplicemente al dispositivo incorporato.

Come tale utilizzare un database è molto più fattibile.L'utilizzo di uno su una piattaforma integrata è un problema molto più complesso.

Sul fronte del desktop che utilizzano un database quando v'è la necessità di memorizzare le nuove informazioni in modo continuo e la necessità di estrarre le informazioni in un modo relazionale. Quello per cui non uso i database è la memorizzazione di informazioni statiche, informazioni che ho letto una volta al caricamento e questo è tutto. L'eccezione è quando l'applicazione ha molti utenti e vi è la necessità di archiviare queste informazioni in base all'utente.

Sembra essere a me come la tua raccolta di informazioni dal dispositivo embedded, riporlo in qualche modo, quindi utilizzando un secondo momento per visualizzare tramite una GUI.

Questo è un buon caso per l'utilizzo di un database, soprattutto se è possibile progettare il sistema in modo tale che esista un demone di raccolta dati che gestisce la comunicazione continua con il dispositivo incorporato. Questa app può quindi solo scrivere i dati nel database. Quando viene avviata la GUI, può estrarre i dati per la visualizzazione.

Utilizzando il database sarà anche facilitare la vostra interfaccia grafica sviluppare, se avete bisogno di visualizzare diversi punti di vista, come "mi mostrano tutte le voci tra 2 date". Con un database chiedete solo che i valori corretti vengano visualizzati con una query SQL corretta e la GUI visualizzi qualsiasi cosa ritorni consentendo di separare gran parte del codice "business logic" dalla GUI.

2

Non dimenticare che il database appropriato può essere molto diverso a seconda delle tue esigenze (e non dimenticare che un file di testo potrebbe essere usato come un database se i tuoi requisiti sono abbastanza semplici - per esempio, i file di configurazione sono solo un tipo specifico di database). Tali parametri potrebbero essere:

  • numero di record
  • dimensioni di elementi di dati
  • ha bisogno di essere condiviso con altri dispositivi il database? In concomitanza?
  • quanto sono complesse le relazioni tra le varie porzioni di dati
  • è il database di sola lettura (creato in fase di compilazione e non modificato, ad esempio)?
  • il database deve essere aggiornato da più entità contemporaneamente?
  • è necessario supportare query complesse?

Per un database con 700 voci, una matrice ordinata in memoria caricata da un file di testo potrebbe essere appropriata. Ma potrei anche vedere la necessità di un database SQL incorporato o magari di avere i dati di richiesta del controller dal database su una connessione di rete, a seconda di quali siano i vari requisiti (e limitazioni delle risorse).

8

Quello che stai descrivendo non sembra una tipica applicazione aziendale, e molte delle risposte già postate presuppongono che questo sia il tipo di applicazione di cui stai parlando, quindi lascia che offra una prospettiva diversa.

O se non si utilizza un database per 700 oggetti sta andando a dipendere in larga misura dalla natura dei dati.

direi che, circa il 90% del tempo in questa scala, si potranno beneficiare di un database leggero come SQLite, a condizione che:

  1. I dati possono potenzialmente crescere notevolmente più grande di quello si sta descrivendo,
  2. i dati potranno essere condivisi da più di un utente,
  3. potrebbe essere necessario per eseguire query contro i dati (che non credo che stai facendo in questo momento), e
  4. Il i dati possono essere facilmente descritti d in forma di tabella.

Il restante 10% del tempo, i vostri dati saranno altamente strutturati, gerarchico, basato su oggetti, e non ordinatamente inseriscono nel modello di tabella di un database o una tabella di Excel. In questo caso, considera l'utilizzo di file XML.

so sviluppatori piace istintivamente a gettare basi di dati a problemi come questo, ma se si sta utilizzando i dati di Excel per progettare interfacce utente (o le impostazioni di configurazione del display), piuttosto che visualizzare un record di un cliente, XML può essere una migliore vestibilità. XML è più espressivo delle tabelle Excel o database e può essere facilmente manipolato con un semplice editor di testo.

parser XML e leganti di dati per C++ sono easy to find.

1

Ci troviamo anche di fronte a una situazione simile. Disponiamo di dati provenienti da diverse configurazioni di test e attualmente vengono scaricati in fogli Excel, elaborati utilizzando Perl o VBA.

Abbiamo scoperto questo metodo ha avuto molti problemi:

i. Gestire i dati usando i fogli Excel è piuttosto complicato. Dopo un po 'di tempo hai un sacco di fogli di Excel e non c'è un modo semplice per recuperare i dati richiesti da esso.

ii. Le persone iniziano a inviare i fogli Excel avanti e indietro per commenti e recensioni tramite e-mail. La posta elettronica diventa la modalità principale di gestione dei commenti relativi ai dati. Questi commenti sono persi in un secondo momento e non c'è modo di recuperarli.

iii. Vengono create più copie dei file e le modifiche in una copia non si riflettono nell'altra - non esiste il controllo delle versioni.

Questo è per gli stessi motivi per cui abbiamo deciso di passare a una soluzione basata su database e ci stiamo lavorando al momento. Permettetemi di riassumere ciò che stiamo cercando di fare:

i. Il database si trova in un server centrale accessibile tramite PC in tutte le impostazioni di prova.

ii. Tutti i dati vanno in una posizione temporanea (disco rigido locale nei file) non appena viene generato. Dai file, viene inserito nel database da un processo in esecuzione in background (quindi anche se c'è un problema di rete, i dati saranno presenti nel file system locale).

iii.Abbiamo un'applicazione web based che consente agli utenti di accedere e accedere ai dati nel formato desiderato. Il portale consentirà loro di aggiungere commenti, generare diversi tipi di rapporti, condividerli con altri utenti dopo la revisione, ecc. Avrà inoltre la possibilità di esportare i dati in un foglio Excel, nel caso in cui sia necessario portarlo con sé.

Informati se questo può essere implementato meglio.

2

Non esiste un punto specifico in cui un database sia utile. Invece di solito faccio le seguenti domande:

  • La quantità di dati che l'applicazione utilizza/crea in crescita?
  • Il limite superiore di questa crescita dei dati è sconosciuto (o non chiaro)?
  • L'applicazione deve aggregare o filtrare questi dati?
  • Potrebbero esserci usi futuri dei dati che potrebbero non essere ovvi in ​​questo momento?
  • Le prestazioni di recupero e/o archiviazione dei dati sono importanti?
  • Ci sono (o potrebbero esserci) più utenti dell'applicazione che condividono i dati?

Se rispondo "Sì" alla maggior parte di queste domande, scelgo quasi sempre un database (a differenza di altre opzioni come XML/ini/CSV/Excel/file di testo o il filesystem).

Inoltre, se l'applicazione avrà molti utenti che potrebbero accedere contemporaneamente ai dati, mi sposterò verso un server di database completo (MySQL, SQl Server, Oracle ecc.).

Ma spesso in un singolo utente (o piccola concorrenza) situazione, un database locale come SQLite non può essere battuto per portabilità e facilità di implementazione.