TechEd Europe

Optimalizace uložení dat v Open XML

  • Comments 2

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.

Open XML

ODF

sheet1.xml

6 874 574 bajtů

content.xml

22 118 811 bajtů

sharedStrings.xml

1 567 580 bajtů

 

 

Celkem

8 442 154 bajtů

 

22 118 811 bajtů

 

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í.

Attachment: Test_files.zip
  • Nuz neda mi zareagovat, pretoze autor asi tak celkom nepochopil podstatu xml, xml format by mal byt citatelny aj clovekom, preto ODF pouziva popisy, ktore nieco hovoria a teda vo vysledku je vatsi.

    Preco to tak je? Zoberme si dobu o 30 rokov. Software bude uplne niekde inde a my sa budeme potrebovat dostat k datam, ktore robil nas dedko v exceli a vyexportoval to v Open XML. Budeme vediet z jednopismenovych popiskov dostat strukturu dokumentu?

    Tolko k bodu 1.a

    k 1.c ano ODF pouziva jednotny format pre spreadsheet a text reprezentaciu, co je podla mna vyhoda, nemyslite? do spreadsheetu tak mozem dostat data s textoveho editora, ktore budu rovnako reprezentovane

    k 2. XML je parsrovane do binarneho stromu, nenakopiruje sa jeho textova podoba do pamati, cize povodna velkost xml suboru nehovori o velkosti, ktoru zaberie v pamati

    Bohuzial aj ked to vyzera, ze som zastanca tej druhej (rozumej zlej open-source) strany. Nie je to tak, som windows programator a vzdy budem, bohuzial ma trapy, ze microsoft previedol binarnu podobu svojho formatu do xml reprezentacie so vsetkym balastom, ktory sa na tuto implementaciu bali od zaciatku office balikov od verzie works 1.0.

  • Pri dnešnom tradičnom rannom prechádzani bookmarkov mi zrak padol na článok Optimalizace uložení dat

Page 1 of 1 (2 items)
Leave a Comment
  • Please add 6 and 7 and type the answer here:
  • Post