Prof. dr hab. inż. Stanisław Kozielski Instytut Informatyki Politechnika Śląska Gliwice, 29.04.2015 r. Recenzja rozprawy doktorskiej Aleksandry Boniewicz pt.: „Optymalizacja warstwy dostępu do danych w aplikacjach korzystających z odwzorowań obiektoworelacyjnych” Promotor rozprawy: prof. dr hab. Krzysztof Stencel Promotor pomocniczy: dr inż. Piotr Wiśniewski 1. Aktualność i znaczenie tematyki rozprawy Rozprawa dotyczy systemów odwzorowań obiektowo-relacyjnych (ORM – ang. objectrelational mapping). Systemy ORM tworzą sporą grupę narzędzi i środowisk programistycznych, które wyrosły z potrzeb programistów tworzących aplikacje, czyli programy użytkowe, korzystające z baz danych. Problemem w tym procesie jest odmienność obiektowego modelu danych w obiektowych językach programowania, powszechnie stosowanych obecnie do budowy aplikacji i relacyjnego modelu danych, będącego podstawą większości komercyjnych systemów zarządzania bazami danych. Narzędzia ORM udostępniają projektantowi obiektowej aplikacji mechanizmy umożliwiające trwałe przechowywanie obiektów w relacyjnej bazie danych oraz operowanie tymi obiektami z pełną kontrolą transakcyjności. Narzędzia te automatyzują więc proces transformacji danych obiektowych, używanych w aplikacji, na postać danych przechowywanych w relacyjnej bazie danych (i odwrotnie). W strukturze całego systemu informatycznego narzędzia ORM tworzą zazwyczaj dodatkową warstwę pośredniczącą między aplikacją a bazą danych. Systemy ORM budowane są dla określonych języków programowania, natomiast obejmują one jak najszerszy zestaw systemów zarzadzania bazami danych. To rodzi pewien problem, bowiem język SQL, który stanowi podstawę dostępu do relacyjnych baz danych, nie we wszystkich systemach baz danych został zaimplementowany tak samo, a w niektórych systemach niektóre funkcje SQL-a, zwykle rzadziej używane, nie zostały zaimplementowane w ogóle. Przykładem mogą być tzw. zapytania rekurencyjne, wprowadzone dopiero w standardzie SQL:1999, przy czym niektóre firmy tworzące systemów baz danych opracowały już wcześniej własne rozwiązania (np. IBM w DB2 i Oracle). W rezultacie implementacje zapytań rekurencyjnych w różnych systemach baz danych różnią się między sobą, a w niektórych, np. popularnym systemie MySQL, funkcja ta w ogóle nie została zaimplementowana. To m.in. jest przyczyną, że w systemach ORM nie rozwinięto mechanizmów obsługi zapytań rekurencyjnych. W ocenianej rozprawie podjęto próbę rozszerzenia funkcjonalności warstwy odwzorowań obiektowo-relacyjnych o mechanizmy obsługi zapytań rekurencyjnych, rozważając dwa zasadniczo różne przypadki, kiedy w implementacji języka SQL dla danej bazy są dostępne zapytania rekurencyjne, a także kiedy ich brak. Rozpatrzono też wpływ na wydajność wykonywania zapytań rekurencyjnych danych redundantnych, które mogą być materializowane w procesie obsługi bazy danych. 1 Prace nad rozwojem narzędzi ORM są w dalszym ciągu prowadzone, więc podjęcie tematu, który umożliwia rozszerzenie funkcjonalności tych systemów uważam za aktualne i celowe. Rozważając znaczenie podjętego tematu należałoby postawić też pytanie, na ile zapytania rekurencyjne są problemem istotnym dla aplikacji korzystających z baz danych. Dla części aplikacji nie jest to zadanie typowe i pierwszoplanowe. Jednak dane o strukturze hierarchicznej oraz dane grafowe nie są rzadkością w bazach danych, a uwzględnienie powiązań hierarchicznych, a także powiązań w postaci grafu prowadzi do zapytań rekurencyjnych. Autorka pracy przedstawiła statystykę pokazującą skalę obecności tego typu danych i zapytań w wybranej kategorii systemów informatycznych (systemów obsługi studiów). Reasumując, uważam że rozprawa dotyczy aktualnej i wystarczająco ważnej problematyki badawczej. 2. Zakres pracy Praca składa się z siedmiu rozdziałów, czterech dodatków i bibliografii. W pierwszym rozdziale zdefiniowano elementarne pojęcia dotyczące relacyjnego modelu danych oraz obiektowego modelu programowania, a następnie scharakteryzowano bardzo krótko narzędzia realizujące odwzorowania obiektowo-relacyjne. Sformułowano też cel rozprawy, wymieniono wyniki uznane przez autorkę za najważniejsze i przedstawiono strukturę pracy. Cel pracy niepotrzebnie został zdefiniowany nazbyt ogólnie, dopiero dalsza treść punktu 1.1.1 pracy doprecyzowuje zakres badań. Drugi rozdział pracy zawiera w pierwszej części podstawowe informacje o wybranych w pracy rozwiązaniach ORM: JPA – standardzie ORM dla języka Java oraz Hibernate popularnym systemie ORM wykorzystującym standard JPA. Autorka przyjęła tu dość dyskusyjną formę prezentacji sposobu odwzorowania obiektów na relacje – listingi plików 2.1 – 2.4 i omawianie ich szczegółów można by przenieść do dodatków. W drugiej części tego rozdziału krótko przedstawiono historię implementacji zapytań rekurencyjnych w języku SQL i składnię tych zapytań w standardzie SQL:1999. Omówiono też różnice w implementacji zapytań rekurencyjnych w różnych systemach zarządzania bazami danych. Trzeci rozdział zawiera opis bazy danych wykorzystanej do eksperymentalnej oceny wydajności programów implementujących metody omawiane bądź opracowane w kolejnych rozdziałach rozprawy. Opis ten jest nadzwyczaj skąpy: przedstawiono strukturę tabel, ale brak komentarzy, które mogłyby ułatwić interpretację danych. Przedstawiono również teksty 7 zapytań rekurencyjnych do zdefiniowanej bazy danych. W czwartym rozdziale pracy przedstawiono proponowane rozwiązanie interfejsu programistycznego rozszerzającego system Hibernate o możliwość kierowania zapytań rekurencyjnych do systemów baz danych, które takie zapytania realizują. Dla przykładowych tabel z danymi hierarchicznymi i danymi grafowymi (dającymi możliwość formułowanie rekurencyjnych zapytań) zaprezentowano przykłady różnego formułowania takich zapytań dla dwóch dostępnych w Hibernate sposobów odwzorowania obiektów na tabele: za pomocą plików konfiguracyjnych XML oraz użycia odpowiednich adnotacji w klasie Javy. Przeprowadzono testy wydajności opracowanych rozwiązań poprzez pomiar czasu wykonania zapytań rekurencyjnych dla różnych rozmiarów danych i trzech systemów zarządzania bazami danych. Komentując przedstawione rozwiązania można zwrócić uwagę, że osiągnięto zamierzony cel, jednakże sposób prezentacji treści rozdziału czwartego pozostawia spory niedosyt. Oba projekty interfejsu „spadają z nieba” i zostały przedstawione w postaci listingów odpowied- 2 nich plików i programów (wraz z komentarzami). Taki sposób prezentacji niezbyt przystaje do pracy doktorskiej. W rozdziale piątym przedstawiono projekt rozbudowy systemu odwzorowań obiektoworelacyjnych Hibernate o możliwość wykonania zapytań rekurencyjnych w tym systemie. Założono więc, że ORM Hibernate współpracuje z systemem zarządzania bazą danych, który nie realizuje rekurencyjnych zapytań języka SQL, natomiast w tabelach relacyjnej bazy danych są przechowywane dane o strukturze hierarchicznej lub dane grafowe. Rozpatrzono trzy metody realizacji zapytań rekurencyjnych: iterację bezpośrednią, rozwinięcie wszerz i rozwinięcie w głąb. Autorka zaimplementowała wszystkie trzy metody dla systemu Hibernate współpracującego z bazą danych MySQL i przeprowadziła testy porównujące te metody dla różnej liczby rekordów tabeli z danymi hierarchicznymi i różnej liczby poziomów zagłębienia rekursji. W szóstym rozdziale rozpatrzono możliwość przyspieszenia wykonywania zapytań rekurencyjnych poprzez wykorzystanie danych redundantnych, gromadzonych (zmaterializowanych) w bazie danych. Rozpatrzono dwa warianty przechowywania danych redundantnych: w dodatkowo utworzonej tabeli lub w dodatkowych kolumnach utworzonych w tabeli podstawowej, zawierającej dane o strukturze hierarchicznej. Dla każdego wariantu przedstawiono dwie metody wykorzystania danych redundantnych. W pierwszym wariancie analizowano metodę ścieżek pełnych, w której są wyznaczane i materializowane wszystkie ścieżki możliwe do utworzenia dla rozważanych danych hierarchicznych oraz metodę ścieżek logarytmicznych, w której nie przechowuje się wszystkich węzłów na drodze od korzenia do każdego węzła, a jedynie te pary węzłów, których odległość w hierarchii jest potęga dwójki. Metoda ścieżek pełnych jest znana z literatury, natomiast autorska metoda ścieżek logarytmicznych pozwala zachować kompromis między wielkością pomocniczej tabeli i kosztem jej budowy, a kosztem zadawania zapytań o połączenie węzłów hierarchii. Dla drugiego wariantu, wymagającego utworzenie dodatkowych kolumn, przedstawiono metodę zbiorów zagnieżdżonych oraz metodę ścieżek zmaterializowanych (obie znane z literatury). W pierwszej z tych metod do tabeli dodawane są dwie kolumny, do których są wpisywane liczby informujące o lewostronnych i prawostronnych powiązaniach każdego wiersza tabeli traktowanego jako węzeł struktury drzewiastej. W metodzie ścieżek zmaterializowanych do tabeli jest dodawana kolumna, w której w każdym wierszu umieszczana jest lista węzłów od danego węzła do korzenia drzewa. Analiza tekstu podrozdziału 6.2, w którym zaprezentowano wymienione wyżej metody, jest bardzo uciążliwa. Opis metod, a zwłaszcza przykładów, jest niezwykle oszczędny. W drugiej części rozdziału szóstego przedstawione zostały dwie grupy testów, którym poddano metody zapewniające realizację zapytań rekurencyjnych. Celem pierwszej było sprawdzenie, czy użycie danych redundantnych faktycznie skraca czas realizacji zapytań rekurencyjnych. Porównano metodę ścieżek pełnych z metodą rozwijania zapytań wszerz. W analizie wyników podkreślono, że ocena przydatności tych metod zależy od porównania częstości wykonywania zapytań i modyfikacji danych zmieniających hierarchiczne powiązania danych, a więc wymagających uaktualnienia tabeli zawierającej wszystkie ścieżki w hierarchii. Celem drugiej grupy testów było porównanie wzajemne wszystkich czterech metod korzystających z danych redundantnych, z uwzględnieniem narzutów czasowych jakie wprowadzają operacje modyfikacji danych (wstawienie, usunięcie, aktualizacja), zmuszające do aktualizacji danych redundantnych. Wskazano obszary, w których przeważają zalety poszczególnych metod. Zwrócono uwagę, że zastosowanie metod wymagającego utworzenia 3 dodatkowych kolumn do tabel podstawowych (zawierających np. dane hierarchiczne) może być nie do zaakceptowania w środowisku produkcyjnym bazy danych zawierającej te tabele. W trzeciej części rozdziału szóstego zaproponowano funkcje kosztu dla obciążenia bazy danych zapytaniami rekurencyjnymi i operacjami modyfikacji danych. Funkcje te opracowano dla wszystkich metod korzystających z danych redundantnych, na podstawie wyników omówionych eksperymentów. Ostatni, siódmy, rozdział pracy zawiera podsumowanie uzyskanych wyników. Zasygnalizowano też planowane w przyszłości zadania badawcze, które mają ułatwić praktyczne wykorzystanie rezultatów pracy. Do pracy dołączono cztery dodatki. W pierwszym zamieszczono wykaz tabel Uniwersyteckiego Systemów Obsługi Studiów zawierających dane hierarchiczne oraz listingi kilkunastu wybranych zapytań rekurencyjnych tego systemu. Drugi dodatek zawiera skrypt z poleceniami SQL-a tworzącymi tabele testowej bazy danych. W trzecim dodatku zamieszczono teksty procedur wypełniania i pielęgnacji danych redundantnych, wymaganych w metodach przedstawionych w rozdziale 6. Ostatni dodatek przedstawia wyniki dodatkowych testów dla czterech metod korzystających z danych redundantnych, uwzględniające selektywność zapytań. Kończąca rozprawę bibliografia zawiera wykaz 39 cytowanych w pracy źródeł. 3. Ocena pracy Autorka wykazała się gruntowną wiedzą z zakresu narzędzi odwzorowań obiektoworelacyjnych, a także problemów realizacji zapytań rekurencyjnych w bazach danych. Do ważniejszych rezultatów badawczych uzyskanych w rozprawie zaliczam: opracowanie interfejsu programistycznego rozszerzającego narzędzia odwzorowań obiektowo-relacyjnych (na przykładzie systemu Hibernate) o możliwość kierowania zapytań rekurencyjnych do systemów baz danych, które takie zapytania realizują; opracowanie i eksperymentalna analiza własności trzech metod wykonania z poziomu narzędzi ORM zapytań rekurencyjnych do systemów baz danych, które nie realizują rekurencyjnych zapytań języka SQL; opracowanie i szczegółowa analiza czterech metod wykorzystania danych redundantnych do przyspieszenia wykonania na poziomie narzędzi ORM zapytań rekurencyjnych do systemów baz danych nie wspierających takich zapytań. W powyższych punktach pierwiastki badawcze najwyraźniej zarysowane są w temacie trzecim, gdzie przedstawiono m.in. autorską metodę ścieżek logarytmicznych. W pozostałych przewagę mają problemy programistyczne, swą złożonością wykraczające jednak poza poziom zadań inżynierskich. Doceniam eksperymentalną część pracy, która pozwoliła sprawdzić poprawność i ocenić jakość proponowanych metod. Realizacja tej części daje podstawę do pozytywnej oceny warsztatu programistycznego i doświadczenia Autorki pracy. Problemy rozwiązane w ocenianej pracy nie należą wprawdzie do tych, które otwierają nowe kierunki badawcze, ale stwarzają one podstawy do użytecznego rozszerzenia funkcjonalności narzędzi ORM. Należy przy tym zauważyć, że narzędzia ORM zajmują ważne miejsce w zbiorze narzędzi i środowisk programistycznych decydujących o łatwości tworzenia i wydajności systemów informatycznych korzystających z baz danych. Reasumując, uważam że cel rozprawy został osiągnięty. 4 Ponadto można też podkreślić, że rezultaty badań przedstawione w pracy były wcześniej publikowane w sześciu pracach ze współudziałem autorki rozprawy, w tym w trzech publikacjach indeksowanych przez Web of Science. Prace te były również prezentowane na kilku konferencjach międzynarodowych. Wyniki te zostały więc w jakimś stopniu zweryfikowane w środowisku naukowym. Wszystkie te publikacje mają jednak kilku autorów i brak mi danych, aby szczegółowo ocenić wkład w te prace autorki rozprawy. Natomiast należy zauważyć, że w czterech publikacjach jej nazwisko znalazło się na pierwszym miejscu na liście autorów. 4. Uwagi do pracy W ramach uwag kieruję do Autorki następujące pytanie: Czy można byłoby rozważyć wbudowanie zapytania rekurencyjnego do perspektywy definiowanej po stronie bazy danych? Jak wtedy zmieniłoby to problem wykonywania zapytań rekurencyjnych z poziomu warstwy ORM? Strona redakcyjna pracy budzi szereg wątpliwości, bądź nawet zastrzeżeń. Dałem im wyraz w punkcie 2 tej recenzji w trakcie omawiania zakresu rozprawy. Lektura teksu pracy nasunęła mi jeszcze kilka uwag: 1) Str. 37: W tytule tablicy 4.2 powinny się chyba pojawić „dane grafowe”?. 2) Str. 46: Rysunek 4.3, zwłaszcza w wersji czarno-białej, jest praktycznie nieczytelny. 3) Str. 46 i 47: Zamieszczone w tablicach 4.3 - 4.5 określenie „Kod natywny Hibernate” wymaga bardziej dokładnego objaśnienia. 4) W pracy brak wykazu używanych skrótów, który zwykle ułatwia analizę tekstu. 5) Tytuły niektórych rozdziałów lub podrozdziałów niewiele mówią, np. „2 Podstawowe informacje”, „4.4 Analiza” (podobnie 5.4 i 6.4), Przedstawione uwagi nie wpływają istotnie na moją merytoryczną ocenę wyników rozprawy. 5. Wniosek końcowy Podsumowując stwierdzam, że w recenzowanej rozprawie został sformułowany, a następnie poprawnie rozwiązany problem naukowy dotyczący rozszerzenia funkcjonalności narzędzi warstwy odwzorowań obiektowo-relacyjnych o możliwość wykonywania zapytań rekurencyjnych do baz danych. Autorka wykazała się gruntowną wiedzą w zakresie narzędzi odwzorowań obiektoworelacyjnych oraz realizacji zapytań rekurencyjnych w bazach danych, a także umiejętnościami i doświadczeniem praktycznym, udokumentowanymi implementacją opracowanych metod i eksperymentalną weryfikacją opracowanej koncepcji. Stwierdzam, że oceniana praca spełnia wymagania stawiane rozprawom doktorskim przez obowiązujące przepisy. Wnoszę o dopuszczenie Pani mgr Aleksandry Boniewicz do dalszych etapów przewodu doktorskiego. 5