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

2011-06-22 Tema obsahu Vladimir Macek
On 20.6.2011 16:33, Jirka Vejrazka wrote:
 Proč řeším cache? No proč ne? Proč bych se měl pokaždé při požadavku
 na meničko ptát databáze, když to jednoduše šoupnu do memcache a data
 se naservírují od tam. To považuju za správný postup i kdyby to mělo
 používat jenom 10 lidí.
   Treba proto, ze ta databaze ma pochopitelne taky cache a je to bez
 prace? Pri 10 uzivatelich budes mit vic prace s udrzovanim cache nez
 za kolik to stoji. Ale jak jsem uz napsal, je to tvoje hracka ;-)

   Jirka

Martine, ver Jirkovi.

Kdyz budes optimalizovat az ve chvili, kdy to skutecne budes potrebovat,
usetris si boleni hlavy a nam cas. :)

Pises, ze to chces udelat spravne. Podle meho spravne znamena jak
nejjednoduseji to jde. A kesovani je vzdycky komplikace.

Tu evidentne zatim nepotrebujes. A vsichni vime, ze Python je na agilni
zpusob vyvoje jako stvoreny.

-- 
:  Vladimir Macek  :  http://macek.sandbox.cz  :  +420 608 978 164
:  UNIX  Dev || Training  :  Python, Django  :  GPG key 1F059424

___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


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

2011-06-20 Tema obsahu Petr Přikryl

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...@...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 :)
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


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

2011-06-20 Tema obsahu azurIt

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?


Naco ale dookola prepisovat uz existujuce zaznamy ? Nemyslim si, ze jedalne 
listky sa menia nejako extra casto, skor sa raz vytvoria a mozno raz za pol 
roka sa v nich nieco upravi.

Mimochodom, vytvaranie hashov by som zrejme naviazal ako trigger pri 
insert/update:
http://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_md5



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...@...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 :)
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


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

2011-06-20 Tema obsahu Jirka Vejrazka
Ono hodne zalezi na tom, co Martin myslel tim parsuju ruzny obsah z
webu. Pokud by to znamenalo stahovani jidelnich listku z nejakeho
seznamu URL, tak by stalo za zamysleni pouzit standardnich mechanizmu
HTTP, konkretne hlavicky If-modified-since. Pak by stacilo zjistit,
jestli server pro danou stranku vraci 304 (stranka nezmenena) nebo 200
(novy obsah).

Ale tohle opravdu zavisi na tom, co je na druhe strane.

   Jirka
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


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

2011-06-20 Tema obsahu Martin Stiborský
Ahoj,
díky za moc zajímavé myšlenky.
K tomu co parsuju, jde o jídelníčky denní menu různých restaurací.
Každá restaurace publikuje denní obědové menu jinak, někteří v
neděli/pondělí vyvěsí kompletní menu pro celý týden, někteří jen pro
následující den, je to různé. Ať už to dělá každý jinak, vždycky můžou
menu pro následující/kterýkoli den změnit, což je pro mě problém,
pokud jsem si k sobě už uložil starou verzi, proto chci peridicky
kontrolovat jaký je stav.

Pro každou restauraci mám samostatný modul, kde je link na jídelníček
a metoda která umí z html vytahat data, která mě zajímají ( a další
obslužné metody).
Každé jídlo se uloží do objektu databázového modelu (je to celé
postavené na djangu) a zatím mám zapracovanou myšlenku hashe, tedy
onen objekt má popis jídla, cenu, gramáž, atd. Z tohoto se vytvoří
hash který se tam taky uloží. Při dalším checku se opět zparsuje, opět
se nasekají objekty a spočítají hashe, ale jestli se bude ten jeden
aktuální objekt updatovat nebo ne závisí na tom, jestli se hash změnil
nebo ne. Pokud je popis jídla, cena, nebo cokoli jiné, bude i hash
jiný a objekt se přepíše.

Na HTTP hlavičky jsem nepomyslel a je to dobrý nápad, díky za to,
vyzkouším, rozhodně se mi to líbí.

Chci do databáze zapisovat co nejmíň, celé to běží na Google App
engine, jsou tam různé kvóty na čtení/zápis z databáze a i když
nečekám nějaký obrovský provoz, chci to napsat slušně :)



-- 
S pozdravem
Martin Stiborský

Jabber: st...@njs.netlab.cz
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


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

2011-06-20 Tema obsahu Martin Stiborský
Jo, pravda je, že když už ty data mám zparsované a nachystané, tak by
bylo nejjednodušší je i zapsat.
Nemám vůbec odhad jak to bude náročné na procesorový čas, každopádně,
když se mi každé dvě hodiny (nebo jakýkoli jiný nastavený interval)
přepíše vlastně komplet celá databáze, budu muset promazat i cache, to
bude taky něco stát...

2011/6/20 Jirka Vejrazka jirka.vejra...@gmail.com:
 Ja sice chapu, ze chces vyrobit slusnou aplikaci, ale pokud tech
 jidelnicku budou desitky az stovky, tak bych nejakou optimarlizaci
 zapisovani do databaze vubec neresil. Rekl bych, ze zjisteni jestli
 ten zapis usetrit nebo ne bude drazsi nez zapis sam.

  Jirka

 Premature optimization is the root of all evil  :)
 ___
 Python mailing list
 Python@py.cz
 http://www.py.cz/mailman/listinfo/python




