Quando si dovrebbe preferire l'uso del database per analizzare i dati da un file di testo?

10

Stavo creando un programma Python per misurare la crescita di codereview.SE . Il mio approccio era quello di ottenere le "Statistiche del sito" mostrate sulla prima pagina e memorizzarle sul mio disco fisso. Ho intenzione di farlo una volta al giorno. Finora ho fatto abbastanza per ottenere le statistiche e aggiungerle a un file di testo. Lo script python può essere visualizzato su github . Il formato che sto usando è il seguente

22-08-2013

questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407

22-08-2013

questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407

Ho appena eseguito lo script due volte per ottenere il formato che userei nel file. Inizialmente questo mi sembrava buono perché lo stavo conservando io stesso e il formato sarebbe lo stesso, quindi sarebbe facilmente analizzato ma non ne sono sicuro. Sembra che l'utilizzo di un database dovrebbe essere migliore qui perché in questo modo il recupero dei dati dovrebbe essere più semplice. Solo una nota, non ho mai usato alcun database e non ho conoscenza di SQL, MySQL o altre varianti di RDBMS.

Quindi questo mi porta alla domanda. Quando si dovrebbe preferire un database per la memorizzazione dei dati rispetto alla memorizzazione dei dati in un file di testo? Ci sono alcuni suggerimenti che posso trovare quando prendo decisioni riguardo se ho bisogno di un database o di semplici file di testo?

PS: se è possibile aggiungere tag migliori, per favore fallo. Ho avuto qualche dubbio sui tag che potrebbero essere aggiunti.

    
posta Aseem Bansal 22.08.2013 - 13:14
fonte

5 risposte

9

When should a database be preferred for storing the data over storing the data in a text file?

Wikipedia ci dice che un database è una raccolta organizzata di dati . Con questa misura, il tuo file di testo è un database. Continua dicendo:

The data are typically organized to model relevant aspects of reality in a way that supports processes requiring this information. For example, modeling the availability of rooms in hotels in a way that supports finding a hotel with vacancies.

Quella parte è soggettiva - non ci dice in modo specifico come dovrebbero essere modellati i dati o quali operazioni devono essere ottimizzate. Il tuo file di testo è costituito da un numero di record distinti, uno per ogni giorno, quindi stai modellando un aspetto della realtà in un modo pertinente al tuo problema.

Mi rendo conto che quando si dice "database" probabilmente stai pensando a una sorta di sistema di gestione dei database relazionali, ma se pensi al tuo file di testo come a un database cambia la tua domanda da "quando dovrei usare un database?" a "che tipo di database dovrei usare?" Vedere le cose in quella luce rende la risposta più semplice da vedere: usa un database migliore quando quello che hai non soddisfa più i tuoi requisiti.

Se il tuo script Python e il semplice file di testo funzionano abbastanza bene, non c'è bisogno di cambiare. Con solo un nuovo record al giorno e i computer sempre più veloci ogni anno, sospetto che la tua soluzione attuale possa essere valida per molto tempo. Un decennio di dati fornirebbe solo 3650 record che, una volta analizzati, richiederebbero probabilmente meno di 75 kilobyte.

Immagina che invece di un piccolo record al giorno, hai deciso di registrare tutte le domande poste su CodeReview, chi lo ha chiesto e quando. Inoltre, raccogli tutte le risposte e i relativi metadati. potresti memorizzare tutto ciò in un file di testo, ma un file flat renderebbe difficile trovare le informazioni quando ne hai bisogno. Ci sarebbero troppi dati per leggere l'intera cosa in memoria, quindi ogni volta che volevi trovare una domanda o una risposta, dovresti esaminare il file finché non hai trovato quello che stavi cercando. Quando si desidera trovare tutte le domande poste da un determinato utente, è necessario eseguire la scansione dell'intero file. Se vuoi trovare tutte le domande che hanno "bug" come tag, devi eseguire la scansione del file.

Sarebbe terribilmente lento, quindi potresti decidere di accelerare costruendo alcuni indici che ti dicono dove cercare nel file per trovare un dato record. Potresti avere un indice per le domande, un altro per gli utenti, un terzo per le risposte e così via. Quando si desidera trovare una domanda, si esegue la ricerca dell'indice delle domande (molto più piccolo), si ottiene la posizione della domanda nel file di dati principale e si passa rapidamente al punto giusto nel file. Sarebbe un grande miglioramento delle prestazioni. In effetti, è praticamente ciò che è un sistema di gestione del database.

