OT poptavka programator ci firma

jirka7a@seznam.cz jirka7a@seznam.cz
Čtvrtek Leden 20 01:12:54 CET 2005


Ach jo, zase musim reagovat. Nejvice me dostal bod na konci.

>Prepokladam, jako defaultni typ transakci je SNAPSHOT, pokud mate na
>mysli
>jiny, je treba to uvest.
Presneji je to tzv. ISOLATION LEVEL, kterym ridite nejen chovani transakci, 
ale i zamku, proste rizeni pristupu. SNAPSHOT je specialita te ISOLATION 
LEVEL Firebirdu.

>> 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.
Tuhle vlastnost ma kompletni vyvoj na Micorosft tj ADO ci PoweBuilder jako 
klient. Je to obecny pripad jak delat update do databaze. U MS je to 
adCriteriaKey, treba zde http://support.microsoft.com/?id=192716
Jinak to je obecny vzdy aplikace nejakym zpusobem musi zapsat do databaze. 
Jedna se o to jak tedy zapise tj. s jakou podminkou neboli ktery radek 
upravi.

>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.
Ja jsem to v emailu rozdelil do rizeni kolizi tim jsem myslel ukladani 
zaznamu a pote zamky SQL.

Zadne aplikacni zamky neexistuji, to je iluze !! Jestlize neco chcete 
zamknout, tak to musite dat vsem vedet tj. provest na serveru ci nejakou 
jinou serverovou sluzbou. Na svem vlastnim pisecku tj. na konkretnim 
pocitaci v siti nic nezamknete. Prirovnal jsem to k signalum pri praci v 
threadu.


>> 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).

NEVIM PROC ODPORUJETE, VZDYT V TE CASTI SAM RIDITE PORADI ZAMKU, ABY NEDOSLO 
K DEADLOCK, PRESNE JAK PISI.



>> 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.

To je nesmysl. Timto jak pisete udelate zamek, sam to pisete:
> update set id=id where ...  // Fake update, vytvoreni nove verze, ktera
Stejne je to u MS. Jen u MS ten zamek muzete:
- naridit rovnou v SELECT, aby jste nemusel delat update,
- dale jsou zde hinty na to co ma SQL zamknout tj. zda radek, stranku ci 
celou tabulku.
To je cele rizeni zamku, ktere FIREBIRD nejspise nema. Pri slozitejsi praci 
je vykonejsi zamknout celou tabulku nez nechat zamykat jednotlive radky.


>> 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).
>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) ?

TAK TOHLE SNAD NEMYSLITE VAZNE ????

K VAM ASI NEDORAZIL prikaz nacti prvnich n zaznamu ???
select top 10.. select first 10 ... To je pro velke data a snizeni provozu v 
siti. U nas v aplikaci netahama na klienta data, kdyz nejsou nutne. Proc 
tahat i jednou 200 000 zaznamu, kdyz staci treba 10 nebo 100 ?

>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

Jirka 




Další informace o konferenci Hw-list