Fixture tárolása JSON-ban és YAML-ben

A tegnapi nap tanulsága: ha sok adatod van, YAML helyet tárold JSON-ban, de legalábbis a libyaml-ot telepítsd fel.

Alapvetően kezdjük ott, hogy ha az YAML formátumban tárolt adatkupacod (legyen mondjuk egy django-s fixture) betöltése a loaddata karbantartó parancson át kivárhatatlanul sokáig tart, míg szemben vele ugyanaz az adat JSON-ban pillanatok alatt töltődik be, érdemes megjegyezned, hogy a pip install pyyaml előtt a libyaml függvénytárat telepítsd az operációs rendszerre.

Légy bátor, vedd fel ezt a követelményt a projektedbe tesztesetként.

# python check_requirements.py -v
Trying:
    import yaml
Expecting nothing
ok
Trying:
    print yaml.__with_libyaml__
Expecting:
    True
ok
1 items passed all tests:
   2 tests in __main__
2 tests in 1 items.
2 passed and 0 failed.
Test passed.

Tudniillik a PyYAML a C-s függvénytár hiányában egy Python alapú implementációt használ, ami szőrnyen lassú persze.

Nézd, ilyen lassú (másodpercben):

# python pyyaml_test.py
202.24127984

libyaml-lel nem annyira lassú:

# python libyaml_test.py
36.110252142

A betöltés lassúságát vizsgálva botlottam egy a Stack Overflow-n feltett kérdésbe. Noha ott az objektum sorosításról szólnak, az érdemi hangsúly a két nyelv specifikációjának komplexitásbeli eltérésén van. Megmondom őszintén, önjelölt JavaScript kalózként imádom a JSON-t, de valljuk meg, becsületes ember nem tárol adatot benne, ha azt olvasni vagy módosítani is akarja. Közvetítésre persze kiváló. Egy fixture esetén ez elég is lehet.

A JSON ilyen gyors:

# python json_test.py
0.47447514534

A teljesség kedvéért: a méréseknél használt fixture 35753 objektumot tartalmazott, a fájl mérete durván 10 MB.

02jún.

2 Comment for Fixture tárolása JSON-ban és YAML-ben

  1. RePa says:

    En is szeretem a JSON-t, itt egy kis snippet (mar nem tudom hol talaltam), ami kicsit segit az olvashatosaganak noveleseben:

    alias jsonpp='python -mjson.tool'

    Utana pl. igy hasznalhato:

    $ curl "http://www.google.com/calendar/feeds/developer-calendar@google.com/public/full?alt=json&orderby=starttime&max-results=15&singleevents=true&sortorder=ascending&futureevents=true" | jsonpp

    ...es eredmenykent szepen formazott JSON-t kapunk az egy sorba hanyt valami helyett.

    • slink says:

      Sorbehúzások segíthetnek, egy tisztességes editor pedig még színkiemeléssel stb. is javíthatja az olvashatóságot, de azért közel sem olyan egy JSON-t kézzel szerkeszteni, mint egy YAML forrásban matatni.

Szólj hozzá