referat o SQL-owych i nie-SQL

Transkrypt

referat o SQL-owych i nie-SQL
Mateusz Dargacz Informatyka 206277 SQL–owe Bazy danych kontra NoSql
Wybór odpowiedniej struktury bazodanowej przy budowie aplikacji może mieć znaczący wpływ na optymalizację zarówno kodu aplikacji, jak i szybkości jej działania. Niestety nie istnieje prosta odpowiedź na pytanie które rozwiązanie sprawdzi się najlepiej. Zacznijmy od baz danych SQL które są nadal najbardziej popularne. Bazują na strukturze tabel, które mogą łączyć się wzajemnymi relacjami. Kolejną cechą wartą uwagi jest ściśle opisany schemat kolumn. Po drugiej stronie mamy bazy NoSQL których mocne strony to dynamiczny schemat struktury oraz kolekcjami danych w miejscu SQL-­‐owych tabel. Tabele czy kolekcje: W bazach danych SQL mamy do czynienia ze strukturą danych, reprezentowaną przez tabele zawierające kolumny w których dane zapisywane są w kolejnych wierszach. W
Nierelacyjnych bazach danych, w zależności od wybranej technologii możemy zapisywać
dane w postaci:
•
•
•
•
“klucz-­‐wartość” – np. technologia MemCached – typ bazy NoSql w praktyce często
stosowany do ograniczenia powtarzających się obliczeń funkcji rekurencyjnych poprzez
zapisanie parametru wejściowego jako klucz, a wyniku funkcji jako wartość.
dokumentu – jest to rozszerzenie bazy typu “klucz-­‐wartość”, o możliwość przeszukiwania
po wartości, a nie tylko kluczu. Jako wartość możemy przechowywać np. dokumenty w
formatach: JSON, Xml, Yaml jak I również dokumenty binarne np. BSON.
opartej na grafach – są stworzone do przechowywania danych które najłatwiej przedstawić
w formie grafu tzn. mogą mieć nieskończenie wiele relacji między sobą np. topologie sieci,
sieci połączeń komunikacyjnych, czy też mapy ulic.
bazy obiektowej -­‐ są o bazy które upraszczają zapis danych w aplikacjach bazujących na
OOP (object-oriented programming), tworząc prosty interface do przechowywania
obiektów.
1 Mateusz Dargacz Informatyka 206277 Więc wybór bazy pod względem formy przechowywania danych zależy jedynie od tego co będziemy w niej gromadzić. Przykładowo, jeśli mamy zamiar przechowywać usystematyzowane dane oraz zależy nam na stabilności (bazy noSQL wciąż nie są porównywanie stabilne przy dużym obciążeniu oraz złożonych transakcjach), wybierzemy bazy o strukturze SQL. NoSql natomiast dla wielkich zbiorów danych w których wpisy mogą różnić się strukturą jak na przykład gdy chcielibyśmy stworzyć bazę
wszystkich istniejących samochodów, a ich specyfikacje byłyby pobierane z wielu źródeł, czy
też kolejka zadań które mają wykonać się niezależnie od głównego wątku aplikacji (dane są
krótkotrwałe, każde zadanie znika z bazy po wykonaniu)
Predefiniowany czy dynamiczny schemat: W przypadku baz SQL przed jej wypełnieniem musimy zaplanować jej strukturę o wiele
dokładniej niż przy rozwiązaniach NoSQL. Należy ustalić jakie tabele będą wchodziły w skład
naszej bazy danych, jakie kolumny będzie zawierał każdy wpis w tabeli, oraz jakiego typu dane
mamy zamiar zapisywać w owych kolumnach. Chroni to nas przed zaśmiecaniem bazy danych
niepełnymi wpisami, oraz wieloma wyjątkami które musimy obsłużyć, a mogą pojawić się przy
przetwarzaniu tych danych. W wypadku rozwiązań NoSQL nie musimy narzucać schematu
kolekcji, do jednej z nich możemy dodać zarówno wpis zawierający wiele par “klucz-wartość”,
jak I tylko jedną taka parę, poza tym w każdym wpisie pod tym samym kluczem może się
zawierać inny rodzaj danych jak i może w ogóle nie istnieć taki klucz. Struktury SQL zapewniają większą stabilność oraz niezawodność, lecz wszelkie zmiany struktury przy np. rozbudowie aplikacji są relatywnie trudne w porównaniu z dynamicznie zmienialnym schematem który gwarantują rozwiązania NoSQL. Skalowalność: Bazy danych SQL skalują się wertykalnie co oznacza, że głównym zabiegiem przyśpieszenia ich działania jest dodanie mocy obliczeniowej. Implikuje to pewną teoretyczną granicę skalowalności. Z bazami NoSQL jest wręcz odwrotnie, skalują się horyzontalnie co oznacza stawianie kolejnych instancji (węzłów), na które zostaną rozdzielone zapytania, jest to wbudowane w technologię więc nie podlega dodatkowemu oprogramowywaniu.
2 Mateusz Dargacz Informatyka 206277 Zapytania: Wybór bazy danych ma również wpływ na komfort jej oprogramowywania. Bardziej złożone zapytania w relacyjnych bazach danych mogą być uciążliwe, lecz istnieją framework-­‐i które mapują strukturę bazy SQL do obiektów (tzw. ORM) np. Python/django, Ruby on Rails. Zapytania do baz typu NoSQL, posiadają natywne mapowanie do obiektów, co jest
znacznie wydajniejsze oraz przyśpiesza zapytania. Podsumowanie:
Decyzja o wyborze bazy danych powinna zostać podjęta na podstawie wymagań
stawianych przez konkretną aplikację. Mimo tego, że bazy NoSQL są nowszą
technologią są zalecane jedynie do konkretnych celów. Bazy SQL nadal są potęgą
jeśli chodzi o stosowanie w dużych przedsięwzięciach, ze względu na stabilność.
Lecz aktualnie wyłania się nowy trend mieszania ze sobą obu rozwiązań, do danych
na których poprawności oraz stabilności nam zależy stosujemy bazę SQL (np.
logika aplikacji), a bazy NoSQL stosujemy do cache-owania wyników zapytań bazy
SQL. Istnieje wiele możliwości splatania tych dwóch technologi, więc proponuję
przemyślany dobór funkcjonalności które z pewnością mogą zostać rozdzielone.
3 

Podobne dokumenty