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.
Posted
by
En is szeretem a JSON-t, itt egy kis snippet (mar nem tudom hol talaltam), ami kicsit segit az olvashatosaganak noveleseben:
Utana pl. igy hasznalhato:
...es eredmenykent szepen formazott JSON-t kapunk az egy sorba hanyt valami helyett.
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.