Języki i środowiska programowania systemów rozproszonych

18
Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 1 2011 Języki i środowiska programowania systemów rozproszonych Wykładowca: Tomasz Kowalski Wykłady przygotowane na podstawie materiałów prof. Kazimierza Subiety Wykład 7 Język SBQL (Stack- Based Query Language) (2) Operatory niealgebraiczne,

description

Języki i środowiska programowania systemów rozproszonych. Wykład 7 Język SBQL (Stack-Based Query Language) (2) Operatory niealgebraiczne,. Wykładowca : Tomasz Kowalski Wykłady przygotowane na podstawie materiałów prof. Kazimierza Subiety. Dlaczego "niealgebraiczne"? (1). - PowerPoint PPT Presentation

Transcript of Języki i środowiska programowania systemów rozproszonych

Page 1: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 1 2011

Języki i środowiska programowania systemów rozproszonych

Wykładowca: Tomasz Kowalski

Wykłady przygotowane na podstawie materiałówprof. Kazimierza Subiety

Wykład 7Język SBQL (Stack-Based Query Language) (2)Operatory niealgebraiczne,

Page 2: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 2 2011

Dlaczego "niealgebraiczne"? (1)

Do nich należą operator where, operator kropki, kwantyfikatory, zależne złączenie join, sortowanie (order by), i inne. Wszystkie są binarne.

Mimo podobieństwa do operatorów algebraicznych, semantyka operatorów niealgebraicznych nie da się prosto sprowadzić do algebry.• To zdanie może wydawać się niejasne. W modelu relacyjnym operatory

selekcji (operator where), projekcji (operator kropki) oraz złączenia są przecież traktowane jako operatory algebraiczne algebry relacji.

• Tu właśnie jest nieporozumienie. Takie traktowanie jest możliwe wyłącznie przy ograniczonej funkcjonalności, oraz po przyjęciu triku formalnego.

• Trik polega na tym, że część semantyki jest przenoszona na poziom metajęzykowy. Operatory te są dodatkowo kwalifikowane wyrażeniem metajęzykowym. Np. w wyrażeniu algebry relacyjnej:

Zar>1000( Prac )

operator selekcji jest kwalifikowany wyrażeniem metajęzykowym Zar >1000. Operator selekcji nie jest pojedynczym operatorem, lecz nieskończoną rodziną zawierającą tyle operatorów, ile jest warunków selekcji.

Page 3: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 3 2011

Dlaczego "niealgebraiczne"? (2)

W podejściu stosowym dowolne operatory nie są indeksowane wyrażeniami meta-językowymi.

• Nie występuje więc semantyczna schizofrenia nazw dzieląca je na „językowe” i „meta-językowe”.

• Nie ma podziału na nazwy „pierwszej kategorii” i „drugiej kategorii”. Każda nazwa ma dokładnie taką samą semantykę i podlega dokładnie tym samym regułom wiązania i zakresu

• Podobnie z operatorami: nie występuje semantyczne zróżnicowanie operatorów: operator < występuje na tym samym poziomie semantycznym jak operator selekcji where.

Koncepcja operatorów niealgebraicznych jest bardzo prosta oraz ma dobrze ugruntowane korzenie w semantyce języków programowania.

Definicja operatorów niealgebraicznych będzie się nieco różniła w zależności od tego, który modelu składu (AS0 - AS3) będzie rozpatrywany. Wszystkie te definicje będą bazowały na podanej niżej podstawowej definicji dla modelu AS0.

Page 4: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 4 2011

Opis procedury eval dla operatora nie-algebr. Aby dokonać ewaluacji zapytania q1 q2 wykonaj następujące czynności:

• Dokonaj ewaluacji zapytania q1. Zapytanie to zwraca wielozbiór elementów.

• Dla każdego elementu e należącego do wyniku q1 wykonaj następujące czynności:

• Oblicz wartość funkcji nested( e ). Wynik jest zbiorem binderów.

