konzistence a integrita dat v grafu je tím zachována
díky transakci mohu změnit více dat na grafových datech najednou a přitom zajistit, že jsou data vždy v konzistentním stavu
podporuje horizontální škálování a umožňuje rozdělení dat na více serverů (+ paralelní zpracování)
ale nedají se horizontálně škálovat tak dobře jako jiné NoSQL databáze
škálování grafových dat je obtížnější
Nevýhody
shardování grafových dat je velmi složité, tak je horizontální škálování omezenější než např. pro Apache Cassandra, jde to, ale není to příliš doporučené
dále neumí dobře agregovat data
nemá tak vyvinuté transakce než RDBMS
Vlastní dotazovací jazyk Cypher
deklarativní jazyk speciálně vytvořený pro práci s grafovými daty
sekundární jazyk se jmenuje Gremlin - umožňuje procházení grafu (imperativní)
používá ASCII art pro dotazování (šipečky, vizuální znázornění vrcholů a hran)
() pro vrchol
-->, --, <-- pro vztahy
podobný jazyku SQL syntaxem a pak SPARQL svým vyhodnocováním
ale je tady velký rozdíl, že v rámci Cypheru lze jednotlivé příkazy lze několikrát opakovat v jednom dotazu
je to sekvence jednotlivých příkazů a výstup z prvního jde jako vstup do dalšího
samotný výstup je pak tzv. solution sequence
příkazem MATCH se specifikuje grafový vzor, který má databáze hledat
MATCH (a:AIRPORT)-[:DIRECT]->(b:AIRPORT)RETURN a, b;(a:AIRPORT) - vrchol a s labelem AIRPORT(a:AIRPORT) -[DIRECT]-> (b:AIRPORT)Pro vlastnosti (properties) se používá JSON syntax:MATCH (s{code:'sf'})-[:DIRECT]->(d) RETURN s,d;Vytvoření záznamuCREATE (a:PERSON {name: 'Petr'})-[:KNOWS]->(b:PERSON {name: 'Jana'});Smazání celé databázeMATCH (n)DETACH DELETE n;
pomocí příkazů CREATE, DELETE, SET, REMOVE se dá manipulovat s vrcholy, hranami, labels a i s properties
node patterns:
pro vybrání konkrétní node: (m)
label condition: (m:MOVIE)
vybrané nody musí být tento label (může jich být i více - všechny musí být splněny)