Konstrukcja systemów obiektowych i rozproszonych Wykładowca: Kazimierz Subieta Polsko-Japońska Wyższa Szkoła Technik Komputerowych, Warszawa [email protected] Wykład 2: Aktualizowalne perspektywy (1) Instytut Podstaw Informatyki PAN, Warszawa [email protected] © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 1 październik 2004 Temat wirtualnych perspektyw Temat wirtualnych perspektyw dla relacyjnych baz danych został sformułowany przez E.Codda w 1974 roku. Jest to zagadnienie o ogromnej wadze praktycznej, gdyż wirtualne perspektywy są ważne dla wielu zastosowań baz danych. Temat ten jest znany z SQL i został doceniony przez twórców obiektoworelacyjnego manifestu baz danych. Od nieomal 30 lat nad tym tematem pracowało dziesiątki lub setki specjalistów. Powstało na ten temat setki publikacji i praktycznych implementacji, w prototypowych i komercyjnych systemach. Najbardziej istotnym problemem jest aktualizacja wirtualnych danych (obiektów). Problem nie doczekał się dostatecznie uniwersalnego rozwiązania na gruncie systemów relacyjnych i zyskał sobie sławę „arcytrudnego”. Klasyczne rozwiązania w systemach relacyjnych są ograniczone i nie są w stanie spełnić tych oczekiwań, które są często przedstawiane jako motywacja dla podjęcia tego tematu. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 2 październik 2004 Rozwiązanie arcytrudnego tematu Stosunkowo najbardziej zaawansowane są rozwiązania oparte na tzw. instead of trigger (tryger „zrób zamiast”) w systemach Oracle i MS SQL Server. To rozwiązanie wskazuje kierunek, w którym powinny pójść badania. Rozwiązanie objaśnione w tym wykładzie idzie dokładnie w tym kierunku, ale jest oparte na innym, znacznie bardziej uniwersalnym mechanizmie. Pokażemy, że ten „arcytrudny” temat jest jak najbardziej do opanowania, jeżeli założy się dobre podejście. Jest nim podejście stosowe do języków zapytań. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 3 październik 2004 Co to jest perspektywa? - pogląd 1 view, database view W literaturze funkcjonują dwa różne (zbliżone) znaczenia. 1. Perspektywą nazywa się odwzorowanie globalnego schematu bazy danych (określającego zapamiętane zasoby danych) na schemat “zewnętrzny”, przystosowany do potrzeb i przyzwyczajeń konkretnego użytkownika. Architektura ANSI/SPARC: Użytkownik 1 Użytkownik 2 Użytkownik 3 Schematy “zewnętrzne” Perspektywa 1 Perspektywa 2 Schemat globalny Poziom fizyczny bazy danych © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 4 Perspektywa 3 Projektant BD Administrator BD Administrator BD październik 2004 Co to jest perspektywa? - pogląd 2 2.Perspektywą określa się nazwane odwzorowanie danych zapamiętanych w bazie danych na dane “wirtualne”, t.j. pochodne lub wyliczalne. Matematycznie, perspektywa jest funkcją określoną na danych. Ten punkt widzenia nie jest precyzyjny, gdyż nie uwzględnia mechanizmów nazywania, wiązania i zakresu. Nie uwzględnia także kwestii aktualizacji perspektyw. Nieco bardziej precyzyjny punkt widzenia (systemy relacyjne): Perspektywa jest procedurą funkcyjną, która zwraca wynik będący tabelą. Taki wynik jest wyposażony w dodatkowe nazwy (nazwy atrybutów wirtualnych tabel zwracanych przez perspektywę). Perspektywy SQL są uproszczonymi procedurami funkcyjnymi. Ten punkt widzenia również nie uwzględnia kwestii aktualizacji perspektyw © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 5 październik 2004 Po co są perspektywy? Istnieje wiele ważnych zastosowań perspektyw, które czynią z nich bardzo aktualny temat. Uproszczenie modeli pojęciowych dla poszczególnych użytkowników. Uproszczenie zapytań poprzez “wyliczane” obiekty, atrybuty, związki. Dostosowanie się do punktu widzenia i terminologii dziedziny zastosowań. Ograniczenie dostępu do obiektów, ochrona prywatności. Ograniczenie dostępu w systemach rozproszonych federacyjnych BD. Logiczna niezależność obiektów i aplikacji działający na obiektach. Współdziałanie systemów heterogenicznych (wspólny schemat). Przystosowanie systemów spadkowych (legacy) do nowszych technologii i wymagań. Hurtownie danych: analiza informacji gromadzonych z heterogenicznych źródeł. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 6 październik 2004 Rodzaje perspektyw Wirtualne perspektywy • Perspektywa istnieje wyłącznie w postaci definicji (np. zapytania, procedury funkc.). Wyliczenie (materializacja) następuje w momencie użycia perspektywy. Wynik jest “konsumowany” i następnie kasowany. • Zalety: nie ma dublowania danych, nie ma problemu aktualizacji wyliczonych danych, nie ma problemów z przetwarzaniem transakcji. • Wada: czas ewaluacji perspektyw + czas ewaluacji zapytań używających perspektyw bez optymalizacji często nieakceptowalny. Zmaterializowane perspektywy • Perspektywa jest wyliczona “na zapas”, jej wynik jest przechowywany w bazie danych na normalnych zasadach. Aktualizacja danych stanowiących podstawę wyliczenia pociąga za sobą aktualizację zmaterializowanej perspektywy (lub jej skasowanie i ewentualnie, ponowne wyliczenie). • Zalety: szybki dostęp, łatwa implementacja. • Wady: zapotrzebowanie na pamięć, możliwość utraty spójności z bazą danych, koszt aktualizacji zmaterializowanych perspektyw (prowadzący do problemów koncepcyjnych i realizacyjnych), wąskie gardło dla transakcji, niejasny koncepcyjnie problem aktualizacji perspektyw. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 7 październik 2004 Zasada przezroczystości perspektyw view transparency Z punkty widzenia użytkownika/programisty dowolne operacje na perspektywach nie powinny niczym różnić się od podobnych operacji na zapamiętanych danych. • Np. jeżeli w sfederowanej bazie danych administrator udostępnia tylko część danych poprzez perspektywę, wówczas użytkownik lub programista końcowy nie powinien być zmuszany do modyfikacji swoich programów działających na zapamiętanych danych z tego powodu, że mają one teraz działać na perspektywach. • Podobnie, jeżeli “obca” baza danych jest widziana poprzez perspektywę w formacie “naszej” bazy danych, wówczas na “obcej” bazie danych powinny działać wszystkie aplikacje, które działają na “naszej”. Warunek przezroczystości perspektyw jest trudny do spełnienia: • Dla pewnych odwzorowań danych zapamiętanych w wirtualne przyjęte środki definicji perspektyw (np. SQL) mogą okazać się niewystarczające. • Problem aktualizacji perspektyw. • Pewne dane mogą być manipulowane wyłącznie przez przypisane im interfejsy, a nie przez języki zapytań. • Powstają problemy z wydajnością. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 8 październik 2004 Aktualizacja perspektyw view updating Najpoważniejszym problemem jest aktualizacja perspektyw. Aktualizacja „wirtualnych” danych jest oczywiście niemożliwa, wobec czego należy w jakiś sposób zamienić tę aktualizację na aktualizację zapamiętanych danych. Aktualizacja Dane wirtualne Perspektyw a Baza danych Dane zapamiętane Na ogół odwzorowanie odwrotne, danych wirtualnych w dane zapamiętane, nie jest jednoznaczne. Odwzorowanie aktualizacji danych wirtualnych w aktualizacje danych zapamiętanych można zrobić na wiele sposobów. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 9 październik 2004 Przykład aktualizacji perspektyw (1) Dane rzeczywiste Dane wirtualne Pracownik Dział zatrudnia Nazwisko Nazwa * Zarobek /MojeDziały Nazwa ŚredniZarobek Podwyższ średni zarobek w dziale „Serwis” o 500 zł: update MojeDziały set ŚredniZarobek = ŚredniZarobek + 500 where Nazwa = ‘Serwis’; ? Zlecenie jest błędne. (1) Nie ma danej o nazwie ŚredniZarobek. (2) Nawet gdybyśmy chcieli je poprawnie wykonać na danych rzeczywistych, mamy do wyboru nieskończenie wiele sposobów. Prawdopodobnie tylko jeden z nich satysfakcjonowałby osobę, która wydała takie polecenie. Który? © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 10 październik 2004 Przykład aktualizacji perspektyw (2) Dane rzeczywiste Dział Nazwa zatrudnia Pracownik * Nazwisko szef Zarobek 0..1 Dane wirtualne /MoiPracownicy NazwiskoPrac NazwiskoSzefa Technika implementacyjna: po wyliczeniu perspektywy MoiPracownicy zwraca ona referencje do nazwiska pracownika i nazwiska jego szefa. Czy problem aktualizacji został rozwiązany? Pracownik Kowalski, pracujący dla Styki, ma mieć nowego szefa Nowaka. update MoiPracownicy set NazwiskoSzefa = ‘Nowak’ where NazwiskoPrac = ‘Kowalski’; ? Aktualizację można wykonać, zaś nowym szefem Kowalskiego będzie Nowak. Niestety, zlecenie zmieniło nazwisko „Styka” na nazwisko „Nowak”, a chodziło o przeniesienie Kowalskiego do innego działu. Intencja tego zlecenia została poważnie zniekształcona. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 11 październik 2004 Ograniczenia w aktualizacji perspektyw (Oracle) W klauzuli SELECT nie ma słowa DISTINCT W klauzuli FROM jest tylko jedna nazwa tabeli lub tylko jedna nazwa tabeli lub aktualizowalnej perspektywy Na liście SELECT (wynikowej) znajduja się tylko nazwy kolumn W klauzuli WHERE nie ma podzapytania W zapytaniu nie mogą występować klauzule GROUP BY i HAVING Dodatkowo, Oracle wprowadza tzw. opcję sprawdzania (check option), która oznacza, że nie można aktualizować perspektyw w takich sytuacjach, w których skutki tej aktualizacji będą wykraczały poza to, co użytkownik widzi poprzez tę perspektywę. • Np. jeżeli dla perspektywy BiednyPracownik (Nazwisko, Zarobek) wyliczanej na podstawie Zarobek < 1000 zwiększymy zarobek Kowalskiego o 1000, to zniknie on z perspektywy, co może zaskoczyć programistę. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 12 październik 2004 Dodatkowe możliwości aktualizacji perspektyw W Oracle można aktualizować perspektywy powstające w wyniku złączenia, ale tylko atrybuty relacji znajdujące się po stronie “klucza obcego”: CREATE VIEW MoiLudzie( IdPracownika, Nazwisko, IdDziału, NazwaDziału, Zarobek) AS SELECT p.Id_pracownika, p.Nazwisko, p.Id_działu, d.Nazwa, p.Zarobek FROM Pracownicy AS p, Działy AS d WHERE p.Id_działu = d.Id_działu AND p.Stanowisko = ‘programista’; Podwyższyć o 500 zarobki wszystkim programistom z działu Serwis : UPDATE MoiLudzie SET Zarobek = Zarobek + 500 WHERE NazwaDziału = ‘Serwis’ OK. Przenieść programistę Nowaka do działu Magazyn: UPDATE MoiLudzie SET NazwaDziału = ‘Magazyn’ WHERE Nazwisko = ‘Nowak’ Źle! © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 13 październik 2004 Kryteria aktualizowalności perspektyw Brak nadmiarowej akualizacji. Aktualizacja pewnego elementu perspektywy nie powinna bezwiednie powodować aktualizacji innego. Brak niedostatecznej/błędnej aktualizacji - wynik aktualizacji nie powinien odbiegać od intencji użytkownika. Np. użytkownik aktualizuje zarobek netto o 100, tymczasem faktyczna aktualizacja wyniosła 91,50. Brak efektów ubocznych aktualizacji. Np. takim efektem jest zniknięcie krotki z perspektywy BiednyPracownik po zaktualizowaniu tego zarobku. Brak spontanicznej aktualizacji bazy danych poza fragmentem widocznym poprzez perspektywę. Zdeterminowany translator aktualizacji perspektywy - dla każdego stanu bazy danych powinien działać tak samo. Podane kryteria są spekulatywnym stereotypem i dotyczą sytuacji, kiedy translacja aktualizacji perspektyw jest dokonywana w pewien automagiczny sposób. Przestają mieć sens, jeżeli pełna kontrola nad aktualizacją perspektyw jest w rękach definiującego perspektywę. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 14 październik 2004 Krytyka dotychczasowych podejść (1) W większości, perspektywy są ograniczone do wyszukiwania. Dla wielu zastosowań jest to za mało. Przezroczystość perspektyw wymaga rozwiązania problemu aktualizacji danych wirtualnych, wymagającego spójnego odwzorowania tych aktualizacji na aktualizacje danych zapamiętanych. Ten warunek nie jest spełniony dla wszystkich znanych nam propozycji perspektyw (z wyjątkiem perspektyw opartych na trygerze instead of, które spełniają go częściowo). Wszystkie znane nam koncepcje aktualizowalnych perspektyw opierają się na aktualizacji poprzez wynik wywołania perspektywy. • Ten sposób myślenia o perspektywach stał się przyczyną powstania tzw. kryteriów aktualizowalności perspektyw. • Z reguły zapytanie wywołujące perspektywę zwraca referencje do zapamiętanych danych, np. wartość klucza głównego relacji, identyfikator obiektu, itp. • Jeżeli zapytanie nie zwraca referencji, lecz wartość, wówczas aktualizacja takiej danej wirtualnej jest uważana za niemożliwą. Tę tezę przyjmuje się jak aksjomat. Ta teza jest błędna i prowadzi do niepotrzebnych ograniczeń w aktualizacji perspektyw, czyli złamania zasady przezroczystości. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 15 październik 2004 Krytyka dotychczasowych podejść (2) Badania dotyczące aktualizowalności perspektyw zostały zepchnięte na fałszywy tor: badano, jak zapobiec niepożądanym aktualizacjom (setki artykułów), a nie jak zapewnić pełną przezroczystość. Problem aktualizowalnych perspektyw dla obiektowych, obiektowo-relacyjnych i XML-owych baz danych znajduje się w stanie niemowlęcym. Typowe podejścia do obiektowych języków zapytań i perspektyw dzielą je na „zachowujące obiekty” i „generujące obiekty”. Tylko perspektywy „zachowujące obiekty” mogą być aktualizowalne. • To powoduje, że większość użytecznych perspektyw staje się nieaktualizowalna. Inne podejście zakłada ortodoksyjną hermetyzację: każdy atrybut A jest związany z metodami getA oraz setA. • Problem aktualizowalnych perspektyw znika. Po zdefiniowaniu wirtualnych obiektów wystarczy napisać metody getA i setA dla wszystkich atrybutów A wprowadzonych w definicji perspektywy. • W ten sposób otrzymujemy magiczne rozwiązanie poważnego problemu poprzez prostą sztuczkę związaną z definicją hermetyzacji. Życie nie znosi jednak takich cudów i magii, zatem problem pozostaje. • Nieadekwatność, koncepcyjne wady ortodoksyjnej hermetyzacji były dyskutowane na wykładzie JPS w poprzednim semestrze. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 16 październik 2004 Rewolucyjna koncepcja • Załóżmy, że perspektywa MoiPracownicy w wyniku aktualizacji nazwiska szefa rzeczywiście przenosiłaby pracownika do innego działu. • Czy byłoby coś złego w takiej perspektywie? Odpowiedź: nie, taka perspektywa jest rozsądna. Jest ona jednak zabroniona przez kryteria aktualizowalności perspektyw. Wniosek: Kryteria aktualizowalności są koncepcyjną bzdurą. Razem z odrzuceniem tych kryteriów trzeba również odrzucić pomysł aktualizacji perspektyw poprzez efekty uboczne, czyli poprzez referencje zwracane przez wywołanie perspektywy. Nasza koncepcja polega na tym, aby wewnątrz definicji perspektywy jej twórca mógł wyrazić intencję każdej aktualizacji tej perspektywy. Intencję tę wyraża w postaci procedur, które są wywoływane w odpowiedzi na aktualizację danych wirtualnych. Takie właśnie podejście zostało zrealizowane (niezależnie) w koncepcjach perspektyw opartych na trygerach instead of. Nasze rozwiązanie jest bardziej eleganckie i bardziej uniwersalne. Pasuje do dowolnych baz danych: relacyjnych, obiektowych, XML-owych, itd. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 17 październik 2004 Założenia metody aktualizacji perspektyw Odrzucamy wszystkie pseudo-teorie posiadające swoje korzenie w modelu relacyjnym i opieramy rozwiązanie na SBA. Wszelkie konsekwencje aktualizacji perspektywy muszą być określone przez osobę definiującą perspektywę. • Nie dopuszczamy aktualizacji perspektywy poprzez referencje zwrócone przez perspektywę. Definiujący perspektywę ma do dyspozycji algorytmicznie kompletne środki do określania intencji aktualizacji. • Środki określania tej intencji są inherentną składową definicji perspektywy. Istotą podejścia jest przeciążanie generycznych operatorów imperatywnych zastosowanych do wirtualnych obiektów przez procedury. Procedury te wyrażają intencję aktualizacji. Po zdefiniowaniu perspektywy użytkownik nie może odczuć jakichkolwiek różnic w operowaniu rzeczywistymi i wirtualnymi obiektami. Perspektywy mogą być rekurencyjnie i mogą posiadać parametry. Zakładamy zachowanie zasady relatywizmu, pełnej wewnętrznej identyfikacji, kontrolowania zakresów nazw, formalnej semantyki całego mechanizmu. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 18 październik 2004 Zasada relatywizmu Definicja perspektyw będzie podlegać zasadzie relatywizmu. • Oznacza ona m.in., że perspektywa może mieć podperspektywy. • Jeżeli obiekt wirtualny ma atrybuty, to każdy z nich musi być zdefiniowany jako podperspektywa. • Liczba poziomów hierarchii podperspektyw jest nieograniczona. • Każda perspektywa i podperspektywa ma identyczną składnię, semantykę i pragmatykę, w szczególności, w zakresie aktualizacji. Jeżeli np. BogatyPracownik jest perspektywą, to podperspektywą może być Zarobek. • Wynika stąd, że obiekty wirtualne mogą być również atomowe (nie muszą zawierać „atrybutów”). • Jest to oczywiste dla zwolenników relatywizmu (i podejścia stosowego), natomiast jest pewną nowością dla społeczności baz danych. Hierarchia perspektyw/podperspektyw odpowiada hierarchii obiektów wirtualnych. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 19 październik 2004 Zagnieżdżanie perspektyw i obiektów wirtualnych Definicja zagnieżdżonych perspektyw Obiekty wirtualne P Perspektywa P A A C Perspektywa A B Perspektywa B Perspektywa X X Perspektywa Y Perspektywa C Y P A B X © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 20 X X Y październik 2004 Zapamietanie definicji perspektywy i operacje administracyjne nad zapamiętanymi definicjami W odróżnieniu od SQL, nazwa obiektów wirtualnych dostarczanych przez perspektywę jest różna od nazwy zarządczej definicji perspektywy. • Nasza perspektywa posiada strukturę, którą należy zarządzać. • Nazwa zarządcza jest potrzebna aby wstawić, usunąć, zmienić, odpytać definicję. Definicje perspektyw są złożonymi obiektami zapamiętanymi w składzie. Definicje perspektyw, jako złożone obiekty, mogą być odpytywane i aktualizowane przez SBQL. Operacje administracyjne na definicjach perspektyw: • kompilacja kodu źródłowego perspektywy, • wstawienie kodu wynikowego nowej perspektywy w odpowiednie miejsce składu, • zmiana i usunięcie definicji perspektywy. Operacje te może wykonywać administrator bazy danych lub programista za pomocą operacji wbudowanych w środowisko programistyczne Operacje są ograniczone regułami dostępu i bezpieczeństwa. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 21 październik 2004 Ziarna obiektów wirtualnych (1) Dotychczas definicja perspektywy była określona przez jedno zapytanie (SQL). W takim przypadku występują jednak trudności z odtworzeniem informacji semantycznej niezbędnej do aktualizacji obiektów wirtualnych. • Np. perspektywa zwraca nazwisko kierownika działu jako string oraz lokację tego działu również jako string. Jeżeli za pomocą tej perspektywy chcielibyśmy zmienić lokację działu, to potrzebna jest referencja do tego działu. • Odzyskanie tej referencji jest utrudnieniem dla programisty. Definicja perspektywy powinna więc w takim przypadku składać się z dwóch lub więcej zapytań. • Pierwsze z nich zwracałoby referencje do działów, • Drugie na podstawie tych referencji zwracałoby nazwiska kierowników działów jako stringi, • Trzecie na podstawie tych referencji zwracałoby lokalizacje działów jako stringi. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 22 październik 2004 Ziarna obiektów wirtualnych (2) Elementy zwracane przez pierwsze zapytanie będziemy nazywać „ziarnami”, z których „wyrastają” obiekty wirtualne. Ziarna są następnie używane przez dalsze składowe definicji perspektywy. Ziarna mogą być proste (pojedyncze wartości lub referencje) lub dowolnie złożone. ziarna obiekty wirtualne Na ogół ziarno będzie binderem, ale nie jest to wymagane. Istotne jest natomiast, aby funkcja nested działająca na ziarnie zwróciła niepustą wartość. Przyjęliśmy, że ziarna są wyznaczane przez procedurę funkcyjną o dowolnej złożoności. W stosunku do SQL jest to istotna generalizacja. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 23 październik 2004 Przykładowe definicje ziaren Prac where Zar > 10000 distinct( Prac.Stan ) as s bag(„analityk”, „programista”, „inżynier”) as z Prac as p © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 24 Ziarna wyznaczają wirtualne obiekty dobrze zarabiających pracowników. Ziarna (nazwane s) wyznaczają wirtualne obiekty dla stanowisk Trzy ziarna (nazwane z) wyznaczają trzy wirtualne obiekty dla wymienionych stanowisk. Ziaren jest tyle, ile pracowników; każde z nich jest referencją do obiektu Prac, nazwaną p październik 2004 Definicja perspektywy: tekstowa i w wersji obiektu bazy danych Przyjmujemy, że perspektywa po kompilacji jest obiektem bazy danych. Obiekt ten ma budowę hierarchiczną. create view BogatyPracDef { virtual objects BogatyPrac { return (Prac where Zar > 10000) as p } on_delete { ... } ... create view ZarobekDef { virtual objects Zarobek { return p.Zar as z} on_update( nowyZar ) do {...} ... } .... //dalsze elementy definicji BogatyPracDef BogatyPrac ......... on_delete Kompilacja } © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 25 ZarobekDef Zarobek on_update ..... Hierarchię tę można odpytywać i aktualizować przy pomocy SBQL. październik 2004 Identyfikatory wirtualne (1) Podstawowym problemem, który został rozwiązany w prezentowanej metodzie, jest wynalezienie sposobu przekazania informacji o aktualizacji obiektu wirtualnego do odpowiedniej procedury. Po wykonaniu funkcji definiującej obiekty wirtualne zostają zwrócone wyniki zapytania, ale zgubiona jest informacja, że wyniki pochodzą z perspektywy, a nie ze zwyczajnego zapytania. Powstaje problem, w jaki sposób w np. zleceniu: for each BogatyPrac where Zarobek < 20000 do Zarobek := Zarobek +1000 system ma się dowiedzieć, że aktualizacja dotyczy wirtualnego obiektu i w związku z tym, wywołać odpowiednią procedurę przeciążającą będącą składnikiem definicji perspektywy? Której perspektywy? W jaki sposób ma przekazać parametry tej aktualizacji do wnętrza tej procedury? Problem ten jest rozwiązany przez identyfikator wirtualny. • Jest on odpowiednikiem lub substytutem identyfikatora obiektu zapamiętanego. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 26 październik 2004 Identyfikatory wirtualne (2) W zapytaniach odwołujemy się do perspektywy poprzez nazwę obiektów wirtualnych. • np. BogatyPrac where Nazw = "Kowalski" Dla celów zarządczych można użyć nazwy zarządczej. • Uprawnienia mogą być zróżnicowane, np. programista może używać wyłącznie nazwy obiektów wirtualnych, natomiast administrator - wyłącznie nazwy zarządczej. Wywołanie perspektywy powoduje wykonanie procedury definiującej ziarna. Wynikiem wywołania nie są same ziarna, lecz identyfikatory wirtualne. Identyfikator wirtualny jest trójką: <flagaJestemWirtualny, NazwaZarządcza, Ziarno> lub równoważnie: < flagaJestemWirtualny, ReferencjaDoPerspektywy, Ziarno> © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 27 październik 2004 Rola identyfikatorów wirtualnych Są odpowiednikiem identyfikatorów zapamiętanych obiektów. Na podstawie flagi wiadomo, że jest to identyfikator wirtualny, z którym interpreter SBQL musi postępować inaczej niż ze zwykłym identyfikatorem. Na podstawie nazwy zarządczej (lub referencji do perspektywy) wiadomo o którą perspektywę chodzi. Poprzez ziarno wyznaczają obiekt wirtualny w sposób jednoznaczny. Wszelkie operacje w podejściu stosowym zostaną zmodyfikowane w taki sposób, aby uwzględnić identyfikatory wirtualne; w szczególności: • operator dereferencji • funkcja nested i sposób wkładania nowych sekcji na stos ENVS • operatory podstawienia (update), usunięcia (delete) i wstawiania (insert) działające na takim identyfikatorze interpretowanym jako l-value Typowe operacje na identyfikatorze wirtualnym pozostają nie zmienione (np. zakomunikowanie go jako parametru, zwrócenie jako wyniku procedury funkcyjnej, uczestniczenie w operatorach algebraicznych) © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 28 październik 2004 Przepływ sterowania pomiędzy elementami mechanizmu aktualizacji perspektyw Program użytkownika Zapytanie wywołujące perspektywę Definicja perspektywy Identyfikatory wirtualne Konsument wyniku zapytania (np. operator podstawienia) Procedura wewnątrz definicji perspektywy przeciążająca danego konsumenta Interpreter zapytań oraz zleceń aktualizacyjnych Fragment interpretera implementujący danego konsumenta © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 29 październik 2004 C.D.N. Operatory „konsumujące” identyfikatory wirtualne Składnia definicji perspektywy i pod-perspektywy Wirtualny identyfikator dla perspektyw Co się dzieje na stosie ENVS w momencie wywołania perspektywy i w momencie aktualizacji obiektów wirtualnych? Przykłady zastosowania aktualizowalnych perspektyw. • Przykłady te ilustrują moc mechanizmu, o której nie śniło się nawet tysiącom wybitnych specjalistów, którzy przez ostatnie 30 lat pracowali nad tym tematem. © K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 2, Folia 30 październik 2004