Ich habe eine 7,4 GB csv-Datei. Nach der Konvertierung in eine SQLite-Datenbank mit einer python script ist die Ausgabe-DB 4,7 GB, etwa 60% der ursprünglichen Größe.Komprimiert sqlite3 Daten?
Die CSV hat rund 150.000.000 Zeilen. Es hat Header:
tkey,ipaddr,healthtime,numconnections,policystatus,activityflag
Und jede Zeile sieht so etwas wie
261846,172.10.28.15,2012-02-03 16:15:00,22,1,1
Das Skript healthtime verwendet die Daten in Tabellen 192 Tabellen
Als ich diese Zahlen zu spalten sah, ich nahm ich an hatte irgendwo einen Fehler gemacht. Wie groß sollte eine Verringerung der Dateigröße sein, wenn ich die Healthtime 192 Mal anstelle von 150 Millionen Mal schreibe?
EDIT: Sobald ich das geschrieben habe, realisierte ich die Antwort. Ich entferne etwa 40% der Saite, daher die 40% ige Verringerung der Größe.
Edit 2 Lassen Sie uns den Unterschied in der Größe zwischen dem Klartext berechnen:
"261846,172.10.28.15,2012-02-03 16:15:00,22,1,1"
und der Datenbankeintrag:
db(261846,'172.10.28.15',22,1,1)
Zunächst einmal fallen wir 46 bis 26 Zeichen in Klartextdarstellung.
Die übrigen Zeichen sind:
"261846,172.10.28.15,22,1,1"
oder 26 Bytes. Wenn jede ganze Zahl in 32 Bit (4 Bytes) gespeichert werden soll, dann haben wir:
12 Bytes (ipaddr) + 4 Bytes * 4 (ganze Felder) = 28 Bytes.
Es sieht also so aus, als würde die Konvertierung in Ganzzahlen den Speicher etwas weniger effizient machen, und all meine Gewinne kommen durch die Reduzierung der Anzahl der in jeder Zeile gespeicherten Zeichen.
Offensichtlich ist SQLite ein Binärformat, während CSV Text ist. 60% Größenunterschied kann dadurch verursacht werden. –
Sorry, was ist Healthtime? Eine schnelle Google-Suche hat nichts ausgemacht. –
healthtime ist nur der Name des Feldes. – Maus