Quindi usa un DBMS quando è quello che ti serve. Usalo quando hai molti dati, quando devi essere in grado di accedere a quei dati rapidamente e forse in modi che puoi Prevediamo del tutto sin dall'inizio. Se hai diversi tipi di dati - diversi tipi di record - che sono collegati tra loro, usa un RDBMS in modo da poter relazionare i vari record in modo appropriato.

    
risposta data 22.08.2013 - 17:39
fonte
5

Le basi di dati hanno molti vantaggi, ma rendere l'accesso più facile non è uno di questi. Più veloce, più standardizzato, interpretabile come comando incorporato in lingua straniera, più sicuro, sì, ma non più facile. Indipendentemente dallo zucchero sintattico fornito dalla tua lingua e dalla libreria standard, devi prima disporre di una base dati, aprire una connessione ad essa e instradare i dati dal tuo programma in qualcosa di completamente diverso e viceversa. Finché non ci sono problemi con quello che fai, e la facilità di programmazione è la tua priorità, non passare mai a un database solo perché pensi che sia "buona pratica".

La mia opinione su quando effettuare il passaggio è seguire lo sviluppo storico. Dopo tutto, le persone hanno memorizzato i dati nei file per molto tempo prima che il DB relazionale fosse inventato, e in effetti un intero gruppo di modelli di database inferiori (DB gerarchico, DB di rete ...) sono stati inventati prima. Hanno iniziato a scrivere basi di dati e le hanno utilizzate quando è diventato chiaro che ciò avrebbe consentito di risparmiare importanti sforzi di elaborazione, aumentare l'affidabilità, ecc. nel complesso e nel lungo periodo . Finché questo non è il tuo caso, e non prevedi che diventi il caso presto, il passaggio sarebbe troppo ingegnoso.

    
risposta data 22.08.2013 - 13:39
fonte
3

Questo sarà ovviamente un giudizio, ma i tre criteri principali che prenderei in considerazione sono: deve essere ACID compliant, quanto sono complessi i dati e, infine, quante cose hanno bisogno di leggerli / scriverli. Finché stai leggendo e scrivendo solo una riga per e la tua app è l'unica app che sta leggendo o scrivendo, puoi probabilmente saltare il database. Una volta che inizi a far sì che più app leggano o scrivano o la struttura dei dati diventi complessa (in particolare se ha relazioni tra linee separate), un DB inizia a sembrare davvero attraente.

    
risposta data 22.08.2013 - 17:39
fonte
2

I database vengono utilizzati non solo per archiviare ma per manipolare e interrogare i dati, quindi devi prendere una decisione istruita:

Un grande fattore è il vantaggio che si ottiene dall'installazione di un database sulla macchina rispetto alla funzionalità che porta

Ovviamente se hai bisogno di interrogare e manipolare i dati e vuoi che l'accesso sia veloce - e inoltre potresti pensare di usare un database per altre funzioni, potrebbe essere una buona idea. I modelli di archiviazione di database consentono di ricercare rapidamente i dati in base a valori chiave e posso immaginare di analizzare un file potrebbe essere lento (a seconda di come lo si sta facendo)

Se vuoi giocare con SQL e cosa può fare, SQLFiddle.com ha alcuni modelli RDBMS diversi con cui puoi giocare (eseguire query, creare schemi, ecc.)

    
risposta data 22.08.2013 - 13:40
fonte
2

Come sempre, usare un database o meno dipende da cosa devi fare. Se disponi di un'enorme quantità di dati e devi eseguire molte query diverse, probabilmente un database potrebbe aiutarti.

Nel tuo caso manterrei la memoria in un file di test finché le prestazioni non saranno accettabili. Di solito leggere un file di testo (anche grande) non richiede molto tempo. Se hai bisogno di più puoi sempre aggiungere il database più tardi.

Per la mia esperienza, se sei completamente nuovo nei database potresti trovare più facile usare qualcosa come couchdb: link che è no-sql ed è possibile utilizzare direttamente javascript o python, ecc. per le query.

    
risposta data 22.08.2013 - 15:59
fonte

Leggi altre domande sui tag