[python] db a thready

Petr Kolesa kolisko na matfyz.cz
Pátek Duben 1 10:04:00 CEST 2005


Pokud to chapu zpravne, bude ta DB lokalni tomu ip serveru. Mozna 
dokonce i v tom samem address space. Potom mi prijde nejjednodussi 
napsat tridu, vyhradne pres kterou se bude pristupovat k DB a tu tridu 
udelat singelton. Threadsafe zarucite na urovni tohoto singeltona. Bude 
to asi pomalejsi, nez kdyby to delala sama DB, teda pokud ten sigelton 
nejak sofistikovane nepoladite.

Jine reseni je, ze pokud pri zapisu nemuze vzniknout nejaky zasadni 
problem, muze server pracovat davkove, tj. prevzit pozadavek od klienta 
a pak data v klidu ulozit do DB, az bude mit cas. Cteni bude stejne asi 
blokovaci (jen se muzete rozhodnout, zda bude vyrizeno prednostne pred 
cekajicimi zapisy nebo pocka, az se zapisou vsechny cekajici data).

Nicmene nez bych se do neceho takoveho poustel, zkusil bych, jak 
skutecne klienty zpomaluje, ze server muze obslouzit jen jednoho klienta.

Co se tyce vice vlaken v DB, nepropadal bych zbytecnemu optimizmu. 
Nevim, jak zamyka MySQL, ale docela casto DB zamykaji na urovni tabulek. 
Specialne pokud mate castejsi zapis nez cteni, budou thready cekat, az 
to ten slimak pred nima dodela a tabulku jim uvolni. Navic ono ani 
takovy zamykani neni uplne zadarmo, takze pokud zapisujete mala data, 
muze rezie vice vlaken delat bez problemu i 90% casu.

Pokud budete pouzivat vice vlaken, stejne budete muset resit problem s 
jejich nedostatkem. DB typicky mivaji omezeni na pocet soucasne 
otevrenych konekci (treba 20), takze klienti budou cekat nejen v DB 
konekci az budou moct zapsat, ale taky na to az bude nejaka DB konekce 
volna.

Ale abych nebyl tak pesimisticky: tohle plati obecne, treba existuje 
nejaka DB, ktera muze mit tisice vlaken, zamyka na urovni radek a rezije 
zamykani je mala. Dal je samozrejmne mozne vyladit DB schema a DB tak, 
aby co nejvetsi mnozstvi threadu mohlo najednou zapisovat. Ale bude 
rychlostni prinos tak velky, aby se vratilo vynalozene usili?

kolisko

gsl na seznam.cz napsal(a):
> < ahoj,
> < 
> < no mozes pouzit MySQL + modul mysql-python, je to thread safe. inak, 
> < preco to chces rjesit cez thready ? podla mna to nje je nutne, 
> < python ma rozne funkcie na robenje bez threadoveho servra (dookola 
> < sa zaradom kontroluju sockety, ak su v nejakom z nich data, zoberu 
> < sa a pokracuje sa dalej...).
> < 
> < azurIt
> 
> Rad bych, aby klienti komunikovali soubezne a thready mi prijdou jednodussi.
> Nechci aby jeden klient zablokoval ty ostatni, radsi at se lehce zpomali 
> odezvy vsech. K velky databazi bych nejradsi sahal az jako k posledni
> moznosti, protoze se musi instalovat zvlast, ma slozitou administraci a ten 
> server bude dost mobilni, a muze se vyskytovat na ruznych pocitacich podle
> potreby a to u lidi, kteri pojem databaze vnimaji jako neco zahadeho a magickeho. 
> Ale je to prinejhorsim cesta, jestli nebude mit nekdo jeste lepsi napad, diky.
> 
> Petr Mach




Další informace o konferenci Python