OT poptavka programator ci firma

Slavomir Skopalik skopalik@elektlabs.cz
Středa Leden 19 19:09:45 CET 2005


Prepokladam, jako defaultni typ transakci je SNAPSHOT, pokud mate na
mysli
jiny, je treba to uvest.

> 2. Mate where s tim, ze jsou zde vsechny sloupce (kdyz si 
> nactu doklad a 
> ulozim, tak jej zmenim. Ostatni v prubehu transakce maji 
> smulu a zobrazi se 
> jim chyba, ze zaznam byl modifikovan jinym uzivatelem)

Tohle se nedela, tohle maji nektere tzv. engine (BDE napriklad) jako
moznost
volby, ale prakticky je to nepouzitelne.
Dale jsou DB pole, ktere proste nejde porovnat, pak je problem s NULL,
jelikoz nejde napsat  A=NULL, tohle je vzdy false.
U lozitejsich veci stejne pisete UPDATE a INSERT sam.

> 2 b To se ruzni od 2 jen v tom, ze se zde prida sloupec typu 
> timestamp Takto se to resi obecne, ale nejsou to zamky. Nevim 

lepsi je int a misto casu pouzit verzi, ale je to slozitejsi na
programovani,
ale bezpecnejsi. Problem timestamp je v  tom, ze muste davat pozor
na casova pasma a dusledne pouzivat UTC (posun o hodinu zpet
dela opravdy divy).
A je to pouze o pravdepodobnosti, nektere servery maji presnost pouze
na sekundy (unix ma cas pouze na sekundy).

> jak se to jmenuje u 
> ORAC.. a jake ma speciality.

Plete transakcni a aplikacni zamky.
Myslim, ze bychom se meli vratit na zacatek, tj. ujasnit si
jake transakce existuji, jak se chovaji, a jak ovlivni
chovani transakci architektura.

> 
> Nyni k veci a k moznosti portaci napr. uvedene zamky.
> 
> Reseni zamku:
> 1. Spoustite transakci a chcete provest aktualizace
> 2. Pokud nenaridite zamky a nedate cele ve spravnem poradi, 
> pak dochazi k 
> deadlock ci chybam jak ohlasenym ci skrytym tj. napr. blbe se nahodne 
> aktualizuje sklad.

Ah jo, deadlocku se NEVYHNETE, s tim musite pocitat.
Ale to jsme zase u transakci, ze ?
Prave ze transakni zamky jsou o DEADLOCKU, aplikacni o user defined
exceptions.
Napriklad na firebirdu pro transakci zamek pouzijete tohle:

Begin trans.  // snapshot !!
 update set id=id where ...  // Fake update, vytvoreni nove verze, ktera
NENI pristupna ostatnim transakcim
  // od teto chvile ostatni transakce pri zapisu bud selzou, nebo budou
cekat na roll back teto transakce podle nastaveni
  // priznaku

  zde si delate co chcete, i nekolik update, muzete mit zamcenych kolik
zaznamu chcete


  end trans (commit, nebo roll back podle potreby).

Variantu s aplikacnimy zamky zde rozvijet nebudu, zabere moc mista.


> 3. Cele to muzete osetrit u MS SQL treaba select s 
> hint(updlock), vlastne si 
> nekde udelate semafor jako kdyz tady programujete s procesory 

Tohle je transakcni zamek, jelikoz je MS SQL klasicka architektura,
tak to zpusobi velke potize (zvlaste u dlouhych transakci).
Nemam prime zkusenosti s MS SQL, ale kolegu vim, ze nektere verze
pak neumozni select nad temito daty.

> Jirka
> Jinak samozrejme, kde neni pozadavoan extra vykon, tak 
> sevyplati si data 
> stahnout na klienta. Ovsem ten kdo se naucil SQL, tak zjisti, 

Omyl, pokud pozadujete vykon, tak je treba praci rozdelit.
Napriklad ciselniky, filtrovani, trideni je mnohem rychlejsi
na klientovi (nebo aplikacnim serveru).

Napriklad dotaz
SELECT count(*), firma FROM pohledavky GROUP BY firma.

A na klientovi si chcete na klik tridit, jak to udelate, budete posilat
neustale select, ktery bude prohledavat 1 GB dat, nebo setridite
tech 200 000 zaznamu na kientovi (asi tak 0.2 sec) ?

A kdyz uz jsme u te rychlosti SQL:
http://www.dbsvet.cz/search.php?rsvelikost=uvod&rstext=all-phpRS-all&rst
ema=47&stromhlmenu=47

	Slavek





Další informace o konferenci Hw-list