🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.comp.lang.csharp
Article #715

Re: Pytanie o prace z ADO.Net

#715
From: Maciej Łuszczyński
Date: Sun, 04 Apr 2004 11:47
92 lines
6338 bytes
>> A nie jest tak, ze kazde zapytanie przychodzace do SQL Servera jest
>> parsowane, a nastepnie tworzony jest plan wykonania zapytania, pod
>> warunkiem, ze nie jest to odwolanie do funkcji lub procedury? Czyzby
>> DataAdapter potrafil to obejsc? Chetnie dowiem sie czegos wiecej ww
>> temacie.
> Nie, chodziło mi to co się dzieje po stronie klienta. Np. zapytanie
> modyfikacji tabeli może być bezpośrednio wprowadzone w czasie tworzenia
> aplikacji do obiektu Command w DataAdapterze albo generowane dynamicznie
> przez SQLCommandBuilder. Ta druga metodę ma tą niedogodność, że musi odpytać
> bazę danych o strukturę tabeli aby móc takie zapytanie wygenerować.
Spory spadek wydajności IMO. Poza tym staram się stosować zasadę
ograniczonego zaufania i powtarzalnych wyników: do serwera powinno docierać
zawsze to samo. IMO.

> Jeśli chodzi o stronę serwera podobno można obejść proces prasowania
> zapytania.
Zdecydowanie można, ze względu na wydajność nawet należy :) Ale nie
parsowania, tylko układania planu wykonania zapytania.

> Po pierwsze serwery mogą posiadać własne API. Może to być metoda
> wydajniejsza ale na pewno nie łatwiejsza w używaniu.
To dylemat stary jak świat. Trzeba coś wybrać :)

> Po drugie procedury składowane. Podejrzewam, że ich użycie nie wiąże się z
> prasowaniem ich treść za każdym razem. Procedury składowane są preferowane
> do załatwiania updateing logic. Ale niestety zarówno AFAIK genertor zapytań
> zawarta w IDE jaki i SQLCommandBuilder nie pomogą w ich używaniu.
Zarówno procedury, jak i funkcje składowane to po prostu skompilowane plany
zapytania, przechowywane na serwerze. Wywołanie takiej procedury wymaga co
prawda sparsowania (choćby po to, by odczytać parametry, by była możliwość
przekazania wartości z procedury, itp.), ale nie wiąże się (ze zwykle dużo
kosztowniejszym) układaniem planu zapytania.

Nie używam SLQCommandBuildera, za to dość często procedur i funkcji
składowanych. Nie wiem, czy zależy to od wersji VS, ale w moim przypadku
wystarczy po prostu z eksploratora serwera przeciągnąć odpowiednią
procedurę do formatki, a IDE automatycznie stworzy odpowiedni obiekt wraz z
listą parametrów. Konieczne jest następnie przypisanie wartości wszystkim
parametrom (ja robię to ręcznie), ale zakładam, że można zmusić
SQLDataAdapter (nie używam go do aktualizacji) do odpowiedniego
wykorzystania procedury składowanej i automatycznego podstawienia wartości.

> Jest jeszcze wymierająca metoda Embeded SQL. Czyli SQL wpisany pomiędzy
> zwykły kod. Takie coś jest także kompilowane i zamieniane na wywołania
> funkcji serwera. Komunikacja z zapytaniami następuje przez specjalne
> współdzielone zmienne.
Tego nie znam. 

> Korzystając SQLCommandBuilder nie dosyć, że powoduje interpretacje kodu to
> także generacje tego zapytania. Generowanie zapytania może mięć jedną
> przewagę w przypadku updateing logic. Można spróbować nie modyfikować
> wszystkich pól. W przypadku optymistycznego module, może to oznacza, że nie
> napiszemy zmian dokonanych przez innych. Tak automagicznie działało ADO bez
> .NET . Ale na ADO.NET ta metoda jest strasznie kłopotliwa więc zwykle wysyła
> się wszystkie pola do modyfikacji. Za to rozwiązuje się te problemy szukają
> rekordu, który ma być zmodyfikowany uwzględniając wszystkie pola albo wersje
> rekordu.
Jakoś nie jestem przekonany, czy to taka zaleta - nadpisanie tylko części
pól. Włosy na karku mi się jeżą, jak myślę o takiej spójności.
Nie bardzo mi się podoba pomysł automagicznego wyszukiwania rekordu do
modyfikacji. Jestem za spójnym mechanizmem: PK i w oparciu o wartość tego
klucza wstawiamy bądź modyfikujemy.

