Cypher ist eine deklarative Abfragesprache für Graphen, die expressive und effiziente Abfragen und Aktualisierungen auf sogenannten Property-Graphen 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.

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. 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.

Graph-Modell 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. 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 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.

Syntax 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. 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:

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

Standardisierung 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.

Siehe auch SPARQL, eine weitere deklarative Abfragesprache für Graph-Daten Graphdatenbank

Weblinks OpenCypher, eine Initiative von Neo4j, Inc. und anderen, um die Benutzung von Cypher auf andere Graphdatenbanken auszuweiten (englisch) Meet openCypher: The SQL for Graphs (englisch)

Einzelnachweise

Kategorie:Datenbanksprache Kategorie:Freie Software Kategorie:NoSQL