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