fbpx
wave-1 wave-2

Związek bez relacji – nierelacyjne bazy danych (NoSQL) . Część 2 – poszczególne typy nierelacyjnych baz danych.

Związek bez relacji – nierelacyjne bazy danych (NoSQL) . Część 2 – poszczególne typy nierelacyjnych baz danych.
Autor:Artur Pasik Data:7 kwietnia 2020

Jak zostało to opisane już w części 1 (dostępnej pod adresem: CZĘŚCI 1), nierelacyjne bazy danych można podzielić na kilka kategorii (pod kątem modelu danych):

  • Klucz – wartość
  • Dokument
  • Graf
  • Rodzina kolumn

Poniższy artykuł przedstawia krótką charakterystykę każdej z nich. Dla pełniejszego obrazu poszczególnych typów nierelacyjnych baz danych, dodano również przykładowy model danych, implementację oraz charakterystyczne wady i zalety.

Klucz – wartość

Model danych ma postać wielkiej skalowalnej HashMapy. Każdy pojedynczy element w bazie danych jest przechowywany jako nazwa atrybutu („klucz”) wraz z jego wartością.

Za pomocą klucza klient ma możliwość uzyskania danej wartości, wstawić do niego nową wartość, bądź całkowicie taki klucz usunąć.

Wartość natomiast, jest polem typu „blob”, które jest po prostu przechowywane, bez określania konkretnego typu danych (tak jak na ilustracji poniżej). Zrozumienie zawartości leży po stronie aplikacji.

Zalety i wady:

ZaletyWady
Prostota modelu danychNiezbyt dobrze sprawdza się przy złożonych danych
Wysoka skalowalnośćBrak wsparcia dla obsługi powiązań między danymi
Duża odporność na błędy

 

Przykład: Riak

Rozproszony magazyn danych charakteryzujący się wysoką dostępnością, prostotą obsługi i skalowalnością. Oprócz wersji open source jest on dostępny w obsługiwanej wersji korporacyjnej i wersji do przechowywania w chmurze. Riak ma niewrażliwą na uszkodzenia replikację danych i automatyczną dystrybucję danych w klastrze, co ma na celu zapewnienia wydajności i odporności.

Domyślna interakcja z bazą poprzez HTTP API:

  • GET – odczyt
  • PUT – aktualizacja, wstawianie (przy podaniu klucza)
  • DELETE – usuwanie
  • POST – wstawianie (generacja klucza po stronie bazy danych)

Inne przykłady: Aerospike, Apache Ignite, ArangoDB, BerkeleyDB, Couchbase, Dynamo, FairCom c-treeACE, FoundationDB, InfinityDB, LevelDB, MemcacheDB, MUMPS, Oracle NoSQL Database, OrientDB, Project Voldemort, Redis, Berkeley DB, SDBM/Flat File dbm, ZooKeeper

Dokumentowe

Jak nazwa wskazuje ich głównym elementem są dokumenty. Są to samoopisujące się, hierarchiczne struktury drzewiaste, przechowywane i zwracane przez bazę danych. Przykładowe formaty dokumentów:

  • XML
  • JSON
  • BSON

Bazy dokumentowe są kolekcją dokumentów, które z kolei stanowią magazyn klucz – wartość. Przechowywane dokumenty są z reguły porównywalne, ale nie muszą być koniecznie tożsame.

Przykładowe dokumenty (odpowiedniki wierszy w bazie relacyjnej):

Zalety i wady:

ZaletyWady
Prostota modelu danychNiska jakość obsługi danych powiązanych ze sobą
Wysoka skalowalnośćSłabo rozwinięty model odpytywania (klucze, indeksy)
Duże możliwości modelowaniaMapReduce

 

Przykład: MongoDB

Wieloplatformowy, nierelacyjny system do obsługi baz danych, stworzony w języku C++. Nie posiada ściśle określonej struktury obsługiwanych baz danych, zamiast tego używa dokumentów w formacie BSON (nieco podobnych do JSON, ale w binarnej postaci). Dzięki temu aplikacje mogą je bardziej naturalnie przetwarzać, przy zachowaniu możliwości tworzenia hierarchii oraz indeksowania.

