Optimalizace uložení dat v Open XML

Pro srovnání, jak jsou data uložena v tabulkovém kalkulátoru, jsem si připravil seznam firem se sídlem na Praze 4. Jedná se o 16408 (zdroj ČSÚ, srpen 2006). Data jsem uložil do textového souboru odděleného středníkem (CSV). Velikost vstupního souboru je 4 030 240 bajtů a obsahuje kombinaci textu, čísel a data.

Import dat do tabulkových kalkulátorů

Import do Excel 2007 proběhl bez problémů. Import do OpenOffice Calc 2.2 v české verzi mi nahlásil, že byl překročen limit řádků a data nad limit se importovat nebudou. Načetlo se jen 13268 řádků. Proto jsem omezil vstupní soubor na 13000 řádků a import provedl znovu. Calc nahlásil tu samou chybu a načetl jen 11011 řádků.

Abych se vyvaroval případnému omylu, vyzkoušel jsem stejný postup i na počítači s OpenOffice 2.1 česká verze na Windows Vista Ultimate, OpenOffice 2.2 anglická verze na Windows Vista Enterprise a OpenOffice 2.0.4 na openSuse 10.2 (zde to ani nenahlásilo chybu) vždy s naprosto stejným počtem zpracovaných řádků. Problém jsem reportoval vývojovému týmu OpenOffice. Vývojový tým našel následující problém. Import CSV nefunguje korektně, pokud je ve zdrojových datech víc oddělovačů těsně za sebou (prázdné pole) a zároveň je ponecháno pole „Text delimiter“ u filtru pro import textového souboru na výchozí hodnotě (uvozovky), aniž jsou uvozovky ve zdrojovém souboru použity. Po úpravě nastavení se import již povedl.

Soubory jsem uložil ve formátu Open XML (Excel 2007) a ODF (OpenOffice Calc 2.2).

Velikost souborů s daty

Velikost souboru Open XML je 1 641 200 bajtů, velikost souboru ODF je 1 049 308 bajtů. Rozdíl je způsoben mírou komprese a tím, že ODF obsahuje mnoho stejných dlouhých sekvencí (názvy elementů), které ZIP lépe komprimuje. Podstatně důležitější pro zpracování je dekomprimovaná velikost. To je to, co nám bude zabírat operační paměť.

Velikost

Open XML

ODF

Originální

1 641 200 bajtů

1 049 308 bajtů

Zabaleno stejnou aplikací

1 328 860 bajtů

1 156 127 bajtů

Po rozbalení

8 470 267 bajtů

22 150 015 bajtů

Soubory obsahující data tabulek

Z obou archivů jsem oddělil soubory, které obsahují data tabulky.

 

Proč je objem dat v Open XML cca třetinový?

1. Formát optimalizovaný pro ukládání velkého množství dat.

a. Často se opakující elementy mají jedno písmenné názvy. Čte je počítač, ne člověk.

b. Data se ukládají do různých souborů, co typ informace, to zvláštní soubor. Dalo by se to přirovnat k tabulkám v relačních databázích. Pracuji jen s daty, které potřebuji a nemusím manipulovat s ničím jiným.

c. ODF používá stejnou strukturu tabulek pro Calc i pro Writer, i když potřeby tabulek jsou jiné v textovém editoru a tabulkovém kalkulátoru.

2. Jednodušší XML. Paměťová struktura, pro uložení XML souboru bude jednodušší. Cesta k hodnotě buňky:

a. Open XML: /worksheet/sheetData/row/c/ v

b. ODF: /office:document-content/office:body/office:spreadsheet/table:table/table:table-row/table:table-cell/text:p

3. Texty uloženy v jiném souboru než číselná data.

a. U velkého množství scénářů, mě texty nezajímají, stačí číselné hodnoty.

b. Texty jsou sdílené pro všechny listy a zbytečně se neopakují.

Test_files.zip