Bazy danych NoSQL (ang. non SQL, non relational, Not Only SQL) – bazy danych, w których można przechowywać, organizować i wyszukiwać dane w inny sposób niż w tabelach relacyjnych znanych z tradycyjnych RDBMS.
NoSQL jest przydatny w przypadku danych o dużym wolumenie, które będzie można stosunkowo łatwo skalować horyzontalnie – w klastrach i na wielu serwerach – mowa między innymi o Big Data.
Big Data charakteryzuje się dużymi zbiorami danych, ciągłym przyrostem nowych i koniecznością ich wydajnego przetwarzania. Widać to w przypadku wyszukiwarek internetowych, sieci społecznościowych, innych skalowalnych aplikacji internetowych. Wyzwaniem dla Big Data jest przechowywanie, zapisywanie, analiza i transfer tych danych. NoSQL w rozwiązaniu tych problemów mają rzekomo przewagę nad rozwiązaniami SQL, ale dlaczego?
NoSQL łatwiej skalować horyzontalnie. Możliwość łatwego skalowania w poziomie jest wpisana w ideę NoSQL. Zgodnie z teorią CAP Erica Brewera, którą już miałem okazję przytoczyć we wpisie o skalowaniu baz danych, każda baza danych może mieć co najwyżej dwie cechy z poniższej listy:
- Spójność (ang. Consistency),
- Dostępność (ang. Availibility),
- Tolerancja partycjonowania (ang. Partition Tolerance).
W bazach NoSQL po prostu celowo rezygnuje się ze spójności na rzecz większej wydajności i tolerancji na partycje wprowadzając często różnego rodzaju redundancje (czyli dane nadmiarowe). Na czym polega ta rezygnacja? W bazach NoSQL zazwyczaj nie mamy wsparcia dla transakcji czyli nie spełniają one zasady ACID. Spójność po prostu nie jest w nich kluczowa.
Rodzaje baz danych NoSQL
NoSQL to szerokie pojęcie odnoszące się nie tylko do wybranej technologii. Poniżej wybrane rodzaje baz danych MySQL i przykładowe technologie:
- bazy danych dokumentów – MongoDB, CouchDB,
- kolumnowe bazy danych – Apache Cassandra,
- bazy danych typu klucz-wartość – Redis, Couchbase Server, DynamoDB,
- systemy pamięci podręcznej – Redis, Memcached,
- grafowe bazy danych – Neo4J, ArangoDB, FaunaDB, OrientDB.
Pełną listę można znaleźć na stronie podanej w źródłach.
Zalety baz danych NoSQL
Przewaga NoSQL nad SQL polega na tym, że:
- są bardziej przystosowane i wydajniejsze przy przetwarzaniu Big Data,
- modele danych – brak predefiniowanych schema (czyli schematów tabel, typów danych itp.) powoduje ich większą elastyczność,
- potrafią przetwarzać dane niestrukturalne,
- tańsze i prostsze w utrzymaniu (szczególnie w przypadku prostych baz klucz-wartość) nie wymagają skomplikowanych RDBMS,
- z natury skalowalne (łatwe skalowanie horyzontalne).
Wady baz danych NoSQL
- dla danych, w których występują relacje zalecane są nadal standardowe RDBMS,
- normalizacja w bazach relacyjnych pozwala na uniknięciu redundancji,
- relacyjne bazy danych rokują większą integralności i spójność danych,
- SQL jest szeroko znany,
- brak mechanizmów transkacyjnych – może nie spełniać zasady ACID (ang. Atomicity, Consistensy, Isolation, Durability)
Zastosowanie baz danych NoSQL
Praktycznie każda większa aplikacja webowa prędzej czy później będzie zmuszona wykorzystać bazy NoSQL choćby w celu utrzymywania pamięci podręcznej. Najpopularniejsze rozwiązania tego typu to przykładowo Redis i Memcached. Rozwiązania te warto wdrożyć nawet w małych aplikacjach i wykorzystać je w ramach pamięci podręcznej przechowywanej w pamięci RAM. Radykalnie skracając czas dostępu do danych przechowywanych w bazie MySQL zmniejszamy opóźnienie TTFB, które jest kluczowe w przypadku prędkości działania i responsywności interakcji w serwisach WWW.
Serwis Facebook korzysta z Memcached. Instagram, Netflix i Apple wykorzystują architekturę Cassandra. Redis wykorzystują: Twitter, GitHub, Weibo, Pinterest, Snapchat, Craigslist, Digg, StackOverflow, Flickr. I tak można wymieniać bez końca.
Współdziałanie SQL i NoSQL
Błędne jest patrzenie na technologie baz NoSQL jako alternatywę lub „konkurencję” dla standardowych baz SQL. Technologie te świetnie się uzupełniają i od lat są stosowane równolegle. Bazy danych NoSQL typu klucz-wartość wykorzystuje się jako warstwę pamięci podręcznej dla relacyjnych baz SQL. Przykładem może tutaj być Redis i Memcached, które wykorzystując możliwość łatwego skalowania horyzontalnego i wysokiej wydajności wspierają przetwarzanie danych w różnego rodzaju aplikacjach wymagających wysokiej dostępności i przetwarzania w czasie rzeczywistym.
Odpowiedz lub skomentuj