Co to jest baza danych wykresów? Lepszy sposób na przechowywanie połączonych danych

Klucz-wartość, zorientowany na dokument, rodzina kolumn, wykres, relacja… Obecnie wydaje się, że mamy tyle rodzajów baz danych, ile jest rodzajów danych. Chociaż może to utrudniać wybór bazy danych, ułatwia wybór  właściwej bazy danych. Oczywiście wymaga to odrabiania lekcji. Musisz znać swoje bazy danych. 

Jednym z najmniej zrozumiałych typów baz danych jest baza danych grafów. Baza danych grafów, zaprojektowana do pracy z wysoce połączonymi danymi, może być opisana jako bardziej „relacyjna” niż relacyjna baza danych. Grafowe bazy danych świecą, gdy celem jest uchwycenie złożonych relacji w rozległych sieciach informacji. 

Przyjrzyjmy się bliżej, czym są grafowe bazy danych, dlaczego różnią się od innych baz danych i jakiego rodzaju problemy z danymi mają rozwiązać.

Grafowa baza danych a relacyjna baza danych

W tradycyjnej relacyjnej lub SQL bazie danych dane są zorganizowane w tabele. Każda tabela rejestruje dane w określonym formacie ze stałą liczbą kolumn, a każda kolumna ma własny typ danych (liczba całkowita, godzina / data, dowolny tekst itp.).

Ten model działa najlepiej, gdy masz do czynienia głównie z danymi z dowolnej tabeli. Nie działa również zbyt źle, gdy agregujesz dane przechowywane w wielu tabelach. Ale to zachowanie ma pewne godne uwagi ograniczenia.

Rozważ muzyczną bazę danych zawierającą albumy, zespoły, wytwórnie i wykonawców. Jeśli chcesz zgłosić wszystkich wykonawców, którzy byli przedstawieni na tym albumie przez ten zespół wydany w tych wytwórniach - cztery różne tabele - musisz wyraźnie opisać te relacje. W przypadku relacyjnej bazy danych można to osiągnąć za pomocą nowych kolumn danych (dla relacji jeden do jednego lub jeden do wielu) lub nowych tabel (dla relacji wiele do wielu).

Jest to praktyczne, o ile zarządzasz niewielką liczbą relacji. Jeśli masz do czynienia z milionami, a nawet miliardami związków - na przykład przyjaciółmi przyjaciół znajomych - te zapytania nie są dobrze skalowane.

Krótko mówiąc, jeśli  głównym problemem są relacje między danymi , a nie same dane, wówczas potrzebny jest inny rodzaj bazy danych - baza danych wykresów.

Funkcje bazy danych wykresów

Termin „wykres” pochodzi od użycia tego słowa w matematyce. Tam jest używany do opisania zbioru węzłów (lub wierzchołków ), z których każdy zawiera informacje ( właściwości ) oraz z etykietowanymi relacjami (lub krawędziami ) między węzłami.

Sieć społecznościowa jest dobrym przykładem wykresu. Osoby w sieci byłyby węzłami, atrybuty każdej osoby (takie jak imię i nazwisko, wiek itd.) Byłyby właściwościami, a linie łączące ludzi (z etykietami takimi jak „przyjaciel”, „matka” lub „ przełożony ”) wskazywałby na ich związek. 

W konwencjonalnej bazie danych przetwarzanie zapytań dotyczących relacji może zająć dużo czasu. Dzieje się tak, ponieważ relacje są implementowane za pomocą kluczy obcych i odpytywane przez łączenie tabel. Jak każdy SQL DBA może ci powiedzieć, wykonywanie sprzężeń jest kosztowne, zwłaszcza gdy musisz sortować dużą liczbę obiektów - lub, co gorsza, gdy musisz dołączyć do wielu tabel, aby wykonać rodzaj pośrednich zapytań (np. „Przyjaciel znajomego”) że bazy danych wykresów przodują w. 