• Włóż obliczony zbiór binderów jako nową sekcje na wierzchołek stosu ENVS.

• Dokonaj ewaluacji zapytania q2 w tym nowym środowisku.

• Oblicz wynik cząstkowy dla danego elementu e poprzez połączenie e z wynikiem zwróconym przez q2. Funkcja łącząca zależy od operatora .

• Usuń nowo wstawioną górną sekcję ze stosu ENVS.

• Zsumuj wszystkie wyniki cząstkowe w wynik końcowy. Sposób sumowania sumuj ( U ) zależy od rodzaju operatora .

Stan stosu środowisk ENVS po zakończeniu ewaluacji jest taki sam, jak przez rozpoczęciem ewaluacji.

Page 5: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 5 2011

Formalny zapis procedury eval dla oper. niealgebr.procedure eval( q : zapytanie )begin ...... case q jest rozpoznane jako q1 q2 : (* q1 , q2 są zapytaniami, jest operatorem niealgebraicznym *) begin wyniki_pośr: bag of Rezultat; (* lokalna kolekcja wyników pośrednich *) wynik_pośredni: Rezultat; (* lokalna zmienna na wynik pośredni *) wynik_końcowy: Rezultat; (* lokalna zmienna na wynik końcowy *) e: Rezultat; (* lokalna zmienna na element kolekcji zwracanej przez q1 *) wyniki_pośr := ; (* zerowanie kolekcji wyników pośrednich *) eval( q1 ); (*q1 zwraca kolekcję elementów; wynik q1 na czubku stosu QRES *) for each e in top( QRES ) do (* iteracja po wszystkich elementach wyniku q1 *) begin

push( ENVS, nested( e ) ); (* nowa sekcja na stosie środowisk *)eval( q2 ); (* wynik q2 na czubku stosu QRES *)wynik_pośredni := połącz ( e, top( QRES ) ); (* połączenie e z wynikiem q2; zależne od *)wyniki_pośr := wyniki_pośr U { wynik_pośredni }; (* akumulacja wyniku pośredniego *)pop( QRES ); (* usuniecie z QRES wyniku q2 *)pop( ENVS ); (* usuniecie z ENVS nowej sekcji *)

end; wynik_końcowy := sumuj ( wyniki_pośr ); (* zsumowanie wyników pośrednich; zależne od *) pop( QRES ); (* usuniecie z QRES wyniku q1 *) push( QRES, wynik_końcowy ); (* włożenie na QRES końcowego wyniku *) end; .......end;

Page 6: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 6 2011

Poglądowy obraz małej bazy danych

i1 Prac

i2 Nazwisko ”Nowak”

i3 Zar 2500

i4 PracujeW

i5 Prac

i6 Nazwisko ”Kowalski”

i7 Zar 2000

i8 PracujeW

i9 Prac

i10 Nazwisko ”Barski”

i11 Zar 900

i16 PracujeW

i13 Miasto ”Radom”

i14 Ulica ”Wolska”

i15 NrDomu 12

i12 Adres

i17 Dział

i18 Nazwa ”Produkcja”

i19 Lokacja ”Kielce”

i21 Zatrudnia

i20 Lokacja ”Kraków”

i22 Dział

i23 Nazwa ”Sprzedaż”

i24 Lokacja ”Radom”

i25 Zatrudnia

i26 Zatrudnia

Page 7: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 7 2011

Operator where (selekcja)

Składnia: q1 where q2

• Ograniczenie: podzapytanie q2 zwraca wartość prawda lub fałsz.

Semantyka• Dla każdego elementu e zwróconego przez q1, ENVS jest podwyższany o

nested(e)

• Następnie ewaluowane jest q2

• Po ewaluacji q2 stos ENVS wraca do poprzedniego stanu

• e należy do ostatecznego wyniku wyłącznie wtedy, gdy q2 zwróciło prawda.

Objaśnienie funkcji eval• Funkcja połącz: dla danego e należącego do wyniku q1 zwraca

