Szybkie wprowadzenie do tematu czyli czym się różni SQL od NoSQL.
Rodzaje baz danych
Bazy danych są zorganizowanym zbiorem informacji przechowywanych i dostępnych elektronicznie z poziomu systemu komputerowego. Istnieje wiele rodzajów baz danych takich jak baza danych w chmurze, relacyjna baza danych, baza danych zorientowana obiektowo czy baza danych NoSQL. W zależności od typu, struktury, modelu danych, magazynu danych i zamierzonego sposobu użycia danych, różne systemy nadają się lepiej lub gorzej. Skupmy się na dwóch głównych kategoriach baz danych: SQL i NoSQL.
Co to jest SQL? To skrót od Structured Query Language i jest standardowym językiem relacyjnych baz danych (czyli z ang. RDBMS). Relacyjna baza danych definiuje relacje (zależności) pomiędzy poszczególnymi tabelami. Przykłady relacyjnych baz danych to MySQL Database, Postgres, Oracle, MS SQL Server czy Sybase.
NoSQL z kolei to nierelacyjna lub inaczej rozproszona baza danych. Baza danych NoSQL jest używana do rozproszonych magazynów danych o bardzo dużych potrzebach w zakresie przechowywania danych (najczęściej NoSQL jest używane w przypadku dużych zbiorów danych i aplikacji internetowych czasu rzeczywistego). Bazy danych NoSQL mogą przechowywać dane ustrukturyzowane, częściowo ustrukturyzowane, nieustrukturyzowane i polimorficzne i mogą być oparte tak na dokumentach jak i parach klucz-wartość. Przykłady? MongoDB, Redis, Neo4j, Cassandra i Hbase.
Różnice
Przejdźmy do głównych różnic między tymi dwoma rodzajami baz danych.
- Język zapytań: NoSQL nie ma zadeklarowanego języka zapytań, podczas gdy SQL jest przykładem ustrukturyzowanego języka zapytań.
- Schemat: bazy danych NoSQL używają dynamicznego schematu dla danych nieustrukturyzowanych a bazy danych SQL mają wstępnie zdefiniowany schemat.
- Możliwość skalowania: bazy danych NoSQL są skalowalne w poziomie, a bazy danych SQL w pionie.
- Odmiany: NoSQL to wiele różnych typów, np. magazyny klucz-wartość, bazy danych wykresów itp. A SQL to w zasadzie jeden typ z niewielkimi zmianami.
- Najlepsze zastosowanie: NoSQL najlepiej nadaje się do rozwiązywania problemów z dostępnością danych, a relacyjna baza danych to właściwa opcją do rozwiązywania problemów związanych z ACID (atomowością, spójnością, izolacją i trwałością).
- Najlepsze funkcje: SQL obsługuje wiele platform, a także jest bezpieczny i bezpłatny. NoSQL jest z kolei łatwy w użyciu, ma wysoką wydajność i jest narzędziem naprawdę elastycznym.
- Model: SQL używa ACID, który jest standardem dla RDBMS, a tzw. BASE jest używany w wielu systemach NoSQL - ACID zapewnia spójność systemu podczas gdy BASE koncentruje się na wysokiej dostępności.
ACID, BASE?
Już tłumaczymy. ACID oznacza:
- Niepodzielność (Atomicity) — transakcja bazy danych musi całkowicie się powieść lub całkowicie zakończyć niepowodzeniem. Niedozwolony jest częściowy sukces.
- Spójność (Consistency ) - podczas transakcji bazy danych system RDBMS przechodzi od jednego prawidłowego stanu do drugiego. Stan nigdy nie jest nieważny.
- Izolacja (Isolation ) — Transakcje nie mogą naruszać integralności innych transakcji poprzez interakcję z nimi, gdy są jeszcze w toku. Muszą występować w oderwaniu od innych klientów.
- Trwałość (Durability) — dane związane z zakończoną transakcją będą się utrzymywać nawet w przypadku awarii sieci lub zasilania. Jeśli transakcja się nie powiedzie, nie wpłynie to na manipulowane dane.
BASE zaś to skrót od:
- Zasadniczo dostępny (Basically Available) — gwarantuje się, że system będzie dostępny do wysyłania zapytań przez wszystkich użytkowników (brak izolacji)
- Stan miękki (Soft State) — ze względu na brak natychmiastowej spójności wartości danych mogą się zmieniać w czasie. Model BASE zrywa z koncepcją bazy danych, która wymusza własną spójność, delegując tę odpowiedzialność na deweloperów.
- Ostatecznie spójny (Eventually Consistent) — fakt, że BASE nie wymusza natychmiastowej spójności, nie oznacza, że nigdy jej nie osiąga. Jednak dopóki tak się nie stanie, odczyty danych są nadal możliwe (nawet jeśli mogą nie odzwierciedlać rzeczywistości).