Ho un file csv da 7,4 Gb. Dopo averlo convertito in un database sqlite con un python script, il DB di output è 4,7 Gb, circa il 60% della dimensione originale.sqlite3 comprime i dati?
Il csv ha circa 150.000.000 di righe. Ha intestazione:
tkey,ipaddr,healthtime,numconnections,policystatus,activityflag
e ogni riga simile a
261846,172.10.28.15,2012-02-03 16:15:00,22,1,1
Lo script healthtime usa per suddividere i dati in tabelle 192 tabelle
Quando ho visto questi numeri, ho pensato io aveva commesso un errore da qualche parte. Quanto è grande una riduzione delle dimensioni del file dovrei aspettarmi dall'efficienza aggiunta di scrivere solo l'ora di integrità 192 volte anziché 150.000.000 di volte?
MODIFICA: Non appena ho postato questo ho capito la risposta. Sto rimuovendo circa il 40% della stringa, quindi la riduzione del 40% delle dimensioni.
Edit 2 Calcoliamo la differenza di dimensioni tra il testo in chiaro:
"261846,172.10.28.15,2012-02-03 16:15:00,22,1,1"
E la voce di base di dati:
db(261846,'172.10.28.15',22,1,1)
Prima di tutto, facciamo cadere da 46 a 26 caratteri nella rappresentazione del testo normale.
I caratteri rimanenti sono:
"261846,172.10.28.15,22,1,1"
o 26 byte. Se ogni intero deve essere memorizzato in 32 bit (4 byte), allora abbiamo:
12 byte (ipaddr) + 4 byte * 4 (campi interi) = 28 byte.
Quindi sembra che la conversione in numeri interi renda l'archiviazione leggermente meno efficiente e tutti i miei guadagni derivino dalla riduzione del numero di caratteri memorizzati in ogni riga.
Ovviamente sqlite è un formato binario, mentre csv è testo. La differenza di dimensione del 60% può essere causata da questo. –
Mi spiace, qual è lo stato di salute? Una rapida ricerca su google non ha rivelato nulla. –
healthtime è solo il nome del campo. – Maus