[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