Programování

Co je databáze grafů? Lepší způsob ukládání připojených dat

Klíč-hodnota, orientovaný na dokumenty, rodina sloupců, graf, relační ... Dnes se zdá, že máme tolik druhů databází, kolik je druhů dat. I když to může ztěžovat výběr databáze, je výběrže jo databáze jednodušší. Samozřejmě to vyžaduje dělat domácí úkoly. Musíte znát své databáze.

Jedním z nejméně pochopených typů databází je databáze grafů. Databáze grafů, navržená pro práci s vysoce propojenými daty, může být popsána jako „relačnější“ než relační databáze. Databáze grafů září, když je cílem zachytit složité vztahy v rozsáhlých informačních sítích.

Zde je bližší pohled na to, co jsou databáze grafů, proč jsou na rozdíl od jiných databází a jaké problémy s daty jsou vytvořeny k řešení.

Databáze grafů vs. relační databáze

V tradiční relační databázi nebo databázi SQL jsou data uspořádána do tabulek. Každá tabulka zaznamenává data ve specifickém formátu s pevným počtem sloupců, každý sloupec má svůj vlastní datový typ (celé číslo, čas / datum, volný text atd.).

Tento model funguje nejlépe, když pracujete hlavně s daty z jedné tabulky. Také nefunguje příliš špatně, když agregujete data uložená ve více tabulkách. Ale toto chování má několik pozoruhodných omezení.

Zvažte hudební databázi s alby, kapelami, štítky a umělci. Pokud chcete nahlásit všechny účinkující, na kterých bylo vystupováno tento album od že kapela vydána dne tyto štítky - čtyři různé tabulky - musíte tyto vztahy výslovně popsat. S relační databází toho dosáhnete pomocí nových datových sloupců (pro vztahy 1: 1 nebo 1: 1) nebo nových tabulek (pro vztahy N: 2).

To je praktické, pokud spravujete skromný počet vztahů. Pokud máte co do činění s miliony nebo dokonce miliardami vztahů - například s přáteli přátel -, tyto dotazy se neomezují dobře.

Stručně řečeno, pokudvztahy mezi daty, nikoli samotná data, jsou vaším hlavním zájmem, pak je v pořádku jiný druh databáze - databáze grafů.

Funkce databáze grafů

Termín „graf“ vychází z použití slova v matematice. Zde se používá k popisu kolekce uzlů (nebo vrcholy), z nichž každý obsahuje informace (vlastnosti) as označenými vztahy (nebo hrany) mezi uzly.

Dobrým příkladem grafu je sociální síť. Lidé v síti budou uzly, atributy každé osoby (například jméno, věk atd.) Budou vlastnosti a řádky spojující lidi (se štítky jako „přítel“ nebo „matka“ nebo „ supervizor “) by naznačoval jejich vztah.

V konvenční databázi může zpracování dotazů na vztahy trvat dlouho. Důvodem je, že vztahy jsou implementovány s cizími klíči a dotazovány spojováním tabulek. Jak vám může říct jakýkoli SQL DBA, provádění spojení je nákladné, zvláště když musíte třídit velké množství objektů - nebo ještě hůře, když musíte spojit více tabulek, abyste mohli provádět druhy nepřímých dotazů (např. „Přítel přítele“) v nichž vynikají databáze grafů.

Databáze grafů fungují uložením souboruvztahy spolu s údaji. Protože související uzly jsou fyzicky propojeny v databázi, je přístup k těmto vztahům stejně okamžitý jako přístup k samotným datům. Jinými slovy, namísto výpočtu vztahu, jak to musí dělat relační databáze, databáze grafů jednoduše načtou vztah z úložiště. Uspokojení dotazů je jednoduchá záležitost chůze nebo „procházení“ grafu.

Databáze grafů nejen ukládá vztahy mezi objekty nativním způsobem, takže dotazy na vztahy jsou rychlé a snadné, ale umožňuje do grafu zahrnout různé druhy objektů a různé druhy vztahů. Stejně jako ostatní databáze NoSQL je databáze grafů bez schémat. Pokud jde o výkon a flexibilitu, databáze grafů se tedy blíží databázím dokumentů nebo obchodům klíč – hodnota než relační nebo tabulkově orientované databáze.

Případy použití databáze grafů

Databáze grafů fungují nejlépe, když jsou data, se kterými pracujete, vysoce propojená a měla by být reprezentována tím, jak jsou odkazy nebo odkazuje na jiná data, obvykle prostřednictvím vztahů mezi mnoha.

Užitečným příkladem je opět sociální síť. Databáze grafů snižují množství práce potřebné k vytvoření a zobrazení datových pohledů nalezených v sociálních sítích, jako jsou informační kanály aktivit, nebo určování, zda byste mohli danou osobu znát nebo ne kvůli její blízkosti k dalším přátelům, které máte v síti.

Jinou aplikací pro databáze grafů je hledání vzorů spojení v datech grafů, které by bylo obtížné rozeznat pomocí jiných datových reprezentací. Systémy detekce podvodů používají databáze grafů k objasnění vztahů mezi entitami, které by jinak bylo těžké si všimnout.

