ADO.NET Konflikty i kłopoty

Slides:



Advertisements
Podobne prezentacje
Longhorn Academy - AD Warszawa, 12 kwietnia 2007
Advertisements

20041 Projektowanie dynamicznych witryn internetowych Paweł Górczyński ASP 3.0.
Architektura SAP R/3 Wybrane zagadnienia.
Decyzje projektowe w .NET Framework
Kamil Smitkiewicz Bezpieczeństwo w PHP.
Wydajne aplikacje na platformie .NET
Microsoft Professional Developer Days 2004
ADAM Active Directory w trybie aplikacyjnym
OLAP budowa aplikacji analitycznych w MS SQL 2000 i Yukon
SIECI KOMPUTEROWE (SieKom) PIOTR MAJCHER WYŻSZA SZKOŁA ZARZĄDZANIA I MARKETINGU W SOCHACZEWIE PODSTAWOWE.
20/09/ Języki programowania 1 Piotr Górczyński Kreator form.
18/11/ Języki programowania 1 Piotr Górczyński Łączenie z bazą danych.
Wycofywanie potwierdzonych transakcji
Aplikacje ASP.NET Arkadiusz Twardoń ZTiPSK
Wykład 2. Wprowadzenie do architektur systemów rozproszonych
Serwerowe systemy pamięci tłumaczeń dr inż. Agenor Hofmann-Delbor
Marta Kupiec Adrian Macal
Systemy operacyjne Bibliografia:
Proxy (WWW cache) Sieci Komputerowe
ASP.NET i platforma.NET Technologie internetowe ( ) Tomasz Popów
„Migracja środowisk Novell NDS/eDirectory oraz Novell Groupwise do środowiska Microsoft Active Directory oraz Microsoft Exchange przy użyciu narzędzi Quest.
Czym jest ISA 2004 Microsoft Internet Security and Acceleration Server 2004 jest zaawansowaną zapora filtrującą ruch w warstwie aplikacji. Razem z zaporą.
Usługa Windows Server Update Services (WSUS)
Longhorn - Usługi terminalowe
Programowanie wizualne PW – LAB5 Wojciech Pieprzyca.
Information Bridge Framework platforma integracji Microsoft Office 2003 z aplikacjami Line of Business Krzysztof Michalski10/01/2005.
Enteprise Java Beans Emil Wcisło.
.NET Remoting Łukasz Zawadzki.
Wzorce projektowe w J2EE
Microsoft Serwer - wprowadzenie
Artur Szmigiel Paweł Zarębski Kl. III i
Rozproszone bazy danych
Systemy zarządzania treścią CMS
Systemów Operacyjnych
Technologia ASP.NET.
Budowa, przeglądanie i modyfikacja
Mechanizm kompresji danych w SQL Server 2008
USŁUGA FTP 1. Definicja FTP. FTP (File Transfer Protocol, ang. protokół transmisji plików) jest protokołem typu klient-serwer, który umożliwia przesyłanie.
PRACA W DOMENIE Różnice użytkowe między pracą w domenie i grupie roboczej. 1. Ekran logowania. - wciśnięcie klawiszy [Ctrl+Alt+Delete], a następnie podanie.
SIEĆ P2P 1. Definicja sieci równouprawnionej. To taka sieć, która składa się z komputerów o takim samym priorytecie ważności, a każdy z nich może pełnić.
Rozwój aplikacji przy wykorzystaniu ASP.NET
Wirtualna baza SQL zgodna z SQL Server SQL as a Service
Tworzenie nowych kont lokalnych i domenowych, oraz zarządzanie nimi
Prezentacja i szkolenie
Rozdział 1: Wprowadzenie do systemu Windows 2000 i podstaw sieci
Rejestr systemu Windows
ASP BAZY. 2.2 S. Wolek Wst. do Inf. Połączenie z bazą danych przez ADO (ActiveX Data Object) do: - źródła ODBC - bazy z podanie nazwy sterownika ODBC.
Przygotował: Paweł Ziaja
Aplikacje bazodanowe ADO.NET PHP i MySQL
Wybrane zagadnienia relacyjnych baz danych
Konfiguracja sieci TCP/IP - Windows for Workgroup 3.11
ASP BAZY DANYCH. 2 S. Wolek Wst. do Inf. Połączenie z bazą danych przez ADO (ActiveX Data Object) do: - źródła ODBC - bazy z podanie nazwy sterownika.
1 SBD, L.Banachowski Zaawansowane cechy SQL Powtórzenie wyk ł adu 5.
Konfiguracja VPN Serwera – Windows 7
Technologie internetowe i mobilne
1. Logowanie z usługą Active Directory. a) logowanie do domeny Windows 2003 Server odbywa się znacznie szybciej niż w poprzednich wersjach. b) nie ma odwołania.
Jak wykonać prosty licznik odwiedzin strony internetowej?
.NET i Bazy Danych Projekt: Wadim Grasza.
Informatyka – szkoła gimnazjalna – Scholaris - © DC Edukacja Tworzenie stron WWW w programie Microsoft FrontPage Informatyka.
Rozpowszechnianie aplikacji KRYSTIAN KOWALCZUK TORUŃ,
Bartosz Pawlak Wiktor Paliwoda Bezpieczeństwo Systemów Operacyjnych IMAP vs POP.
ASP.NET Kontrolki źródła danych i prezentacji danych w ASP.Net
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Zarządzanie stanem w aplikacjach ASP.NET Elżbieta Mrówka-Matejewska
 Podstawowy składnik.NET Framework  Technologia tworzenia w pełni dynamicznych stron internetowych działających po stronie serwera  Zorientowanie na.
