[python] hash objektu, kontrola aktuálnosti dat v databázi

Petr Přikryl prikryl na atlas.cz
Pondělí Červen 20 10:29:34 CEST 2011


Interní hash(x) jen volá metodu příslušného objektu x.__hash__() a jednou
z jejích priorit je nalezení místa v dict(). Ale v dict() se s konflikty musí celkem
počítat, takže kvůli rychlosti nebude moc spolehlivá.  Přidávám se k Jirkovi
Vejražkovi a k jeho doporučení standardního modulu hashlib.

Problém je ale jinde. Hash (kvalitní varianta) je jen velké číslo, které mi pomůže 
odhalit, že je něco stejné. Pokud ale buduji databázi ze stránek obsahujících
jídelníček, pak mi jednotlivých záznamů není celkem k ničemu. Stejně musím
zjistit datum, restauraci... Netvoříš přece databázi, ve které je hash klíčem.
Potřebuješ hledat podle více klíčů.

Hash celé stránky nebo její významné části by mohl pomoci odhalit, jestli
se stránka změnila (pokud to nejde zjistit rozumnějším způsobem). Pokud
tam změna není, nemusím dělat nic. Pokud tam změna je, musím stejně
rozlézt všechny záznamy a porovnat je s databází podle klíčů.

Pokud budu mít nový potenciální objekt databáze (obalený záznam), který má stejný
hash jako existující objekt databáze, nedělám nic. Pokud má jiný hash, 
musím ho stejně vložit. Proč bych měl pracně zjišťovat, jestli tam takový
objekt zatím není a teprve pak ho vkládat? Jednodušší je ho tam prostě 
vložit (nahradit případně už existující). Nebo mi nějaká část myšlenky utekla?

Mrkni na možnost zjistit položku HTTP hlavičky Last-Modified
http://diveintopython3.py.cz/http-web-services.html#last-modified


Petr

______________________________________________________________
> Od: "martin... na ...il.com
>
>Stačilo se na to trochu vyspat a už asi vím, jak to provedu.
>Ale i tak, budu opravdu vděčný za každou připomínku.
>
>Aby byl jasný kontext, jedná se o parsování obědových meniček z
>různých restaurací, sbírám tyhle data, abych k nim pak měl přístup z
>aplikace na Androidu.
>Každé jedno jídlo je uloženo v databázi ve vlastním záznamu, je u něj
>odkaz na restauraci ke které patří, pro jaký den, cena, případně
>gramáž, atd. Z těchto jednotlivých dat můžu jednoduše udělat jeden
>string a z něho udělat hash a poznačit rovnou do záznamu toho
>konkrétního jídla.
>Když příjde "kontrola dat", znovu se každé jídlo zparsuje, vyrobí se
>objekt databázového modelu a když je hotovo, tak si k nim vytáhnu už
>existující data z databáze a porovnám hashe, ty které se změnili
>nechám být, změněné updatuju, ty co jsou tam navíc vymažu. Nic lepšího
>mě nenapadlo :)


Další informace o konferenci Python