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

Podobne dokumenty