Podejście stosowe do obiektowych języków programowania baz danych http://www.sbql.pl Kazimierz Subieta Polsko-Japońska Wyższa Szkoła Technik Komputerowych [email protected] http://www.ipipan.waw.pl/~subieta K.Subieta: Podejście stosowe Wykład 01 Wprowadzenie do SBA i SBQL 1/30 Plan wykładu • • • • • • • • • Geneza i motywacje języka SBQL Podejście stosowe do obiektowych języków zapytań Architektura przetwarzania zapytań i programów Zapytania i programy w SBQL Wirtualne aktualizowalne perspektywy Optymalizacje w SBQL System ODRA i jego środowisko Obecny stan rozwoju języka SBQL Podsumowanie K.Subieta: Podejście stosowe 2/30 Geneza i motywacje języka SBQL • W połowie lat 1980-tych zwrócono uwagę na braki teorii i technologii baz danych (BD) – Mit „solidnych matematycznych podstaw” relacyjnych BD • algebra relacji < 10% funkcjonalności języka SQL – „Niezgodność impedancji 1”: negatywny efekt połączenia języka zapytań z uniwersalnym językiem programowania – „Niezgodność impedancji 2”: obiektowe projektowanie i programowanie sprzeczne z relacyjnymi BD • Lata 1990-te: obiektowość w modelowaniu, projektowaniu, programowaniu i opr. pośredniczącym • Popularność obiektowych języków programowania • Liczne pomysły i realizacje obiektowych BD K.Subieta: Podejście stosowe 3/30 Motywacja: obiektowość • Obiektowość jest ideologią informatyczną o luźno zarysowanych założeniach, pojęciach i granicach. – Różnice pomiędzy różnymi koncepcjami obiektowości są fundamentalne, np. różnice pomiędzy modelem obiektowym notacji UML i modelem obiektowym języka SQL-99. • Centralny motyw: dopasowanie modeli komputerowych do własności ludzkich zmysłów i mózgu oraz mechanizmów percepcji i rozumienia świata. • Świat jest postrzegany przez ludzi jako mnogość obiektów, powiązań pomiędzy obiektami oraz zachowania się obiektów. • Klasyfikacja obiektów na podstawie ich niezmienników. K.Subieta: Podejście stosowe 4/30 Motywacja: brak niezgodności impedancji • Niezgodność impedancji 1: w językach programowania zapytania są stringami – Różnice: składnia, semantyka, typy, fazy wiązania, … • Lek → język programowania baz danych zintegrowany z językiem zapytań • Niezgodność impedancji 2: obiektowy wynik analizy i projektowania zniekształcony poprzez odwzorowanie do schematu relacyjnego. – Odwzorowanie odwrotne często niemożliwe i bezsensowne • Lek → obiektowy schemat bazy danych – Najlepiej zgodny z językiem analizy i modelowania, np.UML K.Subieta: Podejście stosowe 5/30 Geneza SBA i SBQL • Habilitacja z podejścia stosowego (SBA) do zapytań 1988 • Implementacje Netul i Loqis 1989-1991 – Potem długo nic. • Powrót do koncepcji: rok 2000 – Wykłady i seminaria z podejścia stosowego na PJWSTK – Projekt ODRA: 2003 – do dzisiaj; pełna implementacja SBQL • Projekty europejskie (6 PR) – eGov Bus – rozwinięcie języka SBQL jako uniwersalnego obiektowego języka programowania baz danych, 2006 – 2008 – VIDE – inne rozwinięcie SBQL, 2006-2008 • 2 habilitacje, 14 obronionych doktoratów, ~ 50 prac mgr K.Subieta: Podejście stosowe 6/30 Główne cechy SBQL • Obiektowy, zintegrowany język zapytań i programowania. – – – – – – Formalna semantyka Unifikacja wyrażeń języka programowania z zapytaniami. Bazuje na SBA i modelu obiektowym UML. Mocna kontrola typologiczna. Prototyp kompilatora zrealizowany w systemie ODRA. Wyposażony w wiele nowoczesnych udogodnień (klasy, metody, tranzytywne domknięcia, aktualizowalne perspektywy, itd.) – Interfejsy z popularnych języków programowania (Java, C#, …). – Interfejsy do XML, relacyjnych baz danych, Web Services, … – Wirtualne obiektowe perspektywy jako podstawa integracji heterogenicznych i rozproszonych baz danych. K.Subieta: Podejście stosowe 7/30 Czy formalna semantyka jest potrzebna? • Większość języków zapytań (SQL, OQL, HQL, Xquery, LINQ,…) nie dba o formalną semantykę. Ale… • Jeżeli nie ma formalnej semantyki, to nigdy nie będzie właściwego standardu języka. – Każda implementacja będzie inna, patrz np. SQL • Formalna semantyka umożliwia wnioskowanie o języku – Np. o redundancji pewnych konstrukcji lub braku pełnej funkcjonalności • Formalna semantyka jest warunkiem opracowania uniwersalnych metod optymalizacji zapytań – Bez optymalizacji język zapytań jest nieakceptowalny dla bardzo dużych baz danych. K.Subieta: Podejście stosowe 8/30 Podstawy podejścia stosowego (SBA) • Dla potrzeb formalnej semantyki języka zapytań i programów należy zdefiniować: – Dziedzinę syntaktyczną zapytań i programów Q w postaci składni abstrakcyjnej – Zbiór wszystkich stanów Stan (bazy danych, ale nie tylko) – Zbiór wszystkich rezultatów zapytań Rezultat • Dla każdego elementu q z dziedziny Q, należy zdefiniować odwzorowanie go w znaczenie (semantykę) • Dla zapytań będzie to funkcja |q|: Stan → Rezultat. – Musimy zadbać o modularność, czyli taką definicję, która pozwoli na budowanie semantyki dowolnie złożonych zapytań poprzez rekurencyjne złożenie semantyk jego komponentów. K.Subieta: Podejście stosowe 9/30 SBA: co to jest „stan”? • Zazwyczaj, pojęcie "stanu" jest utożsamiane ze "stanem bazy danych". Jest to uproszczenie i ograniczenie. – Interesować nas będzie także stan nietrwałych zmiennych/obiektów używanych przez programy aplikacyjne, procedury, funkcje, metody, itd. – Całość trwałych i nietrwałych zmiennych/obiektów będziemy nazywać składem obiektów – Skład zawiera także pewne cechy globalnego środowiska, takie jak czas bieżący, datę, login aktualnego użytkownika, itd. – Interesować nas będzie także chwilowy stan przetwarzania, który jest odwzorowany w postaci stosu środowisk (ENVS) • Stan = Stan składu obiektów + Stan stosu środowisk K.Subieta: Podejście stosowe 10/30 Po co stos środowisk? – Jest to jedno z najważniejszych pojęć wszystkich współczesnych języków programowania • Stos ten jest odpowiedzialny za: – – – – Kontrolowanie zakresów nazw i wiązanie tych nazw; Przechowywanie wartości lokalnych zmiennych procedur; Przechowywanie parametrów aktualnych funkcji i procedur; Przechowywanie śladu powrotu, czyli adresu do którego ma wrócić sterowania po zakończeniu działania procedury. • W SBA stos ten ma jeszcze jedną funkcję: umożliwia pełne sformalizowanie tzw. operatorów niealgebraicznych – W SBA operatory selekcji, projekcji/nawigacji, złączenia, kwantyfikatory, itd. są operatorami niealgebraicznymi – Niemożliwa poprawna formalizacja w ramach dowolnej algebry K.Subieta: Podejście stosowe 11/30 Dalsze cechy SBA • Stos rezultatów zapytań QRES • Formalna semantyka wyrażona w postaci abstrakcyjnej implementacji (semantyki operacyjnej) – Abstrakcyjna maszyna zdefiniowana w sposób zrozumiały dla potencjalnego programisty kompilatora • Dla każdej konstrukcji składniowej maszyna przyporządkowuje akcje na trzech strukturach danych: – Skład obiektów – Stos środowisk – Stos rezultatów }Stan • Ta konstrukcja semantyki wymaga od czytelnika więcej niż algebra relacji. Ale też oferuje pełną uniwersalność. K.Subieta: Podejście stosowe 12/30 Architektura przetwarzania zapytań i programów zapytanie/ program Parser Abstrakcyjne drzewo składniowe (AST) AST po kontroli typów Zoptymalizowane AST Kontrola typów Optymalizator zapytań Kompilator do kodu bajtowego metabaza Statyczny stos środowisk S_ENVS Statyczny stos rezultatów S_QRES Kod bajtowy Ewaluator zapytań/programów (maszyna wirtualna) Skład obiektów K.Subieta: Podejście stosowe Dynamiczny stos środowisk ENVS Dynamiczny stos rezultatów QRES 13/30 Składnia SBQL • Pełna ortogonalność: wszystko można kombinować ze wszystkim, jeżeli tylko ma to sens i jest zgodne z typami • Unifikuje wyrażenia języka programow. oraz zapytania – Jak dotąd, unikalna własności wśród wszystkich języków zapytań zintegrowanych z językami programowania. – 2+2, x*y, sin(x), Pracownik where nazwisko = ”Kowalski” • Operatory algebraiczne i niealgebraiczne – Wszystkie operatory są unarne lub binarne, – Brak dużych syntaktycznych zlepków a la SQL: select…from…where…group by…having…order by… • Procedury, funkcje, metody, perspektywy K.Subieta: Podejście stosowe 14/30 Semantyka SBQL • Zasada kompozycyjności: semantyka konstrukcji złożonej jest funkcją semantyk jej komponentów • Operatory algebraiczne: nie używają ENVS • Operatory niealgebraiczne: używają ENVS • Semantyka operatorów definicji pomocniczych nazw – Nieobecna w innych formalizacjach – Operator as: q as n - przypisuje nazwę n do wszystkich elementów zwróconych przez zapytanie q – Operator group as: q group as n – przypisuje nazwę n do rezultatu zwróconego przez q • Zapytania mogą być parametrami procedur i metod • Zapytania określają wynik procedur i metod funkcyjnych K.Subieta: Podejście stosowe 15/30 Prosty schemat BD a la UML Osoba[0..*] imię: string nazwisko: string wiek: integer nazwImię(): string Dział [0..*] nazwa: string lokacja[1..*]: string zatrudnia[0..*] pracujeW Student [0..*] rok: integer oceny[0..*]: integer średniaOcen(): real szef kieruje[0..1] Prac[0..*] pensja: real zajęcie: string prowadzi[1..*] uczestniczy[1..*] Kurs[0..*] nazwaK: string maUczestnika[1..20] trwa: integer prowadzonyPrzez K.Subieta: Podejście stosowe 16/30 Przykłady zapytań w SBQL • Podaj imię i nazwisko szefa Nowaka: (Prac where nazwisko = “Nowak”). pracujeW. Dział. Szef. Prac. (imię, nazwisko) • Dla każdego działu podaj średnią średnich ocen studentów kursów prowadzony przez pracowników danego działu: (Dział as d). (d, avg(d. zatrudnia. Prac. prowadzi. Kurs. maUczestnika. Student. średniaOcen)) K.Subieta: Podejście stosowe 17/30 Instrukcje imperatywne w SBQL • Dla każdego nauczyciela starszego niż 45 lat i zarabiającego mniej niż średnia daj podwyżkę do wysokości 10% wyższej niż średnia: for each avg(Prac.pensja) as a join (Prac where zajęcie = ”nauczyciel” and wiek > 45 and pensja < a) do pensja := a * 1.1; • Przenieś Nowaka do działu kierowanego przez Walaska i zmień mu stanowisko na inżynier: for Prac where nazwisko = ”Nowak” do { pracujeW := (Dział where (szef. Prac. nazwisko) = ”Walasek”); zajęcie := ”inżynier”; } K.Subieta: Podejście stosowe 18/30 Procedury w SBQL • Procedure Przenieś ma dwa parametry: (1) bag stringów reprezentujących stanowiska i (2) referencję do działu. Procedura przenosi wszystkich pracowników mających stanowisko wymienione w parametrze 1 do działu wyspecyfikowanego w parametrze 2. procedure Przenieś(z: string[0..*]; nowyD: ref TypDział) { for each (Prac where zajęcie in z) do pracujeW := nowyD; } Podstawienie na dwukierunkowy pointer pracujeW/zatrudnia. • Przenieś wszystkich analityków i maklerów do Walaska: Przenieś( bag(“analityk”, “makler”); Dział where (szef.Prac.nazwisko) = “Walasek”); K.Subieta: Podejście stosowe 19/30 Wirtualne aktualizowalne perspektywy • Są odpowiednikiem perspektyw (views) w SQL, ale: – Bazują na modelu obiektowym, a nie relacyjnym. – Język definiowania perspektyw posiada pełną moc algorytmiczną i pragmatyczną (której SQL nie posiada). – Mechanizm aktualizacji wirtualnych obiektów jest znacznie bardziej uniwersalny niż to ma miejsce w SQL. • Daje to podstawę implementacji dowolnych osłon lokalnych źródeł danych, w tym osłon z możliwością aktualizacji. – Język definiowania perspektyw może odwoływać się do funkcji protokołu komunikacyjnego. • Perspektywy mogą być użyte do budowy integratora źródeł danych. – Perspektywy SBQL mają znacznie większy potencjał optymalizacyjny w stosunku do perspektyw SQL. K.Subieta: Podejście stosowe 20/30 Co mogą perspektywy w SBQL? – Perspektywa PracSzef dla wszystkich pracowników zwraca nazwisko pracownika (NazwPrac) i nazwisko szefa (NazwSzefa) jako stringi. Podstawienie na NazwSzefa powoduje przeniesienie pracownika do odpowiedniego działu: – Przenieś Nowaka do działu Walaska: (PracSzef where NazwPrac=”Nowak”).NazwSzefa := ”Walasek”; – Perspektywa DziałŚrPens zwraca nazwę działu (Nazwa) i średnią pensję (ŚrPens) w tym dziale. Podstawienie na średnią pensję powoduje podwyżkę zarobków w tym dziale proporcjonalną do aktualnych zarobków pracowników i do ich oceny. – Podnieś o 200 średnią pensję w dziale „Lalki”: for DziałŚrPens where Nazwa = „Lalki” do ŚrPens += 200; K.Subieta: Podejście stosowe 21/30 Perspektywa integrująca rozproszone źródła danych • Używa funkcji protokołu komunikacyjnego. – Załóżmy, ze mamy 3 serwery o adresach Kalisz, Lublin i Kielce Integracja źródeł danych view MoiPracDef { virtual MoiPrac: PracType [0..*]; seed: record{s:ServerType, p: PracType} { return ((Kalisz as s) join (s.Prac as p)) union (((Lublin as s) join (s.Prac as p)) union (((Kielce as s) join (s.Prac as p)) } on_retrieve{ connect (s); return p.(nazwisko, imię, adres, zawód, PZ); }; on_delete do { connect (s); remoteDelete (p) }; //Dalsze części definicji perspektywy … } K.Subieta: Podejście stosowe 22/30 Architektura integracji heterogenicznych i rozproszonych danych Aplikacje Aplikacja 1 Aplikacja 2 Aplikacje 3 Warstwa komunikacyjna Zapytania do wirtualnych danych i rezultaty zapytań Procesor języka dostępu do wirtualnych danych Architektura wirtualnego repozytorium w systemie ODRA Zintegrowane wirtualne dane Integrator źródeł danych Warstwa komunikacyjna Zunifikowany schemat wirtualnych danych Istniejące zasoby danych K.Subieta: Podejście stosowe Osłona 1 Osłona 2 Źródło danych 1 Źródło danych 2 Osłona 3 Źródło danych 3 …per …. applicatio n 23/30 Optymalizacja zapytań • Wysoki poziom abstrakcji zapytań powoduje, że czas odpowiedzi bez optymalizacji jest nieakceptowalny. – Dla bardzo dużych baz danych nawet proste zapytania mogą wymagać godzin lub dni na najszybszych komputerach. – Optymalizacja musi skrócić czas odpowiedzi tysiące razy. • Na szczęście, języki zapytań i ich środowiska zawierają ogromną liczbę możliwości optymalizacyjnych. – Wiele z nich wykorzystuje SQL • Dzięki formalnej semantyce podejście stosowe doskonale nadaje się do rozwoju metod optymalizacji zapytań. – Jak pokazały testy, znacznie lepiej niż SQL – Brak optymalizacji w OQL, OCL, HQL, LINQ, XQuery,… K.Subieta: Podejście stosowe 24/30 Metody optymalizacyjne w SBQL • Metody oparte na przepisywaniu zapytań: – Wyciąganie niezależnych podzapytań przed operator pętli : Prac where pensja > ((Prac where nazwisko= ”Nowak”).pensja) – Wyciąganie słabo zależnych podzapytań przed operator pętli – Wyciąganie selekcji przed konstruktor struktur (join) – Usuwanie martwych podzapytań (nie wpływających na wynik) – Usuwanie niepotrzebnych pomocniczych nazw – Traktowanie funkcji jako makrosów (query modification) • • • • Metody bazujące na zastosowaniu indeksów Metody bazujące na zapamiętywaniu wyników zapytań … Optymalizacje zapytań do rozproszonych BD K.Subieta: Podejście stosowe 25/30 System ODRA • Object Database for Rapid Application development • Główny motyw: nowy paradygmat rozwoju aplikacji biznesowych opartych na bazie danych – Częściowo motywowany chęcią uporządkowania setek chaotycznych języków i narzędzi dookoła języka Java i innych – Język SBQL – pełna integracja języka programowania z językiem zapytań, wysoki poziom abstrakcji programów – Radykalne skrócenie kodu i czasu programowania (~10 razy) • Jest próbą utworzenia pojedynczego, uniwersalnego, zintegrowanego, spójnego i minimalnego środowiska tworzenia zastosowań biznesowych. • Ma jeszcze status prototypu (wersja alfa). K.Subieta: Podejście stosowe 26/30 Środowisko systemu ODRA • ODRA składa się z trzech zintegrowanych komponentów: – System zarządzania obiektową bazą danych – Kompilator języka SBQL i wirtualna maszyna SBQL – Interfejsy z/do zewnętrznych technologii • Instalacja ODRA może pracować jako klient i jako serwer – Możliwe jest tworzenie rozproszonych baz danych • Zewnętrzne technologie: – – – – – Dostęp do relacyjnych baz danych (18 typów RDBMS) Importer/eksporter plików XML oraz RDF Dostęp do Web Services, możliwość tworzenia Web Services Interfejs do programów w Java, interfejs z Java do SBQL ... K.Subieta: Podejście stosowe 27/30 Obecny stan rozwoju SBQL • ODRA – ciągle rozwijana • SBQL jest hasłem w ogromnej (4 tomy) i prestiżowej encyklopedii baz danych Springera – Jedyne hasło w tej encyklopedii pochodzące z Polski • SBQL został zaproponowany jako podstawa rozwoju standardu OMG obiektowych baz danych • SBQL4J – zintegrowanie języka SBQL z językiem Java – Inspirowane przez C#/LINQ • SBQL4Workflow – rozwinięcie w kierunku workflow • Loxim – system tworzony na Uniwersytecie Warszawskim • Obecny rozwój: projekt strategiczny SYNAT K.Subieta: Podejście stosowe 28/30 Podsumowanie • SBQL jest pierwszym w historii językiem, który integruje zapytania i programy oraz unifikuje zapytania i wyrażenia. – Całkowity brak niezgodności impedancji – Podobne propozycje: PL/SQL, Transact SQL, C#/LINQ, SQL 1999, SQL2008, … są nią w jakimś stopniu obciążone • Unikalne cechy SBQL: – – – – Model obiektowy i schemat bliskie UML Wirtualne aktualizowalne obiektowe perspektywy Zaawansowane metody optymalizacyjne Duża kolekcja interfejsów z/do zewnętrznych technologii • Prowadzone są nadal prace na rozwojem SBQL K.Subieta: Podejście stosowe 29/30 Dziękuję za uwagę! Pytania? Komentarze? K.Subieta: Podejście stosowe 30/30