Tema: Re: Need nuomonės iš šono - DB
Autorius: Baterijus
Data: 2011-12-08 10:34:24
Iškart pasakau, kad su MySQL nedirbu, tai galiu nugrybaut.
Ant MSSQL yra toks hint'as READPAST - selectas nemato užlockintų įrašų. Tai 
turėtų sueit toks variantas maždaug:
Select from lentele with (readpast rowlock holdlock)...
delete from lentele with (rowlock)
ar kažkas tokio. Žodžiu, pasidomėk ar su Innodb nėra panašių galimybių.

Kitas variantas, kurį pats naudoju, tai pirmiausia updatinu įrašą ir 
pažymiu, kad jis užrakintas.  Tada kiti selectai jo nepaima, viskas veikia 
su rowlock ir pakankamai gerai performina.

"NicMC"  wrote in message news:jbnf9n$bon$1@trimpas.omnitel.net...

Sveiki,

Yra centrinis DB serveris, yra Ndešimt klientų. Susijungimus klientai
laiko atidarytus. Kiekvienas klientas lockina teiblą, selectina vieną
įrašą, ištrina, unlockina. Apdoroja (kelios sekundės) ir rezultatą
insertina į kitą teiblą.
Visa tai pakurta ant MySQL, storage - MyISAM, indeksas tik ant primary
key (nėra ten ką indexuot, FIFO ir basta).
Problema - nuo ~150000 įrašų lentoje bendras sistemos našumas juntamai
pradeda mažėti.

Labai welcome bet kokios nuomonės kaip ir ką geriau tvarkyti. Kol kas
variantai - hardware upgrade / kita DBMS / tik vienas klientas į DB,
kuris pats QUEUE managementą darytų. O gal tiesiog InnoDB vietoj MyISAM
ir transakcijas naudot?

Užduotis elementari - vieni softai per vieną galą grūda į DB įrašus,
kiti softai per kitą galą juos valgo. Esminis momentas - reikalinga
garantija, kad nei vienas valgantis klientas negaus įrašo, kurį ką tik
gavo kitas klientas.

Taip, suprantu, ne DB darbas čia. Tiesiog softas maitinantis įrašais -
nepajudinamas, max galima ODBC kitą pakišti.