Inne przykłady: Apache CouchDB, ArangoDB, BaseX, Clusterpoint, Couchbase, Cosmos DB, IBM Domino, MarkLogic, OrientDB, Qizx, RethinkDB

Grafowe

Bazy grafowe opierają się na przechowywaniu węzłów i krawędzi pomiędzy nimi. Węzeł jest odpowiednikiem encji, z kolei krawędzie odpowiadają relacjom. Przykładowy model można przedstawić w następujący sposób:

Zarówno węzły, jak i krawędzie posiadają swoje własności. Organizacja węzłów zgodnie z relacjami pozwala na znajdowanie pożądanych wzorców.

Zalety i wady:

ZaletyWady
Rozbudowany, ogólny model danychData sharding
Proste odpytywanieCałkowita zmiana sposobu myślenia

 

Przykład: Neo4J

Transakcyjna baza danych zgodna z ACID z natywnym przechowywaniem i przetwarzaniem grafów. Jedno z najpopularniejszych rozwiązań w kategorii grafowych baz danych.

Neo4j został zaimplementowany w Javie, jednak jest również dostępny z poziomu aplikacji napisanych w innych językach. Umożliwia to dedykowany język zapytań zwany Cypher, komunikujący się poprzez transakcyjny endpoint HTTP lub binarny protokół „bolt”.

Inne przykłady: AllegroGraph, ArangoDB, InfiniteGraph, Apache Giraph, MarkLogic, OrientDB, Virtuoso

Kolumnowe (rodziny kolumn)

W przypadku baz rodziny kolumn, jak sama nazwa wskazuje, dane przechowywane są w formie rodziny kolumn – grupy spokrewnionych danych, które zazwyczaj pobierane są razem. Te z kolei, przechowywane są w wierszach z przypisanymi kluczami.

Koncepcję tego typu bazy danych można przyrównać do ogromnej, zdemoralizowanej tabeli liczącej wiele wierszy i kolumn. Z tego względu są one głównie stosowane w sektorze VLDB (Very Large DataBase).

bazy rodziny kolumn

Zalety i wady:

ZaletyWady
Wsparcie dla danych półstrukturalnychBrak wsparcia dla obsługi powiązań między danymi
Naturalne indeksowaniePowolne operacje wierszowe (zwłaszcza te, obejmujące więcej niż jeden wiersz)
Wysoka skalowalność

 

Przykład: Cassandra

Rozproszony system zarządzania bazą danych, zaprojektowany w celu obsługi dużej liczby rozproszonych danych na wielu serwerach. Operacje zapisu dokonywane są na całym klastrze, który nie posiada serwera głównego. Umożliwia to asynchroniczny odczyt i zapis danych, co przekłada się na minimalizację opóźnień.

Cassandra posiada język zapytań, o nazwie CQL (Cassandra Query Language). Wspiera on polecenia podobne do poleceń SQL.

Inne przykłady: Amazon SimpleDB, Accumulo, Druid, HBase, Hypertable, Vertica

 

Podsumowanie

Nie istnieje jeden wszechstronny model danych, który byłby remedium na wszystkie bolączki. Każdy z nich przedstawia odrębne, charakterystyczne dla siebie właściwości i znajduje zastosowanie w obszarze w którym sprawdzają się one najlepiej.

Wybór konkretnego rozwiązania powinien być dyktowany pożądanymi w danym systemie cechami bazy danych i problemami, przed którymi mają one ustrzec.

Powyższy artykuł daje możliwość zapoznania się z poszczególnymi modelami danych oraz ich konkretnymi implementacjami, co rzuca nieco światła na tą tematykę i daje ogólny obraz najpopularniejszych obecnie na rynku rozwiązań.

Źródła

  1. P. J. Sadalage, M. Fowler, „NoSQL Kompendium wiedzy”, Helion 2015
  2. A. Wójcik, „Nierelacyjne bazy danych”, Zeszyty Naukowe WSEI 2014
  3. https://www.geeksforgeeks.org/introduction-to-nosql/
  4. https://itwiz.pl/czym-jest-nosql-jak-wykorzystac-nierelacyjne-bazy-danych/
  5. https://riak.com/
  6. https://www.mongodb.com/
  7. https://neo4j.com/
  8. http://cassandra.apache.org/

Autor: Artur Pasik, Performance/Automation Test Engineer