OT poptavka programator ci firma

Slavomir Skopalik skopalik@elektlabs.cz
Čtvrtek Leden 20 03:31:21 CET 2005


> Zamek je implementovan jako priznak, semafor. Pokud chcete 
> implementovat 
> zamky, tak jej doopravdy musite implementovat nejakou 
> sdilenou sluzbou tj. 
> serverovou sluzbu a ne v na lokalnim pc.

No spise, jinak, problem, je, ze je treba ridit kontrolu ruznych
aplikaci
v dlouhem case, tam zamky nelze efektivne pouzit.
Proto to resim trigry v DB (vetsinou).
Stavove rizeni se mi velmi osvedcilo prave pri vytvareni zakazu editace,
jelikoz tak jiny uzivatel dopredu vi, ze zaznam je uzamcen.

> Ano, pri stisku klavesy je zde timeout a pokud uzivatel nic 
> dale nestiskne, 
> vse se da doopravdy jen u velmi omezenych tabulek.. Navic 
> kdyz ta tabulka ma 
> malo radku, tak zase to vubec SQL nezdrzi.

Ono je totiz rozdil dotaz a dotaz :)).
Pokud je tam nekolik SUM, GROUP BY, nebo statistickych vypoctu
(potkava me to nejak casto), tak to da proste zabrat.

Dale vyuzivam toho, ze mam cache na ciselniky, kdy
se dotahuji jen ty zaznamy, ktere jsou treba, ale jen jednou.
Omezuje to vyrazne trafic na siti a zaroven zrychluje vyslednou odezvu.

Kousek kodu lepsi, nez tisic slov:

function TCustomMasaDB.FindShiftType(const id: integer): TShiftType;
var i:integer; p:TShiftType;
begin
  for i:=0to FShiftTypeList.Count-1 do begin
    p:=TShiftType(FShiftTypeList[i]);
    if p.id=id then begin
      if i>0then FShiftTypeList.Move(i,0);
      result:=p;
      exit;
    end;
  end;
  result:=nil;
  try
    with Fq1 do begin
      SQL.Text:='SELECT idPrior, idNext, tDate, text FROM ShiftTypes
WHERE id=:id';
      ParamByName('id').AsInteger:=id;
      ExecQuery;
      if Eof then exit;
      result:=TShiftType.Create;
      result.id:=id;
      result.idPrior:=FieldByName('idPrior').Value;
      result.idNext:=FieldByName('idNext').Value;
      result.text:=FieldByName('text').AsString;
    end;
    FShiftTypeList.Add(result);
  finally
    Fq1.Close;
  end;
end;

> 
> Hlavni vyhodou tohodle reseni je, ze se netahaji data po 
> siti, coz zdrzuje. 

Souhlas v pripade, ze je opravdu nepotrebujete.
Jestli delate v delphi, tak jiste znate ClientDataSet, to je takova
memory table, ktera umi prave i tridit a fitrovat a to velmi rychle.
Tim si data nactu jen jednou a pak je klid, jelikoz ani po siti nic
nestahuji.

> Na vykon toho MS SQL to nema vliv. Nejvetsi otazkou je 
> sdileni dat, kde 
> musite resit kolizni stavy zamku. Nedokazi si predstavit, ze 
> by zamek byl 
> pouze na celou tabulku. Asi bych tomu musel hodne uhnout logiku.

Nezamykam, MGA vyzaduje jine mysleni, MS bude v nove verzi,
jen nevim v ktere taky MGA (tohle nemam potvrzeno).
V MGA kazdy update vytvori novy radek, kazdy radek ma svoji verzi
a pri selectu se kontroluje, zda je radek videt, nebo ne.
Ma to obrovske vyhody pri soucasnem pristupu vice uzivatelu
k jedne tabulce, ale zaroven problemy s odstranovanim neplatnych verzi.
Verze = poradove cislo transakce.

Takze muze klidne bezet mnoho snapshot transakci, jelikoz selecty
nejsou nikdy blokovany, problem muze nastat pouze pri kolizi zapisu
a to se stava vyjimecne, ale musi se s tim pocitat.

> 
> Jenom z uvedeno je zrejme cim dal vice , ze universalni 
> portace je hodnel 
> pracna - draha. Jak se nekdo ptal na Linux a dalsi ma 
> predstavu, ze to 
> spusti libovolne na jakemkoliv SQL, ..., tak to doopravdy nejde.

Souhlas.

	Slavek




Další informace o konferenci Hw-list