Mam plik csv o wielkości 7,4 GB. Po przekonwertowaniu go do bazy danych sqlite przy pomocy python script, wyjściowy DB wynosi 4,7 Gb, około 60% pierwotnego rozmiaru.Czy program sqlite3 kompresuje dane?
Plik CSV ma około 150 000 000 wierszy. Posiada nagłówek:
tkey,ipaddr,healthtime,numconnections,policystatus,activityflag
a każdy wiersz wyglądał
261846,172.10.28.15,2012-02-03 16:15:00,22,1,1
Skrypt wykorzystuje healthtime podzielić dane w tabelach 192 tabele
Kiedy pierwszy raz zobaczyłem te numery, Przypuszczałem I popełnił błąd w jakimś miejscu. Jak duże zmniejszenie rozmiaru pliku powinienem oczekiwać od dodatkowej skuteczności pisania tylko 192 razy czasu zdrowia zamiast 150 000 000 razy?
EDYCJA: Jak tylko to opublikowałem, uświadomiłem sobie odpowiedź. Usuwam około 40% napisu, stąd zmniejszenie rozmiaru o 40%.
Edycja 2 Policzmy różnicę w wielkości pomiędzy zwykłym tekstem:
"261846,172.10.28.15,2012-02-03 16:15:00,22,1,1"
a wejściem bazy danych:
db(261846,'172.10.28.15',22,1,1)
Przede wszystkim, możemy spaść od 46 do 26 znaków w reprezentacji tekstowej.
Pozostałe znaki są:
"261846,172.10.28.15,22,1,1"
lub 26 bajtów. Jeśli każda liczba całkowita musi być przechowywana w 32 bitach (4 bajty), to mamy:
12 bajtów (ipaddr) + 4 bajty * 4 (pola całkowite) = 28 bajtów.
Wygląda na to, że konwersja na liczby całkowite powoduje, że pamięć jest nieco mniej wydajna, a wszystkie moje zyski pochodzą od liczby znaków przechowywanych w każdym wierszu.
Oczywiście sqlite jest formatem binarnym, a csv jest tekstem. Różnica w wysokości 60% może być z tego powodu spowodowana. –
Przepraszam, co to jest czas na zdrowie? Szybkie wyszukiwanie google niczego nie zmieniło. –
zdrowie to tylko nazwa pola. – Maus