Nie ma czegoś takiego jak NoSQL!
NoSQL to modne hasło.
Przez dziesięciolecia, kiedy ludzie mówili o bazach danych, mieli na myśli relacyjne bazy danych. A kiedy ludzie mówili o relacyjnych bazach danych, mieli na myśli tych, których kontrolujesz za pomocą Structured Query Language Edgara F. Codda. Przechowywanie danych w inny sposób? Szaleństwo! Wszystko inne to zwykłe pliki.
Ale w ciągu ostatnich kilku lat ludzie zaczęli kwestionować ten dogmat. Ludzie zastanawiali się, czy tabele z wierszami i kolumnami są naprawdę jedynym sposobem reprezentowania danych. Ludzie zaczęli myśleć i kodować, a także wymyślili wiele nowych koncepcji, jak organizować dane. Zaczęli tworzyć nowe systemy baz danych przeznaczone do tych nowych sposobów pracy z danymi.
Filozofie wszystkich tych baz danych były różne. Ale jedną wspólną cechą wszystkich tych baz danych było to, że Structured Query Language nie nadawał się już do ich używania. Dlatego każda baza danych zastąpiła SQL własnym językiem zapytań. I tak narodził się termin NoSQL, jako etykieta dla wszystkich technologii baz danych, które są sprzeczne z klasycznym modelem relacyjnej bazy danych.
Co więc mają wspólnego bazy danych NoSQL?
Właściwie niewiele.
Często słyszysz takie zwroty jak:
- NoSQL jest skalowalny!
- NoSQL jest dla BigData!
- NoSQL narusza ACID!
- NoSQL to wspaniały magazyn kluczy / wartości!
Czy to prawda? Cóż, niektóre z tych stwierdzeń mogą być prawdziwe w przypadku niektórych baz danych powszechnie nazywanych NoSQL, ale każda z nich jest fałszywa przynajmniej dla jednej innej. Właściwie jedyną wspólną cechą baz danych NoSQL jest to, że są to bazy danych, które nie używają SQL. Otóż to. Jedyne, co je definiuje, to to, co je od siebie różni.
Co więc wyróżnia bazy danych NoSQL?
Dlatego wyjaśniliśmy, że wszystkie te bazy danych, powszechnie określane jako NoSQL, są zbyt różne, aby oceniać je razem. Każdy z nich wymaga oddzielnej oceny, aby zdecydować, czy dobrze nadaje się do rozwiązania konkretnego problemu. Ale od czego zaczynamy? Na szczęście bazy danych NoSQL można pogrupować w określone kategorie, które są odpowiednie dla różnych przypadków użycia:
Zorientowany na dokumenty
Przykłady: MongoDB, CouchDB
Mocne strony: heterogeniczne dane, praca zorientowana obiektowo, zwinny rozwój
Ich zaletą jest to, że nie wymagają spójnej struktury danych. Są przydatne, gdy Twoje wymagania, a tym samym układ bazy danych, stale się zmieniają, lub gdy masz do czynienia z zestawami danych, które należą do siebie, ale nadal wyglądają zupełnie inaczej. Jeśli masz wiele tabel z dwiema kolumnami zwanymi „klucz” i „wartość”, warto się tym przyjrzeć.
Grafowe bazy danych
Przykłady: Neo4j, GiraffeDB.
Mocne strony: eksploracja danych
Podczas gdy większość baz danych NoSQL porzuca koncepcję zarządzania relacjami danych, bazy te obejmują ją nawet bardziej niż tzw. Relacyjne bazy danych.
Skupiają się na definiowaniu danych na podstawie ich relacji do innych danych. Jeśli masz wiele tabel z kluczami podstawowymi, które są kluczami podstawowymi dwóch innych tabel (i być może jakieś dane opisujące relacje między nimi), może to być coś dla Ciebie.
Magazyny klucz-wartość
Przykłady: Redis, Cassandra, MemcacheDB
Mocne strony: Szybkie wyszukiwanie wartości za pomocą znanych kluczy
Są bardzo uproszczone, ale dzięki temu są szybkie i łatwe w użyciu. Jeśli nie potrzebujesz procedur składowanych, ograniczeń, wyzwalaczy i wszystkich tych zaawansowanych funkcji bazy danych, a potrzebujesz tylko szybkiego przechowywania i pobierania danych, to są one dla Ciebie.
Niestety zakładają, że dokładnie wiesz, czego szukasz. Potrzebujesz profilu User157641? Żaden problem, zajmie to tylko mikrosekundy. Ale co, jeśli chcesz, aby nazwiska wszystkich użytkowników w wieku od 16 do 24 lat miały „gofry” jako swoje ulubione jedzenie i zalogowały się w ciągu ostatnich 24 godzin? Pech. Kiedy nie masz określonego i unikalnego klucza do określonego wyniku, nie możesz go tak łatwo wyciągnąć ze swojego sklepu KV.
Czy SQL jest przestarzały?
Niektórzy zwolennicy NoSQL twierdzą, że ich ulubiona baza danych NoSQL to nowy sposób robienia rzeczy, a SQL należy do przeszłości.
Czy mają rację?
Nie, oczywiście, że nie. Chociaż istnieją problemy, do których język SQL nie jest odpowiedni, nadal ma swoje mocne strony. Wiele modeli danych najlepiej przedstawia się jako zbiór tabel, które odnoszą się do siebie nawzajem. Zwłaszcza, że większość programistów baz danych przez dziesięciolecia była szkolona w myśleniu o danych w sposób relacyjny, a próby narzucenia tego sposobu myślenia nowej technologii, która nie została stworzona do tego celu, rzadko kończy się dobrze.
Bazy danych NoSQL nie zastępują SQL - są alternatywą.
Większość ekosystemów oprogramowania wokół różnych baz danych NoSQL nie jest jeszcze tak dojrzała. Chociaż są postępy, nadal nie masz dodatkowych narzędzi, które byłyby tak dojrzałe i wydajne, jak te dostępne dla popularnych baz danych SQL.
Ponadto istnieje znacznie więcej wiedzy na temat języka SQL. Pokolenia informatyków spędzały dziesięciolecia swojej kariery na badaniach koncentrujących się na relacyjnych bazach danych i pokazuje: Literatura napisana na temat baz danych SQL i modelowania danych relacyjnych, zarówno praktyczna, jak i teoretyczna, mogłaby wypełnić wiele bibliotek pełnych książek. Jak zbudować relacyjną bazę danych dla swoich danych, to temat tak dobrze zbadany, że trudno jest znaleźć przypadek narożny, w którym nie ma ogólnie przyjętej najlepszej praktyki.
Z drugiej strony większość baz danych NoSQL jest wciąż w powijakach. Wciąż szukamy najlepszego sposobu ich wykorzystania.