jednoelementowy wielozbiór { e } w przypadku, gdy dla tego e podzapytanie q2 zwróciło prawda, lub pusty wielozbiór { }, jeżeli podzapytanie q2 zwróciło fałsz.

• Funkcja sumuj: sumuje (mnogościowo) wszystkie wyniki pośrednie.

Przykład: Prac where ( Zar > 1000 )

Page 8: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 8 2011

Operator where - ilustracja działania

Prac where ( Zar > 1000 )

i1

i5

i9Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

i3

i7

i11

i1

i5

Stan stosu ENVS przed ewaluacją

Rezultat zwracany przez zapytanie Prac (wiązanie Prac)

Rezultat zwracany przez zapytanie Zar (wiązanie Zar)

Iteracja po elementach e poprzedniego rezultatu: na ENVS wkłada się nested(e)

Nazwisko(i2) Zar(i3) PracujeW(i4)

Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Nazwisko(i6) Zar(i7) PracujeW(i8)

Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Nazwisko(i10) Zar(i11) Adres(i12) PracujeW(i16)

Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Rezultat dereferencji wymuszanej przez operator >

2500

2000

900

Rezultat zwracany przez zapytanie 1000

1000

1000

1000

prawda

prawda

fałsz

Rezultat zwracany przez zapytanie Zar>1000

Końcowy rezultat zapytania

Page 9: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 9 2011

Operator kropki (projekcja, nawigacja)

Składnia: q1 . q2

Semantyka• Dla każdego elementu e zwróconego przez q1, ENVS jest podwyższany o

nested(e)

• Następnie ewaluowane jest q2

• Po ewaluacji q2 stos ENVS wraca do poprzedniego stanu

• Ostateczny wynik jest sumą mnogościową wyników q2

Objaśnienie funkcji eval• Funkcja połącz: ignoruje e; zwraca wynik podzapytania q2.

• Funkcja sumuj: sumuje (mnogościowo) wszystkie wyniki pośrednie.

Przykład: Prac . Zar

Operator kropki przykrywa tzw. wyrażenia ścieżkowe (path expressions) w najbardziej uniwersalnej postaci, pozwalając je jednocześnie dowolnie kombinować z innymi operatorami.

Page 10: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 10 2011

Operator kropki - ilustracja działania

Prac . Zar

i1

i5

i9

i3

i7

i11

Stan stosu ENVS przed ewaluacją

Rezultat zwracany przez zapytanie Prac (wiązanie Prac)

Rezultat zwracany przez zapytanie Zar (wiązanie Zar)

Iteracja po elementach e poprzedniego rezultatu: na ENVS wkłada się nested(e)

Końcowy rezultat zapytania

i3

i7

i11Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Nazwisko(i2) Zar(i3) PracujeW(i4)

Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Nazwisko(i6) Zar(i7) PracujeW(i8)

Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Nazwisko(i10) Zar(i11) Adres(i12) PracujeW(i16)

Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Page 11: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 11 2011

Operator zależnego złączenia

Składnia: q1 join q2

Semantyka• Dla każdego e zwróconego przez q1, ENVS jest podwyższany o nested(e)

• Następnie ewaluowane jest q2

• Po ewaluacji q2 stos ENVS wraca do poprzedniego stanu

• Ostateczny wynik jest sumą mnogościową wszystkich struktur, w których na początku jest e, zaś dalej jest element wyniku q2 zwrócony dla tego e.

Objaśnienie funkcji eval• Funkcja połącz: zarówno e jak i każdy element e2 zwracany przez q2 traktuje jako

struktury (jednoelementowe lub wieloelementowe). Dla każdego e2 zwracanego przez q2 tworzy strukturę poprzez połączenie e oraz e2. Wynikiem pośrednim jest kolekcja wszystkich takich struktur.

• Funkcja sumuj: sumuje (mnogościowo) wszystkie wyniki pośrednie.

Przykład: Prac join Zar