Grafowe bazy danych działają na zasadzie przechowywania  relacji wraz z danymi. Ponieważ powiązane węzły są fizycznie połączone w bazie danych, dostęp do tych relacji jest tak bezpośredni, jak dostęp do samych danych. Innymi słowy, zamiast obliczać relację, jak muszą to robić relacyjne bazy danych, grafowe bazy danych po prostu odczytują relację z pamięci. Zadowalające zapytania to po prostu kwestia chodzenia lub „przechodzenia” po wykresie.  

Baza danych wykresów nie tylko przechowuje relacje między obiektami w natywny sposób, dzięki czemu zapytania dotyczące relacji są szybkie i łatwe, ale także umożliwia umieszczanie na wykresie różnego rodzaju obiektów i różnych rodzajów relacji. Podobnie jak inne bazy danych NoSQL, baza danych grafów nie zawiera schematów. W związku z tym, pod względem wydajności i elastyczności, grafowe bazy danych są bliżej baz danych dokumentów lub magazynów wartości klucza niż relacyjnych lub tabelarycznych baz danych.

Graficzne przypadki użycia bazy danych

Grafowe bazy danych działają najlepiej, gdy dane, z którymi pracujesz, są silnie połączone i powinny być reprezentowane przez sposób, w jaki łączą się z innymi danymi lub odwołują się do nich , zwykle za pomocą relacji wiele-do-wielu.

Ponownie, przydatnym przykładem jest sieć społecznościowa. Grafowe bazy danych zmniejszają ilość pracy potrzebnej do tworzenia i wyświetlania widoków danych znajdujących się w sieciach społecznościowych, takich jak kanały aktywności lub określania, czy możesz znać daną osobę ze względu na jej bliskość do innych znajomych w sieci.

Inną aplikacją dla grafowych baz danych jest znajdowanie wzorców połączeń w danych grafowych, które byłyby trudne do wyodrębnienia za pomocą innych reprezentacji danych. Systemy wykrywania oszustw używają grafowych baz danych, aby ujawnić relacje między podmiotami, które w innym przypadku mogłyby być trudne do zauważenia. 

Podobnie bazy danych wykresów są naturalnym rozwiązaniem dla aplikacji, które zarządzają relacjami lub współzależnościami między jednostkami. Często można znaleźć wykresowe bazy danych za silnikami rekomendacji, systemami zarządzania treścią i zasobami, systemami zarządzania tożsamością i dostępem oraz rozwiązaniami dotyczącymi zgodności z przepisami i zarządzania ryzykiem. 

Grafowe zapytania do bazy danych

Grafowe bazy danych - podobnie jak inne bazy danych NoSQL - zazwyczaj używają własnej, niestandardowej metodologii zapytań zamiast języka SQL.

Jednym z powszechnie używanych języków zapytań grafowych jest Cypher, pierwotnie opracowany dla bazy danych grafów Neo4j. Od końca 2015 roku Cypher był rozwijany jako osobny projekt open source, a wielu innych dostawców przyjęło go jako system zapytań dla swoich produktów (np. SAP HANA).

Oto przykład zapytania Cypher, które zwraca wynik wyszukiwania dla każdego, kto jest przyjacielem Scotta:

MATCH (a: Person {name: 'Scott'}) - [: FRIENDOF] -> (b) RETURN b 

Symbol strzałki ( ->) jest używany w zapytaniach Cypher do reprezentowania skierowanej relacji na wykresie.

Inny popularny język zapytań grafowych, Gremlin, został opracowany dla platformy obliczeń grafowych Apache TinkerPop. Składnia Gremlin jest podobna do tej używanej przez biblioteki dostępu do baz danych ORM w niektórych językach.

Oto przykład zapytania „przyjaciele Scotta” w języku gremlin:

gV (). has („name”, „Scott”). out („friendof”) 

Wiele grafowych baz danych obsługuje Gremlin za pośrednictwem biblioteki, wbudowanej lub innej firmy.

