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

Martin Stiborský martin.stiborsky na gmail.com
Sobota Červen 18 23:13:37 CEST 2011


Ahoj,
mám takovou situaci, kdy parsuju různý obsah z webu a ukládám si ho do databáze.
Problém je, že potřebuji kontrolovat jestli jsou data u mě aktuální
oproti těm na netu, pokud ne, tak je updatovat.
Nápad jsem měl takový, že parser otevře stránku, vyzobe data která
chci, ty se hned sypou do objektů modelu (django) a vkládají do
seznamu, spočítal bych si hash tohoto seznamu (built-in hash()), hash
si někam poznačil a uložil data. Při dalším checku (bude se opakovat
co 2 hodiny) se stránka znovu zparsuje, znovu se data nacpu do seznamu
a spočítá se hash, pokud bude jiný, updatuje se, pokud ne, data se
zahodí a jedeme dál. Což asi moc fungovat nebude, viz dále...

Moc se mi nelíbí, že při každém průchodu se bude znovu parsovat, ale
není to naštěstí nijak složité nebo náročné. Parsovat bych možná ani
nemusel, mohl bych spočítat hash komplet celé stránky, ale myslím si,
že se tam spíš změní něco jiného, než to po čem jdu a to by dělalo
bordel a další zbytečnou práci s updatováním dat, která se ani
nemusela změnit, proto bych raději hlídal checksum rovnou dat po
kterých jdu.

Dále, je na toto vhodná interní hash() funkce? Nejsem si v tomto úplně
jistý, nic takového jsem ještě neřešil. Co jsem tak zkoušel, tak hash
dvou instancí stejné třídy je vždycky jiný, nevím podle čeho přesně se
ten hash počítá, ale já asi budu muset udělat hash z kompletního
"textu" který ze stránky vytáhnu, což se mi trochu komplikuje, protože
na jednu parsovanou stránku vytáhnu třeba 15 různých "objektů" které
se pak uloží jako záznamy v databázi, tak nevím jestli je dobré z nich
nasekat jeden velký string...

Napadá vás jiný/lepší způsob?

Děkuji mnohokrát za rady.


-- 
S pozdravem
Martin Stiborský

Jabber: stibi na njs.netlab.cz


Další informace o konferenci Python