• Zależne złączenie jest zdefiniowane w ODMG OQL (klauzula from) w znacznie ograniczonej postaci w stosunku do powyższej definicji.

Page 12: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 12 2011

Operator zależnego złączenia - ilustracja działania

Prac join Zar

i1

i5

i9

i3

i7

i11

Stan stosu ENVS przed ewaluacją

Rezultat zwracany przez zapytanie Prac (wiązanie Prac)

Rezultat zwracany przez zapytanie Zar (wiązanie Zar)

Iteracja po elementach e poprzedniego rezultatu: na ENVS wkłada się nested(e)

Końcowy rezultat zapytania

struct(i1, i3)

struct(i5, i7)

struct(i9, i11 )Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Nazwisko(i2) Zar(i3) PracujeW(i4)

Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Nazwisko(i6) Zar(i7) PracujeW(i8)

Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Nazwisko(i10) Zar(i11) Adres(i12) PracujeW(i16)

Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Page 13: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 13 2011

Operator sortowania

Składnia: q1 order by q2

Semantyka• Wykonywane jest zapytanie: q1 join dereferencja( q2 )

• Wynik (bag) jest sortowany według części struktur zwróconej przez q2 . Po posortowaniu wynik jest sekwencją.

• Końcowy wynik uzyskuje się poprzez projekcję tej sekwencji (bez zmiany kolejności elementów na części struktur zwrócone przez q1 .

• Np. Prac order by Nazwisko

Prac order by ((PracujeW.Dział.Nazwa), Zarobek)

Operator ten można dodatkowo wyposażyć w kwalifikatory asc (wzrastająco) i desc (malejąco) przy każdej składowej q2.

• Np. Prac order by ((PracujeW.Dział.Nazwa) asc, Zarobek desc)• Operator asc jest komentarzem, operator desc jest odwrotnością wartości: np.

5 desc oznacza -5, "abceg" desc oznacza "zyxvt", itd.

Operator ten należy parametryzować (najlepiej konfiguracyjnie) funkcją porównania elementów (zależną od języka: angielski, polski, niemiecki,.. ).

Page 14: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 14 2011

Składnia: q1 ( q2 ) lub q1 q2 (lub w ODRA: forsome(q1 ( q2 )) )

• Ograniczenie: podzapytanie q2 zwraca wartość prawda lub fałsz.

Semantyka• Dla każdego e zwróconego przez q1, ENVS jest podwyższany o nested(e)

• Następnie ewaluowane jest q2

• Po ewaluacji q2 stos ENVS wraca do poprzedniego stanu

• Ostateczny wynik jest prawda wtedy i tylko wtedy, jeżeli dla co najmniej jednego e podzapytanie q2 zwróciło prawda.

Objaśnienie funkcji eval• Funkcja połącz: ignoruje e; zwraca wynik podzapytania q2.

• Funkcja sumuj: Zwraca prawda jeżeli co najmniej jeden wynik pośredni zwrócony przez q2 jest prawda; w przeciwnym wypadku zwraca fałsz.

Przykład: foresome Prac ( Zar > 1000 )

Kwantyfikator egzystencjalny

Page 15: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 15 2011

Składnia: q1 ( q2 ) lub q1 q2 (lub w ODRA: forall(q1 ( q2 )) )

• Ograniczenie: podzapytanie q2 zwraca wartość prawda lub fałsz.

Semantyka• Dla każdego e zwróconego przez q1, ENVS jest podwyższany o nested(e)

• Następnie ewaluowane jest q2

• Po ewaluacji q2 stos ENVS wraca do poprzedniego stanu

• Ostateczny wynik jest prawda wtedy i tylko wtedy, jeżeli dla wszystkich e podzapytanie q2 zwróciło prawda. Jeżeli q1 zwróciło pusty wielozbiór, to wynik także jest prawda.

Objaśnienie funkcji eval• Funkcja połącz: ignoruje e; zwraca wynik podzapytania q2.

• Funkcja sumuj: Zwraca fałsz jeżeli co najmniej jeden wynik pośredni zwrócony przez q2 jest fałsz ; w przeciwnym wypadku zwraca prawda.

Przykład: forall Prac ( Zar > 1000 )

Kwantyfikator uniwersalny

Page 16: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 16 2011

Kwantyfikator uniwersalny - ilustracja działania

Prac ( Zar > 1000 )

i1

i5

i9

i3

i7

i11

Stan stosu ENVS przed ewaluacją

Rezultat zwracany przez zapytanie Prac (wiązanie Prac)

Rezultat zwracany przez zapytanie Zar (wiązanie Zar)

Iteracja po elementach e poprzedniego rezultatu: na ENVS wkłada się nested(e)

Rezultat dereferencji wymuszanej przez operator >

2500

2000

900

Rezultat zwracany przez zapytanie 1000

1000

1000

1000

prawda

prawda

fałsz

Rezultat zwracany przez zapytanie Zar>1000

Końcowy rezultat zapytania

fałsz

Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Nazwisko(i2) Zar(i3) PracujeW(i4)

Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Nazwisko(i6) Zar(i7) PracujeW(i8)

Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Nazwisko(i10) Zar(i11) Adres(i12) PracujeW(i16)

Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Page 17: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 17 2011

Kroki ewaluacji zapytania z pomocniczą nazwą

(Prac as x) where ( ( x . Zar ) > 1000 )

i1

i5

i9

i3

i7

i11

x(i1)

x(i5 )

Rezultat zwracany przez zapytanie Prac

Rezultat zwracany przez zapytanie x (wiązanie x)

Iteracja po elementach e poprzedniego rezultatu: na ENVS wkłada się nested(e)

Rezultat dereferencji wymuszanej przez operator >

2500

2000

900

Rezultat zwracany przez zapytanie 1000

1000

1000

1000

prawda

prawda

fałsz

Rezultat zwracany przez zapytanie Zar>1000

Końcowy rezultat zapytania

Rezultat zwracany przez zapytanie Prac as x

x(i1)

x(i5 )

x(i9)

i1

i5

i9

Rezultat zwracany przez zapytanie Zar

x(i1)Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

x(i5 )Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

x(i9)Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Nazwisko(i2) Zar(i3) PracujeW(i4)x(i1)Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Nazwisko(i6) Zar(i7) PracujeW(i8)x(i5 )Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Nazwisko(i10) Zar(i11) Adres(i12) PracujeW(i16)x(i9)Prac(i1) Prac(i5) Prac(i9) Dział(i17) Dział(i22)

Iteracja po elementach e poprzedniego rezultatu: na ENVS wkłada się nested(e)

Page 18: Języki i środowiska programowania systemów rozproszonych

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 18 2011

Zamiana "zmiennej" na etykietę struktury

Dla zapytania (Prac as x) where (( x . Zar ) > 1000 ) końcowy wynik jest różny od wyniku zapytania Prac where Zar > 1000 , mianowicie, elementy wyniku są opatrzone nazwą x.

Elementy takie można uważać za proste struktury (w sensie języków C/C++), których jedynym polem jest pole o nazwie x. • W standardzie ODMG są "tajemnicze" miejsca, w których zmienna

dziedzinowa zmienia się w etykietę struktury. Standard tego nie wyjaśnia.

• Dopiero na gruncie SBA widać jasno, dlaczego tak się dzieje. Wymagało to jednak bardzo istotnych założeń odnośnie semantyki. Standard ODMG jest semantycznie nieprecyzyjny, więc nie jest w stanie tego wyjaśnić.

• Tego efektu nie można także wyjaśnić na gruncie „algebry obiektowej”, „rachunku obiektowego”, lub innego tradycyjnego formalizmu.

Można pokazać, że zapytanie Prac where Zar > 1000 jest równoważne zapytaniu ((Prac as x) where (( x . Zar ) > 1000 )) . x