Podobně jsou databáze grafů přirozeně vhodné pro aplikace, které spravují vztahy nebo vzájemné závislosti mezi entitami. Databáze grafů často najdete za motory doporučení, systémy pro správu obsahu a majetku, systémy pro správu identit a přístupu a řešení pro dodržování předpisů a řízení rizik.

Grafické databázové dotazy

Databáze grafů - stejně jako jiné databáze NoSQL - obvykle místo SQL používají vlastní vlastní metodiku dotazů.

Jedním z běžně používaných dotazovacích jazyků grafů je Cypher, původně vyvinutý pro databázi grafů Neo4j. Od konce roku 2015 byl Cypher vyvinut jako samostatný projekt s otevřeným zdrojovým kódem a řada dalších prodejců jej přijala jako dotazovací systém pro své produkty (např. SAP HANA).

Zde je příklad dotazu Cypher, který vrací výsledek hledání pro každého, kdo je přítelem Scotta:

ZÁPAS (a: Osoba {name: ‘Scott’}) - [: FRIENDOF] -> (b) NÁVRAT b 

Symbol šipky (->) se používá v dotazech Cypher k reprezentaci směrovaného vztahu v grafu.

Další běžný jazyk dotazů na grafy, Gremlin, byl navržen pro výpočetní rámec grafů Apache TinkerPop. Gremlinova syntaxe je podobná syntaxi, kterou používají knihovny pro přístup k databázi ORM některých jazyků.

Zde je příklad dotazu „přátelé Scotta“ v Gremlin:

g.V (). has (“name”, “Scott”). out (“friendof”) 

Mnoho databází grafů podporuje Gremlin prostřednictvím knihovny, ať už vestavěné nebo od jiného výrobce.

Ještě dalším dotazovacím jazykem je SPARQL. Původně byl vyvinut W3C pro dotazování na data uložená ve formátu RDF (Resource Description Framework) pro metadata. Jinými slovy, SPARQL nebyl vymyslel pro vyhledávání v databázi grafů, ale lze je pro ně použít. Celkově byli Cypher a Gremlin přijati obecněji.

Dotazy SPARQL mají některé prvky připomínající SQL, konkrétněVYBRAT a KDE klauzule, ale zbytek syntaxe je radikálně odlišný. Nemyslete si, že by SPARQL vůbec souvisel s SQL, nebo s jinými jazyky dotazů na grafy.

Populární databáze grafů

Vzhledem k tomu, že databáze grafů slouží k případu použití relativně mezery, není jich zdaleka tolik, kolik je relačních databází. Pozitivní je, že to usnadňuje identifikaci a diskusi o výjimečných produktech.

Neo4j

Neo4j je snadno nejvyspělejší (11 let a počítá se) a nejznámější z databází grafů pro všeobecné použití. Na rozdíl od předchozích grafických databázových produktů nepoužívá back-end SQL. Neo4j je nativní databáze grafů, která byla vyvinuta zevnitř ven, aby podporovala velké struktury grafů, jako v dotazech, které vracejí stovky tisíc vztahů a další.

Neo4j přichází v bezplatných podnikových edicích s otevřeným zdrojovým kódem i v placených verzích, přičemž druhá verze nemá žádná omezení velikosti datové sady (mimo jiné). Můžete také experimentovat s Neo4j online prostřednictvím Sandboxu, který obsahuje některé ukázkové datové sady, se kterými si můžete zacvičit.

Další informace najdete v recenzi Neo4j.

Microsoft Azure Cosmos DB

Cloudová databáze Azure Cosmos DB je ambiciózní projekt. Má emulovat více druhů databází - konvenční tabulky, orientované na dokumenty, rodinu sloupců a grafy - to vše prostřednictvím jediné sjednocené služby s konzistentní sadou API.

Za tímto účelem je databáze grafů pouze jedním z různých režimů, ve kterých může Cosmos DB pracovat. Používá jazyk dotazu Gremlin a API pro dotazy typu grafu a podporuje konzolu Gremlin vytvořenou pro Apache TinkerPop jako další rozhraní.

Dalším velkým prodejním bodem Cosmos DB je to, že indexování, škálování a georeplikace jsou zpracovávány automaticky v cloudu Azure, aniž by na vašem konci klouzalo. Zatím není jasné, jak architektura all-in-one společnosti Microsoft měří až do nativních databází grafů z hlediska výkonu, ale Cosmos DB rozhodně nabízí užitečnou kombinaci flexibility a rozsahu.

Další informace najdete v recenzi Azure Cosmos DB.

JanusGraph

JanusGraph byl vytvořen z projektu TitanDB a nyní je pod správou Linux Foundation. K ukládání dat grafů využívá libovolný počet podporovaných backendů - Apache Cassandra, Apache HBase, Google Cloud Bigtable, Oracle BerkeleyDB - podporuje dotazovací jazyk Gremlin (stejně jako další prvky ze zásobníku Apache TinkerPop) a může také začlenit fulltextové vyhledávání prostřednictvím projektů Apache Solr, Apache Lucene nebo Elasticsearch.

IBM, jeden z podporovatelů projektu JanusGraph, nabízí hostovanou verzi JanusGraph na IBM Cloud, nazvanou Compose for JanusGraph. Stejně jako Azure Cosmos DB, Compose pro JanusGraph poskytuje automatické škálování a vysokou dostupnost s cenami na základě využití prostředků.