SQL Server Analysis Services Action!
PODSTAWOWE ZARZĄDZANIE KOMPUTERAMI Z SYSTEMEM WINDOWS
PROGRAMY DO KONTROLI RODZICIELSKIEJ
PROGRAMY DO KONTROLI RODZICIELSKIEJ
Aplikacje i usługi internetowe
Zapis prezentacji:

ADO.NET Konflikty i kłopoty Tomasz Kopacz Microsoft Professional Developer Days 2004

Konflikty Na poziomie „interfejsu użytkownika” Dwie osoby zmieniają ten sam wiersz Rozwiązanie: Odpowiedni DataAdapter Mechanizm „blokad aplikacyjnych” na poziomie SQL Server Na poziomie mechanizmów bazy Konflikt równolegle wydawanych poleceń Stracone aktualizacje, odczyty widmo itp Transakcje bazodanowe EnterpriseServices

Architektura ADO (dokładniej – SQLClient) DataSet Własne mechanizmy Provider danych dla Sql Server… SqlDataAdapter CommandBuilder IDataReader Sql Server SqlConnection SqlCommand SqlDataParameter SqlException SqlError SqlTransaction

DataAdapter SelectCommand, InsertCommand, UpdateCommand, DeleteCommand Można w transakcji CommandBuilder Kosztowne! (projektant, dodatek itp.) Wsparcie w DataSet DataRowVersion – wersja wiersza Original, Current, Proposed, Default Podstawienie z kolekcji Parameters SqlCommand SourceVersion DataRowState – stan wiersza Added,Deleted,Modified,Unchanged Detached

Strategie rozwiązywania konfliktów Optymistyczna! Porównujemy tylko klucz główny Zakładamy zmiany w każdym polu Standardowa Wszystkie pola Timestamp Pole charakterystyczne? Różnice w wydajności zależą od łącza do SQL, wielkości danych itp. 100 MB – ok. 19% timestamp szybszy VPN 128 kb – nawet 60% Pesymistyczna Blokada w transakcji od czasu odczytu

Timestamp i wykrywanie konfliktów Długie dane TS xxxxxxxxxx aa OK! xxxxxxxxxx aa yyyyyy bb Zapis yyyyyy bb Konflikt xxxxxxxxxx aa zzzzzz cc Czas Klient A Klient B

Typy aktualizacji „Wszystkie albo żaden” Tylko wiersze bez konfliktów Trzeba aktualizację zamknąć w transakcji Tylko wiersze bez konfliktów ContinueUpdateOnError=true (Sprawdzamy: HasErrors/GetErrors) Pesymistyczne = blokada na tabeli Wystartować transakcję przed wypełnieniem DataSet (I zastanowić się czy nie da się postąpić inaczej)

Transakcje bazodanowe Zapewniają ACID Obiekt SqlTransaction „Pobierany” z połączenia Przypisywana do polecenia Tryby izolacji Podpowiedzi przy poleceniach SQL NOLOCK, READCOMMITTED,REPEATABLEREAD, SERIALIZABLE TABLOCK (jak ktoś naprawdę musi!) Temat w pomocy: Locking Hints

Tryb izolacji a problemy współbieżności Poziom izolacji (wg „kosztowności”) ReadUncommitted ReadCommited RepeatableRead Serializable Problem z współbieżnością Stracone aktualizacje X Odczyt właśnie zmienianych rekordów ? OK Niespójne odczyty Odczyty rekordów „widmo”

Demo – praca z wersjami w DataSet Blokady optymistyczne Aktualizacje wszystkich które można Aktualizacje tylko wszystkich lub żadnego Pokazanie użytkownikowi zmienionych danych Wersje DataSet i okolice Blokady pesymistyczne

Własne transakcje Problem: Rozwiązanie: Okno „tylko dla jednego użytkownika” Rozwiązanie: Transakcje aplikacyjne w SQL Server sp_getapplock nazwa_zasobu, tryb, właściciel, timeout sp_releaseapplock nazwa_zasobu, właściciel Można używać Wewnątrz sesji (jednego połączenia) Nie lokalne – trzeba użyć np. mutex-a Wewnątrz transakcji

