temat : linq a optymalizacja zapytańcoach.kis.p.lodz.pl/jispdr-lab-linq-opt.pdf · podaj nazwy...

4

Click here to load reader

Upload: hoanglien

Post on 28-Feb-2019

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Temat : LINQ a optymalizacja zapytańcoach.kis.p.lodz.pl/jispdr-lab-linq-opt.pdf · Podaj nazwy klientów, którzy zamawiali produkt Ikura. 3. * Wymyśl zapytanie odnoszące się

LaboratoriumJęzyki i środowiska przetwarzania danych rozproszonych

Temat : LINQ1

a optymalizacja zapytań

Historia zmian

Data Wersja Autor Opis zmian

15.10.2013 1.0 Tomasz Kowalski Utworzenie dokumentu.

8.3.2014 1.1 Tomasz Kowalski Aktualizacja zadań.

25.10.2016 1.2 Tomasz Kowalski Aktualizacja linku do projektu 101 samples.

2.11.2016 1.3 Tomasz Kowalski Wskazówki do uruchomienia Linq to SQL.

1 Langauage Integrated Queries

Page 2: Temat : LINQ a optymalizacja zapytańcoach.kis.p.lodz.pl/jispdr-lab-linq-opt.pdf · Podaj nazwy klientów, którzy zamawiali produkt Ikura. 3. * Wymyśl zapytanie odnoszące się

1. Cel laboratoriumGłównym celem laboratoriów jest zapoznanie się z mechanizmami ewaluacji i optymalizacji

zapytań w języku LINQ, który jest elementem platformy .NET.

2. Materiały pomocniczeDokumentacja MSDN:http://msdn.microsoft.com/pl-pl/library/system.linq.aspx

101 przykładów:http://code.msdn.microsoft.com/LINQ-Sample-Queries-13a42a54

Ćwiczenia z rozwiązaniami:http://download.microsoft.com/download/0/e/2/0e255cf3-b11f-44cb-b42c-

7d55ed7b556c/linq_hands_on_lab.docx

3. Laboratorium:1. Otwórz w Microsoft Visual Studio projekt LINQ Sample Queries:

http://coach.kis.p.lodz.pl/LINQ-SampleQueries.zip

2. Zapoznaj się zadaniami należącymi do działu LINQ to SQL – (plik LinqToSQLSamples).

UWAGA: jeżeli na Twoim komputerze masz problemy z połączeniem z bazą (np. nie jest zainstalowana lub nie działa baza SQL Express) zainstaluj niewielką bazę Microsoft SQL Server 2012 LocalDB (odpowiednią wersję dla Twojego systemu x86 lub x64) z:

http://www.microsoft.com/en-us/download/details.aspx?id=29062

Jeżeli baza Microsoft SQL Server 2012 LocalDB jest już zainstalowana pomiń instalację.

W pliku LinqToSQLSamples zmień wartość atrybutu connString:

private readonly static string connString = @"Server=(LocalDB)\v11.0;Integrated Security=true;AttachDBFileName='" + dbPath + "'"; lub x64)

Jeżeli problemy z połączeniem z bazą nadal występują można spróbować zmienić wartość atrybutu connString na:

private readonly static string connString = @"Server=(LocalDB)\v11.0;AttachDBFileName='" + dbPath + "'"; lub x64)

oraz utworzyć instancję z konsoli poleceniem:

SqlLocalDb create "MyInstance" -sIntegrated

Page 3: Temat : LINQ a optymalizacja zapytańcoach.kis.p.lodz.pl/jispdr-lab-linq-opt.pdf · Podaj nazwy klientów, którzy zamawiali produkt Ikura. 3. * Wymyśl zapytanie odnoszące się

Na ilustracji 1 przedstawiony jest schemat relacyjnej bazy danych, do której odnoszą się zapytania z działu LINQ to SQL.

UWAGA: W projekcie zostało zrealizowane mapowanie obiektowo/relacyjne dzięki czemu w zapytaniach zamiast złączeń możemy używać bezpośredniej nawigacji, np. produkt ma artybuty SupplierID oraz Supplier bezpośrednio prowadzący do właściwego obiektu!