-- 
S pozdravem
Martin Stiborský

Jabber: st...@njs.netlab.cz
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


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

2011-06-20 Tema obsahu Jirka Vejrazka
 Nemám vůbec odhad jak to bude náročné na procesorový čas, každopádně,
 když se mi každé dvě hodiny (nebo jakýkoli jiný nastavený interval)
 přepíše vlastně komplet celá databáze, budu muset promazat i cache, to
 bude taky něco stát...

  Update kazde dve hodiny? To ridis raketovy provoz? ;-)

  Ale vazne - netusim, jak a pro koho tu aplikaci pises, ale kdyby mi
nekdo stahoval jidelni listek kazde dve hodiny, tak zacnu premyslet
nad blokovanim daneho stroje. Jednou za den bych to pochopil.

   Pokud resis optimalizaci, tak pri takovehle frekvenci stahovani
nebude problem zapis do databaze, ale prenesena data.

  Jirka
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


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

2011-06-20 Tema obsahu azurIt

  Ale vazne - netusim, jak a pro koho tu aplikaci pises, ale kdyby mi
nekdo stahoval jidelni listek kazde dve hodiny, tak zacnu premyslet
nad blokovanim daneho stroje. Jednou za den bych to pochopil.

   Pokud resis optimalizaci, tak pri takovehle frekvenci stahovani
nebude problem zapis do databaze, ale prenesena data.


12 pristupov na web za den za ti zda vela ? A traffic urcite nebude problem, 
ved to bude maximalne par MB denne.



  Jirka
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


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

2011-06-20 Tema obsahu Jirka Vejrazka
 Proč řeším cache? No proč ne? Proč bych se měl pokaždé při požadavku
 na meničko ptát databáze, když to jednoduše šoupnu do memcache a data
 se naservírují od tam. To považuju za správný postup i kdyby to mělo
 používat jenom 10 lidí.

  Treba proto, ze ta databaze ma pochopitelne taky cache a je to bez
prace? Pri 10 uzivatelich budes mit vic prace s udrzovanim cache nez
za kolik to stoji. Ale jak jsem uz napsal, je to tvoje hracka ;-)

  Jirka
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


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

2011-06-19 Tema obsahu martin.stibor...@gmail.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 :)

___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


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

2011-06-19 Tema obsahu azurIt

Myslim, ze na dane ucely je uplne jedno, aku hashovaciu funkciu pouzije. Skor 
by som odporucal co najjednoduchsiu (tzn. najnenarocnejsiu), ved prinajhorsom 
sa stane, ze sa updatuje nieco, co sa updatovat nemuselo.

azur


__
 Od: Jirka Vejrazka jirka.vejra...@gmail.com
 Komu: Konference PyCZ python@py.cz
 Dátum: 19.06.2011 12:11
 Predmet: Re: [python]hash objektu, kontrola aktuálnosti dat v databázi

Ahoj,

  interni funkce hash() moc vhodna neni, mrkni se na funkce sha1()
nebo md5() z modulu hashlib.

  Jirka
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


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

2011-06-19 Tema obsahu Jakub Zíka
Naopak, muze se stat, ze se neupdatuje neco, co by se updatovat melo,
pokud budou mit dvoje ruzna data stejny hash. Tomu se kryptograficke
hashe snazi predejit, ale neni to cilem jednoduchych hashovacich
funkci. Obecne se doporucuje po kontrole hashe jeste zkontrolovat,
jestli jsou data opravdu stejna - porovnani hashe nam tedy rekne bud
to, ze retezece urcite nejsou stejne (potom usetrime), nebo to, ze
retezce mozna jsou stejne, ale jeste je treba je zkontrolovat.

Myslim si, ze v diskutovanem pripade se pouziti hashu nehodi -
vzhledem k tomu, ze je k vytvoreni hashe treba vzdy projit vsechna
data, bylo by pravdepodobneji vyhodnejsi porovnavat stara a nova data
primo bez vytvareni hashu.

k21

2011/6/19 azurIt azu...@pobox.sk:

 Myslim, ze na dane ucely je uplne jedno, aku hashovaciu funkciu pouzije. Skor 
 by som odporucal co najjednoduchsiu (tzn. najnenarocnejsiu), ved prinajhorsom 
 sa stane, ze sa updatuje nieco, co sa updatovat nemuselo.

 azur


 __
 Od: Jirka Vejrazka jirka.vejra...@gmail.com
 Komu: Konference PyCZ python@py.cz
 Dátum: 19.06.2011 12:11
 Predmet: Re: [python]hash objektu, kontrola aktuálnosti dat v databázi

Ahoj,

  interni funkce hash() moc vhodna neni, mrkni se na funkce sha1()
nebo md5() z modulu hashlib.

  Jirka
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

 ___
 Python mailing list
 Python@py.cz
 http://www.py.cz/mailman/listinfo/python

___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python