Tema: Re: unikalus įrašo numeris
Autorius: Anon
Data: 2010-11-23 13:07:14
Ačiū dar kartą visiems, patarimus išklausiau, o dabar išbandysiu savo 
variantą, jei nepasiseks - pakeisiu pagal tuos patarimus :) Aišku, 
užlokinimas ilgam laikui negerai, bet kiek žinau, jei Delphi daromi 
CachedUpdates ir lentos lockinimas optimistic, užlokinama tik įrašant 
galutinius duomenis metodu ApplyUpdates, kas mažai laiko užima, o įrašus 
vartotojai darys maždaug kas pusvalandį. Bandysiu :)

Vytautas

"Anon"  wrote in message news:icg4fk$qi6$1@trimpas.omnitel.net...

Ačiū už detalų paaiškinimą, šiuo metu visi rašymo veiksmai ir yra vienoje
tranzakcijoje. Tačiau įrašai pagr. lentelėje niekada nebus trinami(tik
galima atžymėti įrašą kaip negaliojantį), visi bus kopinami į backupą, metų
gale lentelės backupinamos, išvalomos ir vėl iš pradžių :). Dėl numeravimo
iš eilės gal ne taip svarbu, kokia bus eilė, ar bus praleistų numerių,
svarbu įrašo numerio unikalumas. O pagal mano siūlytą veiksmų tvarką
vartotojas pirma turi papildyti įrašą(padidinti įrašą vienetuku), po to
pasiimti, tuo metu numerio lentelė lockinta, kitas vartotojas negalės tuo
metu į ją rašyti, o tuo pačiu ir pasiimti to paties numeriuko. Lyg ir
nematau logikos klaidų, gal kas mato ?

Vytautas


"2x50"  wrote in message news:icg1i6$ls3$1@trimpas.omnitel.net...

Sveiki,

as kaip duombazistas tai galeciau tik patarti isnaudoti visas dbvs siulomas
galimybes. Jei dbvs turi transakciju valdymo mechanizma, tai reiketu ji ir
panaudoti. Jei aplikacijoj vartotojo atliktas veiksmas sukuria irasa 3jose
lentelese, tai visu siu irasu sukurimas turetu buti vienoje transakcijoje.
Be to, pirmiausiai irasas turi buti sukurtas master lentoj, o tik veliau
detail lentose, o ne atvikrsciai. Taip pat tos lentos turetu tureti PK ir FK
constraint'us.
Del numeravimo is eiles, tai siulau tai pamirsti ir daugiau neprisiminti,
ypac kai yra konkurentines transakcijos. Kodel?
2 paprasti klausimai.
Vartotojas V1 pradeda transakcija T1, jam priskiriamas numeriukas 1. Is
karto po jo varototjas V2 pradeda transakcija T2 (kol T1 dar nera
pasibaigus), kuriai priskiriamas numeris 2. Vartotojas V1 nutraukia
transakcija T1. Pirmas klausimas - ka daryti su numeriu 2 transakcijoj T2?
Antras klausimas - ka daryti su numeravimu "is eiles" lenteleje, kai is jos
irasas istrinamas?
Atsakius i siuos klausimus isvada turetu buti "jo, neverta terliotis"...
t.y. mano pasiulymas yra naudoti AutoIncrement (galima ir is savo lenteles,
ner skirtumo) ir visus irasus visose susijusiose lentelese daryti tos pacios
transakcijos metu...

"Anon" <anon@pisem.net> wrote in message
news:icfrf5$av0$1@trimpas.omnitel.net...
> Na, turiu dar vieną klausimą iš Delphi + MySQL :)  Į lentelę įterpinėja 
> įrašus apie 20 vartotojų, įrašams reikalinga suteikti unikalų numerį, 
> kurie didėtų iš eilės, nuosekliai. AutoIncrement tipas netinka - dirbama 
> per cached updates, lockingas optimistinis, numeris reikalingas įrašyti į 
> kitas 3 lenteles prieš užfiksuojant pagrindinėje, o AutoIncrement'as 
> suveikia tik po komandos ApplyUpdates. Žodžiu, ar veiktų toks metodas: 
> atskiroje lentelėje laikomas 1 įrašas su vienu numerio lauku(pradžioj Nr 
> yra 0) , kuriantis pagr. lentelėje įrašą vartotojas užlockina lentelę su 
> numerio lauku, padidina numerį vienetu, pasiima jį ir nuima lockinimą. Tą 
> patį daro ir kiti. O gal čia aš dviratį išradinėju? IŠ anksto ačiū 
> patarusiems.
>
> Vytautas