3.1. Zapytania do providera LINQ to SQL

Napisz zapytania rozwiązujące następujące problemy i umieść je w dziale z zapytaniami LINQ to SQL tworząc nową podgrupę o nazwie lab1. Przeanalizuj transformacje zapytań LINQ na zapytaniaSQL.

1. Podaj pełne dane o dostawcy, który produkuje produkt Ikura.

2. Podaj nazwy klientów, którzy zamawiali produkt Ikura.

3. * Wymyśl zapytanie odnoszące się przynajmniej do czterech tabel wykorzystujące grupowanie! Nie korzystaj z operatora join.

3.2. Wydajność zapytań LINQ to Objects

W celu zwiększania kolekcji produktów, do projektu LINQ Sample Queries wstaw pliki:

http://team.kis.p.lodz.pl:8080/svn/samples/trunk/jispdr/LINQSamplesPatch/

UWAGA: Zrób kopię swoich zapytań znajdujących się w LinqSamples.cs.

Rozwiąż poniższe zadania dotyczące kolekcji produktów oraz zweryfikuj wydajność zapytań.

W miarę możliwości opracuj kilka rozwiązań dla tego samego zapytania. Porównaj ich wydajność i spróbuj wyjaśnić różnice.

Ilustracja : Schemat relacyjnej bazy danych Northwind

Page 4: Temat : LINQ a optymalizacja zapytańcoach.kis.p.lodz.pl/jispdr-lab-linq-opt.pdf · Podaj nazwy klientów, którzy zamawiali produkt Ikura. 3. * Wymyśl zapytanie odnoszące się

1. Znaleźć nazwy produktów, które są na stanie, kosztują mniej niż 10 i należą do kategorii Seafood.

2. Dla każdej kategorii znaleźć najtańsze i najdroższe produkty. Zwrócić nazwy kategorii i nazwy produktów. *Napisz zapytanie o złożoności lepszej niż O(k*log(k)*n*n), gdzie n odnosi się do liczby produktów, a k do kategorii.

3. Znaleźć cenę, dla której jest najwięcej sztuk produktów (biorąc pod uwagę też unitInStocks). Zwrócić cenę i liczbę sztuk.

4. Dla każdego produktu podać liczbę produktów, które są od niego tańsze lub jest ich mniej sztuk na składzie.

5. Dla każdego produktu podaj liczbę produktów, które kosztują tyle samo. *Napisz zapytanie o złożoności O(n*log(n)).

6. Do rozwiązań zastosuj Parallel LINQ i sprawdź poprawę wydajności.

7. Sprawdź wydajność zapytania z wykładu i poprzedzających laboratoriów: produkty, których cena jednostkowa, jest równa cenie produktu o nazwie Ikura.Spróbuj ją poprawić.

3.3. Eksperymentalna weryfikacja semantycznej równoważności zapytań

Zaimplementuj metodę weryfikującą (możliwie dokładnie) czy wynik działania dwóch zapytań jest taki sam. Pod uwagę możesz wziąć następujące czynniki:

• liczba elementów zwracana przez zapytania (użyj operatora count()),

• sprawdzenie czy elementy występujące w jednym wyniku występują też w drugim,

• w przypadku sekwencji sprawdzenie czy kolejność elementów jest zachowana,

• * porównanie zwracanych typów.

• * inne...

3.4. *Testowanie zapytań dla różnych rozmiarów kolekcji.

Zaimplementuj metody, która umożliwią wielokrotne testowanie wydajności zapytania oraz semantycznej równoważności dwóch zapytań biorą pod uwagę różne rozmiary kolekcji: np. 2, 4, 8, 16 razy mniejsze niż kolekcji oryginalnej.

Po testach rozmiar kolekcji powinien zostać przywrócony.

Takie testy mają na celu umożliwić określenie złożoności obliczeniowej zapytania oraz dokładniejsze potwierdzenie semantycznej równoważności dwóch zapytań