Wprowadzenie

NoSQL jest podejściem do projektowania baz danych w którym możemy pomieścić wiele różnych modeli danych. Zaliczamy do nich prezentację w postaci klucz-wartość, model danych w postaci dokumentu, rodziny kolumn oraz grafu. NoSQL oznacza nie tylko SQL, jest alternatywą dla tradycyjnych, relacyjnych baz danych, w których dane umieszczane są w tabelach a schemat jest starannie przygotowywany przed zbudowaniem bazy danych. Takie bazy danych są szczególnie przydatne w trakcie pracy z dużymi zestawami rozproszonych danych.

NoSQL vs. RDBMS

Termin NoSQL można stosować w odniesieniu do niektórych baz danych, które istniały wcześniej niż systemy zarządzania relacyjnymi bazami danych. Zdecydowanie częściej mowa jednak o bazach danych zbudowanych na początku roku 2000 w celu zakrojonego na szeroką skalę klastrowania baz danych w aplikacjach internetowych i chmurowych. W takiego rodzaju aplikacjach wymagania dotyczące wydajności i skalowalności przeważają nad potrzebą natychmiastowej, sztywnej spójności danych, którą RDBMS zapewniał korporacyjnym aplikacjom transakcyjnym.

Warto zaznaczyć, że systemy NoSQL nie były zobligowane do przestrzegania ustalonego schematu relacyjnego. Początkujący giganci tacy jak Google czy Amazon używali baz danych NoSQL, aby skupić się na wąskiej gałęzi wykonywanych operacji a relacyjne bazy danych traktowane były jako dodatki w których konieczna była wysoka spójność danych.

Wczesne wersje baz danych NoSQL dla aplikacji internetowych i chmurowych skupiały się na bardzo specyficznych cechach zarządzania danymi. Zdolność do przetwarzania bardzo dużych ilości danych oraz szybkie rozprowadzanie tych danych pomiędzy klastrami było pożądane przy projektowaniu rozwiązań webowych oraz chmurowych. Programistom zależało na utworzeniu elastycznego schematu danych (lub całkowietej eliminacji) w celu szybkiego wprowadzania niewielkich modyfikacji w systemach, które były ciągle aktualizowane.

Klasyfikacja

Bazy danych NoSQL nastawione są na zarządzanie dużymi zestawami różnorodnych i często aktualizowanych danych, często w systemach rozproszonych lub w chmurze. Unikają sztywnych schematów powiązanych z relacyjnymi bazami danych. Warto jednak mieć na uwadzę, że architektura NoSQL została sklasyfikowana według czterech podstawowych typów. NoSQL - klasyfikacja

Klucz-wartość

Baza ta implementuje prosty model danych, który łączy unikalny klucz z powiązaną wartością. Ponieważ ten model jest prosty, może prowadzić do opracowania baz danych, które są niezwykle wydajne i wysoce skalowane. Znajduje to odzwierciedlenie w zarządzaniu sesją i cachowaniu danych w aplikacja webowych. Poszczególne impelmentację różnią się w sposobie pracy z pamiecią RAM, dyskami twardymi oraz napędami SSD. Jako przykłady możemy wymienić:

Dokument

Podejście to zwane jest również magazynem dokumentów. Tak przygotowane bazy danych przechowywują częściowo ustrukturyzowane dane i opisy tych danych w postaci dokumentu. Pozwalają programistom tworzyć i aktualizować programy bez potrzeby odwoływania się do schematu głównego. Wykorzystywanie tego typu baz danych zwiększyło się wraz ze wzrostem popularności JavaScript oraz JSON - formatu wymiany danych, który zyskał popularność wśród twórców aplikacji internetowych pomimo obecnego i często używanego formatu XML. Bazy danych wykorzystujące powyższy model danych używane są m.in. do zarządzania treścią oraz do obsługi danych pochodzących z aplikacji mobilnych. Jako przykłady możemy wymienić:

Rodzina kolumn

W przypadku takiej bazy podstawową jednostką przechowywania danych jest kolumna. Kolumna definiowana jest jako para „danych", tzn.: nazwa:wartość, gdzie nazwa jest kluczem dla wartości. Takie podejście pozwala na szybsze wykonywanie zapytań na dużej ilości danych w porównaniu do tradycyjnego modelu relacyjnego. Rodzina kolumn jest często wykorzystywana przy zaawansowanym przetwarzaniu danych do których możemy zaliczyć systemy rekomendacyjne, złożone katalogi czy proces wykrywania oszustw. Jako przykłady możemy wymienić:

Grafy

W bazach grafowych dane przechowywane są jako węzły (nodes), które przypominają rekordy w relacyjnej bazie danych. Z kolei połączenia pomiędzy węzłami definiowane są jako edges, tj. krawędzie. W przeciwieństwie do relacyjnego modelu opartego na ścisłych schematach, grafowy model danych może ewoluować w miarę upływu czasu i użytkowania. Bazy takie stosowane są w systemach, które muszą odwzorowywać relacje, takie jak systemy rezerwacji czy zarządzanie relacjami z klientami. Jako przykłady możemy wymienić:

Ewolucja NoSQL

Najbardziej wpływowym systemem, we wczesnej ewolucji NoSQL był Berkeley DB. Został opracowany na Uniwersytecie Kalifornijskim w Berkeley a począwszy od lat 90 ubiegłego wieku został okrzyknięty systemem, który ściśle odpowiadał na potrzeby związane z przechowywaniem danych w aplikacjach. Rozwiązanie open source udostępniało mechanizm przechowywania danych w postaci kluczy i wartości. System został wydany przez firmę Sleepycat Software w roku 1999 a następnie kupiony, w roku 2006 przez Oracle - firma nadal wspiera rozwój Berkeley DB.

Inne bazy danych NoSQL, które zdobyły rozgłos, obejmują głównie bazy danych obsługiwane w chmurze. Zaliczamy do nich Amazon DynamoDB, Google BigTable a także Apache Cassandra oraz MongoDB. Tej ostatniej został poświęcony osobny wpis: dac wpis, w którym skupimy się na konkretnej implementacji wykorzystując do tego aplikację konsolową przygotowaną w technologii .NET Core.

Podstawową klasyfikację baz danych NoSQL należy traktować jedynie jako swojego rodzaju przewodnik. Z biegiem czasu dochodziło do wymieszania i dopasowania elementów z różnych systemów NoSQL tak, aby powstały jak najbardziej użyteczne systemy. Dobrym przykładem może być ewolucja MarkLogic - do oryginalnej wersji (model dokumentu) dodano obsługę grafów oraz inne elementy. Couchbase obsługuje podejście klucz-wartość oraz model dokumentu. W przypadku systemu Casandara doszło do połączenia modelu klucz-wartość z rodziną kolumną oraz bazą grafową. Czasami dochodzi również do mieszania elementów NoSQL z SQL czego wynikiem są bazy danych nazywane „wielomodelowymi bazami danych".

Podsumowanie

Celem artykułu było krótkie opisanie historii i podstawowej klasyfikacji baz danych NoSQL. Jeżeli interesują Was konkrety zapraszam do kolejnego artykułu: .NET Core: MongoDB w którym szczegółowo omówię aplikację konsolową połączoną z bazą MongoDB.