Troszkę pozwolę sobie opowiedzieć, dlaczego wolę/wolimy procedury
składowane. Jest to ostatni bastion logiki aplikacji. Oczywiście, można
zrobić to samo na triggerach i ograniczeniach, ale procedury wydają się
łatwiejsze w pielęgnacji, debuggowaniu i kontroli. No i całkiem szybkie
przy zapisach dokumentów składających się z wielu linijek. Procedury
działają oczywiście w ramach transakcji, więc spójność danych jest
zachowywana.

Co do ryzyka napisania zmian wprowadzonych przez innego użytkownika: na
poziomie aplikacji, kiedy użytkownik wywołuje edycję, z serwera pobierana
jest ostatnia wersja rekordu. Dzięki temu minimalizujemy ryzyko dwukrotnego
wprowadzania tych samych zmian. 

Jeśli zachodzi konieczność wyłącznej edycji rekordu, stosujemy albo blokady
na poziomie aplikacji (oczywiście wtedy sprawdzane jest to w momencie
rozpoczęcia edycji, nieco trudniej kontrolować ten mechanizm w procedurach
składowanych (a w zasadzie wymaga to większej uwagi)) albo SELECT z
odpowiednimi parametrami.

Jeśli dobrze pamiętam bieg niniejszego wątku, początkowy problem dotyczył
aktualizacji i zapisu dużej liczby danych. IMO bezwzględnie najszybsze będą
w tym przypadku procedury składowane, najwygodniejsze, jeśli da się je
połączyć z SQLDataAdapterem (a powinno to być możliwe).

Pozdrawiam
-- 
Macko
*** A czym się różni Cray od normalnego peceta?
*** Tym, że Cray wykonuje pętle nieskończone w 10 sekund.
Technical Details
Message-ID: <13m18xqz59hap.yfr7ocm8d9rf$.dlg@40tude.net>
Path: mbox-mo1.pugleaf.net!archiver1.google.com!news1.google.com!news.glorb.com!nntp.idg.pl!newsfeed.gazeta.pl!news.gazeta.pl!not-for-mail
References: <c49ept$fbg$1@news.onet.pl> <c4h5rd$753$1@nemesis.news.tpi.pl> <c4jvdi$u99$1@news.atman.pl> <c3yeak2tpn37.atid4u2mtmu8$.dlg@40tude.net> <c4n8kf$bg0$2@news.atman.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!archiver1.google.com!news1.google.com!news.glorb.com!nntp.idg.pl!newsfeed.gazeta.pl!news.gazeta.pl!not-for-mail
From: Maciej Łuszczyński <mluszc...@gazeta.pl>
Newsgroups: alt.pl.comp.lang.csharp
Subject: Re: Pytanie o prace z ADO.Net
Date: Sun, 4 Apr 2004 13:47:58 +0200
Organization: Portal Gazeta.pl -> http://www.gazeta.pl
Lines: 92
Message-ID: <13m18xqz59hap.yfr7ocm8d9rf$.dlg@40tude.net>
References: <c49ept$fbg$1@news.onet.pl> <c4h5rd$753$1@nemesis.news.tpi.pl> <c4jvdi$u99$1@news.atman.pl> <c3yeak2tpn37.atid4u2mtmu8$.dlg@40tude.net> <c4n8kf$bg0$2@news.atman.pl>
Reply-To: mluszc...@gazeta.pl
NNTP-Posting-Host: 80.50.174.166
Mime-Version: 1.0
X-Trace: inews.gazeta.pl 1081079274 21622 80.50.174.166 (4 Apr 2004 11:47:54 GMT)
X-Complaints-To: use...@agora.pl
NNTP-Posting-Date: Sun, 4 Apr 2004 11:47:54 +0000 (UTC)
X-User: mluszczynski
User-Agent: 40tude_Dialog/2.0.10.1pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit