Pre-wprowadzenie do BigData 1 RDBMS
Transkrypt
Pre-wprowadzenie do BigData 1 RDBMS
Pre-wprowadzenie do BigData 1 RDBMS – system zarządzania relacyjną bazą danych 1.1 Model relacyjny W modelu relacyjnym zakładamy, że każdy obiekt (rekord) ma ustalony z góry zbiór atrybutów (kolumn). Najprostszym przykładem danych w modelu relacyjnym są tabele w arkuszu kalkulacyjnym. Podstawową zasadą w modelu relacyjnym jest, aby w pojedeyńćzym pole (artybucie) obiektu (rekordu) znajdowała się wartość prosta (pojedyncza liczba, tekst, wartość logiczna) – wtedy model relacyjny jest w tzw. pierwszej postaci normalnej. Kolejną bardzo ważną cechą relacyjnego modelu danych jest podział danych na słowniki; załóżmy, że mamy następujące dane: NrIndeksu Nazwisko Imię Grupa 0001 Kowalski Jan 11ID 0002 Nowak Krzysztof 11ID 0003 Malinowski Zbigniew 12ID 0004 Smith John 11ID 0005 Lee Gregory 12ID 0006 Gordon James 12ID Jak widać, w kolumnie Grupa wartości się powtarzają. Co więcej gdybyśmy np. chcieli dodać pewne informacje o grupie (np. plan studiów), musielibyśmy dodawć kolejną kolumnę do tabeli i powtarzać pewne dane. Dlatego, zamiast powyższego, lepiej jest zastosować model: Student NrIndeksu Nazwisko Imię Grupa IDGrupa IDGrupa Grupa 0001 Kowalski Jan 1 1 11ID 0002 Nowak Krzysztof 1 2 12ID 0003 Malinowski Zbigniew 2 0004 Smith John 1 0005 Lee Gregory 2 0006 Gordon James 2 Na czerwono oznaczyłem oznaczyłem identyfikator grupy – będziemy o tym jeszcze mówić. Warto tylko tutaj powiedzieć tyle, że w tabeli Student kolumnę IDGrupa nazywamy kluczem obcym, a w tabeli Grupa kluczem głównym. 1.2 Bazy danych – typy danych Jak już wspomniałem wcześniej, dane w tabelach muszą być proste (pojedyncze wartości). Jednak w praktyce jest to za mało: potrzebujemy aby rodzaj danych był dokładniej sprecyzowany. Dlatego też w bazach danych stosujemy (podobnie jak w innych dziedzinach informatyki) typy danych: • dane tekstowe (z określoną długością lub bez), • dane liczbowe (całkowite, rzeczywiste, z różną precyzją i zakresem danych), • dane logiczne (nie zawsze występują w bazach danych), • dane „nieuporządkowane” - kontenery do przechowywania wartości binarnych takich jak zdjęcia, muzyka, teksty dokumentów (Binary Large Objects – BLOB lub podobne: LONG, CLOB itp.) 1.3 Jak wydobywać dane z w modelu relacyjnym Jednym z podstawowych elementów relacyjnych baz danych jest stworzony do ich obsługi język SQL (Structured Query Language). Jego podstawowymi komendami są - SELECT: komenda służąca do wydobywania danych, - INSERT, DELETE, UPDATE: komendy służące do modyfikacji danych (DML - Data Manipulation Language). O ile komendy do manipulowania danymi są względnie proste, to komenda SELECT jest znacznie bardziej rozbudowana. Jest podstawowa forma wygląda następująco SELECT kolumna lub wartość, kolumna lub wartość, …... kolumna lub wartość FROM tablica1 [ [left|right|outer] join tablica2 on (warunek połączenia)] [ [left|right|outer] join tablica3 on (warunek połączenia)] [WHERE warunek dla wierszy] [GROUP BY kolumna lub wartość, kolumna lub wartość, …., kolumna lub wartość] [HAVING warunek dla grup] [ORDER BY kolumna lub wartość, kolumna lub wartość, …., kolumna lub wartość] UWAGA: powyższe dobiega dalece od formalnego zapisu komendy SELECT; chcę tylko zaprezentować możliwości. Na liście wartości (SELECT) możemy wpisywać bezpośrednio kolumny z tablic bazy danych lub też nakładać na nie wyrażenia (np. dodać wartości z dwóch kolumn lub nałożyć na napis funkcję zamieniającą znaki na wielkie litery). Na liście tabel możemy określić (FROM) możemy określić wiele tabel (min. jedną), które łączymy ze osobą za pomocą określonych warunków. Np. dla opisanej wcześniej sytuacji ze studentami i grupami zapytanie mogłoby wyglądać następująco: SELECT student.nazwisko, student.imie, student.nrindeksu, grupa.grupa FROM student join grupa on (grupaidgrupa = student.idgrupa); Jest to podstawowa składnia komendy SELECT: słowa kluczowe SELECT i FROM muszą wystąpić (choć w niektórych dialektach dopuszczalne są sytuacje, gdzie słowo FROM nie występuje). Możemy też ograniczyć liczbę wierszy za pomocą klauzuli WHERE – warunek w klauzuli WHERE jest obliczany dla każdego wiersza. W naszym przypadku warunek mógłby mieć postać: WHERE NrIndeksu >= 4 Warunki możemy budować stosując wszystkie podstawowe elementy, które występują w językach programowania: - operatory porównania (<, >, <=, >=, !=, =), - operatory logiczne AND, OR, NOT, - nawiasy w celu grupowania wyrażeń, W wyrażeniach możemy używać nazw kolumn a także wyrażeń (podobnie jak na liście kolumn/wyrażeń). Zwracane dane możemy sortować (klauzula ORDER BY), używając nazw kolumn lub wyrażeń. Co więcej po każdym składniku możemy podać słowo kluczowe ASC (domyślne sortowanie: rosnąco) lub DESC (sortowanie malejąco). 1.4 Jak wydobywać dane z w modelu relacyjnym – cd. Pozostały nam dwie, połączono ze sobą klauzule: GROUP BY i HAVING. Klauzula GRUOP BY pozwala nam pogrupować dane wg jednego lub więcej kryteriów, a następnie w wyznaczonych grupach wyznaczyć określone wartości. Np. dla tabeli Student, możemy pogrupować dane ze względu na kolumnę IdGrupa (grupę stanowią wszystkie rekordy, które mają taką samą wartość w kolumnie), a następnie policzyć np. ilość rekordów w każdej grupie. SELECT IdGrupa, COUNT(*) FROM STUDENT GROUP BY IdGrupa Typowe funkcje agregacji to (oprócz podanego COUNT): AVG, MIN, MAX, SUM. Ponadto wiele systemów zarządzania bazami danych oferuje swoje funkcje (np. statystyczne: wariancja, kowariancja, odchylenie standardowe itd.). 1.5 Indeksy – co to jest i po co tego używać W bazach danych, gdzie występują tabele o dużej liczbie atrybutów (kolumn) i dużej liczbie rekordów (miliony rekordów) siłą rzeczy tabela zajmuje duży obszar fizyczny. Często z tych danych potrzebujemy tylko niewielkiego fragmentu (np. z tablicy danych osobowych potrzebujemy dwóch rekordów o podanym numerze PESEL). W normalnej sytuacji musielibyśmy przeglądać całą tablicę w poszukiwaniu tych rekordów; jeżeli zdarzy się tak, ze osoba o podanym numerze PESEL będzie na końcu tabeli, to czas wyszukiwania niepotrzebnie się wydłuży. Ale jest inna metoda: możemy sobie zbudować strukturę, która zawiera dwie wartości: wartość z kolumny i fizyczny adres miejsca w tabeli, gdzie dany rekord się znajduje. Strukturę taką nazywamy indeksem. Nowoczesne systemy zarządzania relacyjnymi bazami danych mają wbudowane tzw. optymalizatory zapytań, które potrafią określić, czy dana kolumna występująca w zapytaniu, jest zaindeksowana, i na tej podstawie odpowiednio przygotować wykonanie zapytania. UWAGA: takie podejście ma oczywiście swoje wady, ponieważ każda operacja zmiany danych, oprócz fizycznych zmian w tabeli, musi też dokonać zmian we wszystkich powiązanych z nią indeksach. 1.6 Użytkownicy, uprawnienia Kolejnym elementem RDBMS jest możliwość nadawania użytkownikom uprawnień do odczytu i modyfikacji wybranych danych. Wydaje się oczywistym, że nie każdy użytkownik powinien mieć dostęp do danych. Dlatego w systemach bazodanowych możemy tworzyć użytkowników, nadawać im uprawnienia do odczytu i modyfikacji wybranych danych (tablic) lub wykonywania określonych funkcji i procedur. Uprawnienia te możemy także grupować w zestawy (tzw. role). 1.7 Transakcje Wiemy już, że do bazy danych może się łączyć wielu użytkowników. Zastanówmy się teraz, co się stanie, kiedy dwóch (lub więcej) użytkowników pracuje nad tymi samymi danymi: jeden z nich zacznie wprowadzać pewne dane (np. fakturę wraz z pozycjami), drugi będzie chciał skorzystać z tych danych (np. wykonując dzienne zestawieni transakcji). Jeżeli drugi użytkownik wykona obliczenia, a potem pierwszy wycofa swoje operacje (stwierdzi, że nie chce wprowadzać takiej faktury) lub jeszcze coś pozmienia, to drugi użytkownik będzie miał błędne obliczenia. Lub inny aspekt tej sytuacji: operacja wprowadzania faktury jest dwuetapowa – najpierw faktura, potem jej pozycje, przy czym pozycje mogą wpływać np. na ogólną sumę na fakturze. I jeżeli drugi użytkownik „trafi” na moment między wprowadzeniem faktury a wprowadzeniem pozycji, to znowu dane będą zafałszowane. Dlatego w RDBMS istnieją transakcje czyli bazodanowy odpowiednim przycisku Zapisz (COMMIT) lub Anuluj (ROLLBACK). Dopiero po wykonaniu całości operacji, użytkownik (świadomie lub nie – bo robi to za niego odpowiedni fragment programu) zatwierdza lub wycofuje wprowadzone zmiany. Dopiero po zatwierdzeniu są one widoczne dla innych użytkowników. 1.8 Języki proceduralne W większości RDBMS istnieje możliwość tworzenia własnych podprogramów, które np. zbierają kilka operacji SQL w jedną komendę (procedurę) lub wybierają dane z bazy w pewien specyficzny sposób, niemożliwy do uzyskania za pomocą standardowej komendy SELECT (lub też na tyle często wykorzystywany, że warto zrobić z tego oddzielny fragment/podprogram). Co więcej w bazach tych istnieje możliwość „podpięcia” tego typu podprogramów pod wybrane akcje zmiany danych. Takie podpięte podprogramy nazywamy wyzwalaczami (ang triggers). Np. dla podanego przykładu z fakturami, sumę dla faktury można obliczyć sumując poszczególne pozycje, ale wymaga to sięgnięcia do dodatkowej tabeli. Czasami ze względów wydajnościowych lepiej jest aktualizować tę sumę „online” przy konkretnej fakturze: gdy dodajemy pozycję dodajemy też wartość do sumy, przy usuwaniu pozycji odejmujemy, przy poprawianiu także aktualizujemy. 1.9 Bezpieczeństwo danych – jeszcze kilka aspektów Poruszymy jeszcze kilka aspektów dotyczących bezpieczeństwa. Po pierwsze: zabezpieczenie danych. Wyobraźmy sobie sytuację, że nagle, z powodu awarii dysku znika cała baza danych o studentach UZ. Każdy, kto używa komputera wie, że różne jego części mogą ulegać awariom – dotyczy to zwłaszcza tych elementów, które mają ruchome części mechaniczne (dyski HDD, wentylatory, napędy). Dlatego istotnym jest aby wykonywać kopie bezpieczeństwa. Nowoczesne RDBMS posiadają odpowiednie mechanizmy do tworzenia kopii zapasowych i ich odtwarzania. I po drugie: ponieważ bazy są współdzielone przez wielu użytkowników, nie ma możliwości wycofywania zmian; tzn. że jak zmiana została zatwierdzona (COMMIT) i stała się widoczna dla innych użytkowników to nie ma możliwości aby ją cofnąć. Dlatego istotne jest aby wybrane operacje (a nawet wszystkie) były monitorowane i zapisane w bazie (np. kto i kiedy poprawił dany rekord). Zazwyczaj dokonuje się tego poprzez zapisy do dzienników (log) komend SQL wykonanych przez użytkownika. 2 Przegląd systemów RDBMS 2.1 Systemy plikowe W systemach plikowych dane są przechowywane lokalnie na komputerze, więc dostęp do nich ma każdy użytkownik (o ile zezwala na to system operacyjny). Dostęp do fizycznych danych (pliku/plików) następuje bezpośrednio z programu, który z nich korzysta. Systemy te zazwyczaj są dostępne dla jednego użytkownika, nie posiadają modułów odpowiedzialnych za uprawnienia. Zazwyczaj nie posiadają też wbudowanej obsługi języków proceduralnych. Tego typu bazy danych służą za typowe magazyny danych, czasami używanymi do celów zupełnie „niebazodanowych” (np. silnik SQLite jest wykorzystywany w popularnym programie pocztowym Thunderbird). Obsługa tego typu baz danych nie wymaga instalowania serwera bazy danych, często ich obsługa może być wbudowana w program (ew. wymaga wgrania dodatkowych bibliotek DLL). 2.2 Systemy klient-serwer W systemach klient-serwer dostęp do danych odbywa się za pomocą oddzielnego procesu (serwer), który zbiera zapytania od użytkowników, wykonuje je na danych i przekazuje użytkownikom odpowiedź (użytkownik nie ma fizycznego dostępu do plików bazy, często może nawet nie wiedzieć jak takie pliki wyglądają). Proces taki może być uruchomiony na oddzielnym komputerze (np. duża baza firmowa) lub też na też na naszym lokalnym komputerze (np. program Płatnik z bazą MS SQL Server w wersji Express). 2.3 Przegląd RDBMS Podano tylko przykłady (zazwyczaj najpopularniejsze). 2.3.1 Bazy plikowe • DBF • Paradox (Borland) • SQLite • MS Access • Open/Libre Office Base 2.3.2 Bazy klient-serwer Komercyjne: • Oracle • MS SQL Server • DB2 Bazy darmowe: • MySQL (bardzo powszechnie stosowany w witrynach WWW) • PostgreSQL • Firebird W przypadku podanych baz komercyjnych istnieją ich wersje darmowe, ograniczone co do ilości gromadzonych danych i/lub wykorzystywanych zasobów (wersje Express). W przypadku baz darmowych istnieje możliwość ich wykorzystania w wersjach portable. Dotyczy to zwłaszcza MySQL, który występuje w przenośnych pakietach serwerów WWW (np. XAMPP), które pozwalają na lokalne uruchomienie testowego środowiska serwera WWW wraz z odpowiednimi dodatkami. Do nauki podstaw SQL bardzo dobrze nadaje się serwer Firebird – ma on bardzo niewielkie wymagania sprzętowe, jego instalacja nie zabiera dużo miejsca na dysku (możliwa jest instalacja nawet na dysku przenośnym) a w aktualnej wersji (2.5) ma niemal wszystkie potrzebne do nauki właściwości baz danych (nieco kuleje jeszcze obsługa użytkowników za pomocą komend SQL, co będzie poprawione w wersji 3). 2. przetwarzanie rozproszone, cluster obliczeniowy, load-balancing, serwery, macierze, inne zabezpieczenia