Demo - własne transakcje aplikacyjne Blokada okna Trwa aż się zwolni zasób Lub – sesja zostanie zamknięta

Enterprise Services? Problem: Rozwiązanie: Transakcja obejmuje kilka etapów Połączeń, sekwencja operacji bazodanowych itp Złożona logika i wygodniej byłoby dodać cechę „wykonuj w transakcji” Kod złożony i zmiany trzeba wycofywać „ręcznie” Rozwiązanie: Obiekt dziedziczący z EnterpriseServices Duże możliwości (kolejki, pula itp.) Transakcje Połączenie „wylistowane” w transakcji Kod „kompensacyjny” Rejestracja regsvcs.exe System.EnterpriseServices.RegistrationHelper.InsallAssembly

Serwerowy obiekt ServicedComponent Referencja do System.EnterpriseServices Klasa dziedziczy z ServicedComponent [assembly: ApplicationActivation(ActivationOption.Server/Library)] Atrybuty klasy Transaction Disabled NotSupported Required RequiresNew Supported Atrybuty metody: [ AutoComplete(true) ] Lub: ContextUtil.SetAbort()/.SetComplete();

Własny kod kompensujący Problem: Używany obiekt nie jest „świadomy transakcji” Długa operacja (szkoda zasobów SQL-a) Rozwiązanie: Kod kompensujący System.EnterpriseServices.CompensatingResourceManager Główne klasy Clerk Compensator LogRecord [assembly: ApplicationCrmEnabled] ActivationOption.Server

Demo - EnterpriseServices Transakcje automatyczne Transakcje ręczne Kod kompensacyjny Plik + kasowanie Uwagi! Interfejs Raz skompilować oddzielny DLL – ułatwi pracę Dodać do GAC Łatwiej znajdzie formatter itp Referencje do DLL a nie do projektu

Zdalnie? Problem: Rozwiązanie: Typy wywołań: Klient: Obiekt EnterpriseServices na zdalnej maszynie Rozwiązanie: Remoting Własny proces nasłuchujący (remoting) + wrapper Umieścić w /bin aplikacji WWW + drobne zmiany w web.config/remoting.config Uwaga! ASPNET nie zarejestruje samo COM+ System.UnauthorizedAccessException: Odmowa dostępu do klucza rejestru HKEY_CLASSES_ROOT\EnterpriseDemoSrv.EntComp. Typy wywołań: SAO (SingleCall/Singleton) CAO (Jak „normalne” COM/.NET) Klient: Activator.GetObject(typeof(…),"uri");

Szybkie demo – zdalne wywołanie Pliki dll kopiowane do bin Zmiany w web.config Prawa dla anonimowego użytkownika! Klient – interfejs + Activator.GetObject

Warto jeszcze wiedzieć SWC (Services Without Components) COM+ 1.5 (XP, 2003 Server) BYOT (Bring Your Own Transaction) CreateWithTransaction, CreateWithTipTransaction Windows 2003 – domyślnie COM+ i DTC zablokowane Add/Remove Windows Components Application Server Enable network COM+ access Enable network DTC access Component Services – (…) - Security Configuration Prościej używać logowanie SQL Jeżeli coś nie działa: Uprawnienia… Usunąć cały komponent (okno Component Services) W Event Log -> co nie działa

Cechy omawianych mechanizmów… Konflikty Timestamp – najtańszy; Porównywanie pól – gdy nie można zmienić schematu Inne charakterystyczne pole DataSet ma olbrzymie możliwości… Blokady aplikacyjne w SQL Co jak klient padnie? master.syslockinfo/master.sysprocesses kodowane @@SPID – kod połaczenia; do oddzielnej tabeli Ale i tak – blokady sesyjne zwalniane są w momencie zakończenia (padu) sesji Klient/Serwer – transakcje lokalne Szybkie, ale… „ręczne” EnterpriseServices Gdy mamy taką możliwość Nawet „na kliencie” Wolniejsze Proste w użyciu - wystarczy deklaracja atrybutu Łatwa migracja na „n warstw”

Co zmieni Yukon Kursory po stronie serwera SqlDependency Ale nadal – nie używać  SqlDependency Jedno połączenie – wiele równoległych poleceń Mniejsza rola transakcji w EnterpriseServices? Indigo jest ciekawym produktem  I zawiera funkcjonalność EnterpriseServices

Microsoft Professional Developer Days 2004 Dziękuję za uwagę Pytania: tkopacz@tomaszkopacz.com Prezentacja + przykłady do ściągnięcia dostępne na http://www.microsoft.com/poland/seminaria/prezentacje.asp Microsoft Professional Developer Days 2004