Jeszcze innym językiem zapytań jest SPARQL. Został pierwotnie opracowany przez W3C do przeszukiwania danych przechowywanych w formacie Resource Description Framework (RDF) pod kątem metadanych. Innymi słowy, SPARQL nie został opracowany do przeszukiwania baz danych grafów, ale może być do nich używany. Ogólnie rzecz biorąc, Cypher i Gremlin zostały przyjęte szerzej.

Zapytania SPARQL mają pewne elementy przypominające SQL, a mianowicie  SELECTi WHEREklauzule, ale reszta składni jest radykalnie odmienna. Nie myśl o SPARQL jako o powiązaniu w ogóle z SQL lub z innymi językami zapytań grafów.

Popularne bazy danych grafów

Ponieważ grafowe bazy danych mają stosunkowo niszowy przypadek użycia, nie ma ich tak dużo, jak relacyjnych baz danych. Plusem jest to, że wyróżniające się produkty są łatwiejsze do zidentyfikowania i omówienia.

Neo4j

Neo4j jest z pewnością najbardziej dojrzałą (11 lat i wciąż rosnącą) i najlepiej znaną z baz danych grafów do ogólnego użytku. W przeciwieństwie do poprzednich produktów baz danych grafów, nie używa zaplecza SQL. Neo4j to natywna baza danych grafów, która została zaprojektowana od wewnątrz w celu obsługi dużych struktur grafów, na przykład w zapytaniach zwracających setki tysięcy relacji i więcej.

Neo4j jest dostępny zarówno w bezpłatnej wersji open source, jak i płatnej wersji dla przedsiębiorstw, przy czym ta ostatnia nie ma ograniczeń co do rozmiaru zbioru danych (między innymi). Możesz także eksperymentować z Neo4j online, korzystając z piaskownicy, która zawiera kilka przykładowych zestawów danych do ćwiczenia.

Więcej informacji można znaleźć w recenzji Neo4j.

Microsoft Azure Cosmos DB

Baza danych w chmurze Azure Cosmos DB to ambitny projekt. Ma na celu emulację wielu rodzajów baz danych - konwencjonalnych tabel, zorientowanych na dokumenty, rodzin kolumn i wykresów - a wszystko to za pośrednictwem jednej, ujednoliconej usługi ze spójnym zestawem interfejsów API.

W tym celu baza danych wykresów jest tylko jednym z różnych trybów, w których może działać Cosmos DB. Wykorzystuje język zapytań Gremlin i interfejs API do zapytań typu grafowego oraz obsługuje konsolę Gremlin utworzoną dla Apache TinkerPop jako kolejny interfejs.

Innym ważnym punktem sprzedaży rozwiązania Cosmos DB jest to, że indeksowanie, skalowanie i replikacja geograficzna są obsługiwane automatycznie w chmurze Azure, bez konieczności kręcenia gałkami. Nie jest jeszcze jasne, w jaki sposób kompleksowa architektura Microsoftu mierzy do natywnych grafowych baz danych pod względem wydajności, ale Cosmos DB z pewnością oferuje przydatne połączenie elastyczności i skali.

Aby uzyskać więcej informacji, zobacz przegląd Azure Cosmos DB.

JanusGraph

JanusGraph został rozwidlony z projektu TitanDB i jest teraz zarządzany przez Linux Foundation. Korzysta z dowolnego z wielu obsługiwanych zaplecza - Apache Cassandra, Apache HBase, Google Cloud Bigtable, Oracle BerkeleyDB - do przechowywania danych wykresów, obsługuje język zapytań Gremlin (a także inne elementy ze stosu Apache TinkerPop), a także może włącz wyszukiwanie pełnotekstowe za pomocą projektów Apache Solr, Apache Lucene lub Elasticsearch.

IBM, jeden ze zwolenników projektu JanusGraph, oferuje hostowaną wersję JanusGraph na IBM Cloud o nazwie Compose for JanusGraph. Podobnie jak Azure Cosmos DB, Compose for JanusGraph zapewnia automatyczne skalowanie i wysoką dostępność z cenami opartymi na wykorzystaniu zasobów.