2012.02.18 09:34
czy sortować przed skompresowaniem
Mam w bazie danych tabelę, w której są formuły powyciągane z różnych dokumentów excelowych. Ma trzy kolumny: id_formuly, tresc_formuly i id_arkusza. Dane wyglądają na przykład tak:
id_formuly,tresc_formuly,id_arkusza
1,IF(ISERROR(bblinks!M10),"",bblinks!M10),4
2,IF(ISERROR(bblinks!B11),"",bblinks!B11),4
3,IF(ISERROR(bblinks!C11),"",bblinks!C11),4
4,IF(ISERROR(bblinks!D11),"",bblinks!D11),4
(...)
Zrobiłem dumpa tej tabeli do pliku csv - zobaczyłem, że ma 240 662 095 bajtów. Zbzipowałem - skompresował się do 17 810 982. Pomyślałem: a ciekawe, czy nie skompresowałoby się lepiej, gdyby ten dump był posortowany po formułach. Spróbowałem. Okazało się, że taki posortowany dump skompresował się gorzej, do 19 032 825. Pomyślałem: ale to może być trochę związane z tym, że w tej tabeli i tak kolejne formuły są często do siebie podobne, bo w zwykłych dokumentach Excela bardzo często idą całe serie bardzo podobnych formuł. Więc to posortowanie mogło zmniejszyć, a nie zwiększyć, podobieństwo sąsiadujących wierszy. Więc na próbę zrobiłem trzeciego dumpa, polosowanego ("... order by random"). No i on to się skompresował tylko do 52 177 042 bajtów. Ja wyciągam z tego taki wniosek: rzeczywiście, jak się kompresuje dumpa z bazy danych, to skompresuje się on lepiej, jeśli sąsiadujące wiersze są podobne. Ale trzeba uważać z sortowaniem dumpa przed skompresowaniem - czasem może to nie pomóc, a zaszkodzić.
komentarze:
2014.11.02 08:04 Piotrek
Ciekawy problem: tak uporządkować listę napisów, żeby suma odległości lewensztajna między sąsiednimi napisami była jak najmniejsza.
powrót na stronę główną
RSS