Cypher (Abfragesprache)

deklarative Abfragesprache für Graphen

Cypher ist eine deklarative Abfragesprache für Graphen, die expressive und effiziente Abfragen und Aktualisierungen auf sogenannten Property-Graphen[1] ermöglicht. Cypher ist eine relativ einfache und dennoch mächtige Sprache. Selbst sehr komplizierte Datenbankabfragen können mit Hilfe von Cypher einfach formuliert werden. Dies erlaubt Nutzern, sich auf ihr eigentliches Ziel zu konzentrieren, anstatt sich in der Datenbank zu verlieren.[2]

Cypher war hauptsächlich eine Erfindung von Andrés Taylor, die er 2011 während seiner Arbeit für die Neo4j, Inc. (früher „Neo Technology“) machte.[3] Cypher war ursprünglich dafür gedacht, mit der Graph-Datenbank Neo4j benutzt zu werden, wurde jedoch durch das openCypher-Projekt im Oktober 2015 in die Open-Source-Welt überführt.[4]

Graph-Modell

Bearbeiten

Cypher beruht auf dem Property-Graph-Modell, welches zusätzlich zu den Standard-Graph-Elementen Knoten (englisch „nodes“) und Kanten (englisch „edges“; welche in Cypher Beziehungen – englisch „relationships“ – heißen) Etiketten (englisch „labels“) und Eigenschaften (englisch „properties“) als Konzepte einführt. Knoten können keine oder viele Etiketten haben, während Beziehungen genau einen Beziehungstyp haben.[5] Knoten und Beziehungen haben auch keine oder viele Eigenschaften, bei denen Eigenschaften aus Schlüssel (englisch „key“) und Wert (englisch „value“) bestehen und den aus einer Zeichenkette (englisch „string“) bestehenden Schlüssel an einen Wert aus dem Typsystem von Cypher binden.

Typsystem

Bearbeiten

Das Typsystem von Cypher enthält Knoten, Beziehungen (Kanten), Pfade (englisch „paths“), Karten (englisch „maps“), Listen (englisch „lists“), Ganzzahlen (englisch „integers“), Gleitkommazahlen (englisch „floating point numbers“), logische Werte (englisch „booleans“) und Zeichenketten.[6]

Cypher enthält eine Vielzahl von Klauseln. Die gebräuchlichsten sind „MATCH“ und „WHERE“. Diese haben eine leicht abweichende Funktionalität von der aus der Datenbankabfragesprache SQL bekannten. MATCH wird für die Beschreibung der Struktur des gesuchten Musters (englisch „pattern“) verwendet, das primär auf Beziehungen beruht. WHERE wird verwendet, um zusätzliche Bedingungen (englisch „constraints“) für die Muster zu definieren.[7] Die folgende Abfrage wird zum Beispiel alle Filme als Antwort zurückgeben, in denen eine Schauspielerin 'Nicole Kidman' mitspielte, und die vor einem bestimmten (durch einen Parameter übergebenen) Jahr produziert wurden:

MATCH (nicole:Actor {name: 'Nicole Kidman'})-[:ACTED_IN]->(movie:Movie)
WHERE movie.year < $yearParameter
RETURN movie

Zusätzlich enthält Cypher Klauseln für das Schreiben, Aktualisieren und Löschen von Daten. „CREATE“ und „DELETE“ werden verwendet, um Knoten und Beziehungen zu erstellen bzw. zu löschen. „SET“ und „REMOVE“ werden verwendet, um Werte von Eigenschaften und Etiketten von Knoten zu setzen bzw. zu entfernen. Knoten können nur gelöscht werden, wenn sie keine Beziehungen (zu anderen Knoten) haben. Ein Beispiel:[7]

MATCH (start:Content)-[:RELATED_CONTENT]->(content:Content)
WHERE content.source = 'user'
OPTIONAL MATCH (content)-[r]-()
DELETE r, content

Standardisierung

Bearbeiten

Mit dem openCypher-Projekt wurde der Versuch gestartet, Cypher als Standard-Abfragesprache bei der Graph-Verarbeitung zu etablieren. Ein Teil des Prozesses war das First openCypher Implementers Meeting (oCIM), welches erstmals im Dezember 2016 angekündigt wurde.[8][9]

Siehe auch

Bearbeiten
Bearbeiten

Einzelnachweise

Bearbeiten
  1. Das Property-Graph-Modell. In: Datenbanken Online Lexikon. TH Köln, Campus Gummersbach, abgerufen am 6. Februar 2019.
  2. Cypher Introduction. Neo Technology, abgerufen am 31. Januar 2017.
  3. Cypher: An Evolving Query Language for Property Graphs. Proceedings of the 2018 International Conference on Management of Data. ACM, abgerufen am 27. Juni 2018.
  4. Meet openCypher: The SQL for Graphs - Neo4j Graph Database In: Neo4j Graph Database, 21. Oktober 2015. Abgerufen am 31. Januar 2017 
  5. Property Graph Model. GitHub, abgerufen am 31. Januar 2017.
  6. Cypher Type System. GitHub, abgerufen am 31. Januar 2017.
  7. a b Neo4j 3.1.1 manual - MATCH clause. Neo Technology, abgerufen am 31. Januar 2017.
  8. openCypher Implementers Meeting · openCypher.org. opencypher.org, archiviert vom Original am 28. Januar 2017; abgerufen am 31. Januar 2017.
  9. oCIM announcement on openCypher Google Groups. groups.google.com, abgerufen am 31. Januar 2017.