Cypher es un lenguaje de consulta de gráficos declarativos que permite realizar consultas de datos expresivas y eficientes en un gráfico de propiedades. [1]
Cypher fue en gran parte una invención de Andrés Taylor mientras trabajaba para Neo4j, Inc. (anteriormente Neo Technology) en 2011. [2] Cypher originalmente estaba destinado a usarse con la base de datos gráfica Neo4j , pero se abrió a través del proyecto openCypher en octubre de 2015 . [3]
El lenguaje fue diseñado con el poder y la capacidad de SQL (lenguaje de consulta estándar para el modelo de base de datos relacional ) en mente, pero Cypher se basó en los componentes y necesidades de una base de datos construida sobre los conceptos de la teoría de grafos . En un modelo de gráfico, los datos se estructuran como nodos ( vértices en matemáticas y ciencia de redes) y relaciones (aristas en matemáticas y ciencia de redes) para centrarse en cómo las entidades de los datos están conectadas y relacionadas entre sí.
Modelo gráfico
Cypher se basa en el modelo de gráfico de propiedades , que organiza los datos en nodos y bordes (llamados "relaciones" en Cypher). Además de esos elementos gráficos estándar de nodos y relaciones, el modelo de gráfico de propiedades agrega etiquetas y propiedades para describir categorías y atributos más precisos de los datos.
Los nodos son las entidades del gráfico. Pueden contener cualquier número de atributos (pares clave-valor) llamados propiedades. Los nodos se pueden etiquetar con cero o más etiquetas (como etiquetas o categorías), que representan sus diferentes roles en un dominio. Las relaciones proporcionan conexiones dirigidas, nombradas y semánticamente relevantes entre dos entidades de nodo. Una relación siempre tiene una dirección, un nodo inicial, un nodo final y exactamente un tipo de relación. Como los nodos, las relaciones también pueden tener propiedades. [4]
Las etiquetas pueden agrupar nodos similares asignando cero o más etiquetas de nodo. Las etiquetas son como etiquetas y le permiten especificar ciertos tipos de entidades para buscar o crear. Las propiedades son pares clave-valor con un enlace de una clave de cadena y algún valor del sistema de tipos Cypher. Las consultas cifradas se ensamblan con patrones de nodos y relaciones con cualquier filtrado especificado en etiquetas y propiedades para crear, leer, actualizar y eliminar datos que se encuentran en el patrón especificado.
Tipo de sistema
El sistema de tipo Cypher incluye muchos de los tipos comunes que se utilizan en otros lenguajes de programación y consulta. Los tipos admitidos incluyen tipos de valor escalar, como números booleanos, de cadena, numéricos, enteros y de punto flotante. También admite tipos temporales como fecha y hora, fecha y hora local, fecha, hora, hora local y duración. Hay disponibles tipos de contenedor para mapas y listas, junto con tipos de gráficos para nodo, relación y ruta, y un tipo vacío. [5]
Sintaxis
El lenguaje de consulta Cypher describe patrones de nodos y relaciones y filtra esos patrones en función de etiquetas y propiedades. La sintaxis de Cypher se basa en el arte ASCII , que es un arte visual basado en texto para computadoras. Esto hace que el lenguaje sea muy visual y fácil de leer porque representa tanto visual como estructuralmente los datos especificados en la consulta. Por ejemplo, los nodos se representan entre paréntesis alrededor de los atributos y la información sobre la entidad. Las relaciones se representan con una flecha (dirigida o no dirigida) con el tipo de relación entre paréntesis.
// nodo ( variable : Label { propertyKey : ' propertyValue ' }) // relación - [ variable : RELATIONSHIP_TYPE ] ->// patrón Cypher ( node1 : LABELA ) - [ rel1 : RELATIONSHIP_TYPE ] -> ( node2 : LabelB )
Palabras clave
Al igual que otros lenguajes de consulta, Cypher contiene una variedad de palabras clave para especificar patrones, filtrar patrones y devolver resultados. Entre los más comunes se encuentran: COINCIDIR, DÓNDE y REGRESAR. Estos funcionan de forma ligeramente diferente a SELECT y WHERE en SQL ; sin embargo, tienen propósitos similares.
COINCIDIR se utiliza antes de describir el patrón de búsqueda para encontrar nodos, relaciones o combinaciones de nodos y relaciones juntos. [6] DONDE en Cypher se usa para agregar restricciones adicionales a los patrones y filtrar los patrones no deseados. [7] Cypher's RETURN formatea y organiza cómo se deben generar los resultados. Al igual que con otros lenguajes de consulta, puede devolver los resultados con propiedades específicas, listas, orden y más. [8]
Usando las palabras clave con la sintaxis de patrón que se muestra arriba, la consulta de ejemplo a continuación buscará el patrón del nodo (etiqueta de actor y propiedad llamada nombre con valor de 'Nicole Kidman') conectado por una relación (tipo ACTED_IN y dirección de salida alejada de la primer nodo) a otro nodo (etiqueta de película). Luego, la cláusula WHERE filtra para mantener solo los patrones en los que el nodo de película en la cláusula de coincidencia tiene una propiedad de año que es menor que el valor del parámetro pasado. En la devolución, la consulta especifica la salida de los nodos de película que se ajustan al patrón y filtrado del partido y cláusulas where.
MATCH ( nicole : Actor { nombre : ' Nicole Kidman ' }) - [ : ACTED_IN ] -> ( película : Película ) DONDE película . año < $ año Parámetro VUELTA la película
Cypher también contiene palabras clave para especificar cláusulas para escribir, actualizar y eliminar datos. CREAR y ELIMINAR se utilizan para crear y eliminar nodos y relaciones. SET y REMOVE se utilizan para establecer valores en las propiedades y agregar etiquetas en los nodos. MERGE se utiliza para crear nodos de forma única sin duplicados. Los nodos solo se pueden eliminar cuando aún no existen otras relaciones. Por ejemplo: [9]
PARTIDO ( startContent : Contenido ) - [ relación : IS_RELATED_TO ] -> ( endContent : Contenido ) DONDE endContent . fuente = ' usuario ' PARTIDA OPCIONAL ( endContent ) - [ r ] - () DELETE relación , endContent
Estandarización
Con el proyecto openCypher, se inició un esfuerzo para estandarizar Cypher como el lenguaje de consulta para el procesamiento de gráficos. Como parte de este proceso, se han realizado cinco Reuniones de Implementadores OpenCypher (oCIM) cara a cara. La primera reunión tuvo lugar en febrero de 2017 en la sede de SAP en Walldorf en Alemania, coincidiendo con una reunión del Linked Data Benchmark Council. El OCIM más reciente tuvo lugar en Berlín, [10] coincidiendo con el Taller del W3C sobre estándares web para la gestión de datos gráficos, en marzo de 2019 [11].
En esa reunión, hubo un consenso para trabajar para que Cypher se convierta en un aporte significativo en un proyecto más amplio para un lenguaje de consulta de gráficos estandarizado internacional llamado GQL. En septiembre de 2019, una propuesta para un proyecto de estándar GQL fue aprobada por votación de los organismos nacionales de estándares que son miembros del Comité Técnico Conjunto 1 de ISO / IEC (responsable de los estándares de tecnología de la información). [12] La propuesta de proyecto GQL establece lo siguiente:
El uso de gráficos como representación fundamental para el modelado de datos es un enfoque emergente en la gestión de datos. En este enfoque, el conjunto de datos se modela como un gráfico, que representa cada entidad de datos como un vértice (también llamado nodo) del gráfico y cada relación entre dos entidades como un borde entre los vértices correspondientes. El modelo de datos gráficos ha llamado la atención por sus ventajas únicas. En primer lugar, el modelo gráfico puede ser un ajuste natural para conjuntos de datos que tienen estructuras jerárquicas, complejas o incluso arbitrarias. Estas estructuras se pueden codificar fácilmente en el modelo de gráfico como aristas. Esto puede ser más conveniente que el modelo relacional, que requiere la normalización del conjunto de datos en un conjunto de tablas con tipos de filas fijas. En segundo lugar, el modelo gráfico permite la ejecución eficiente de consultas costosas o funciones analíticas de datos que necesitan observar relaciones de múltiples saltos entre entidades de datos, como consultas de accesibilidad, consultas de ruta más corta o más barata o análisis de centralidad. Hay dos modelos de gráficos en uso actual: el modelo de marco de descripción de recursos (RDF) y el modelo de gráfico de propiedades. El modelo RDF ha sido estandarizado por W3C en una serie de especificaciones. El modelo Property Graph, por otro lado, tiene una multitud de implementaciones en bases de datos de gráficos, algoritmos de gráficos e instalaciones de procesamiento de gráficos. Sin embargo, falta un lenguaje de consulta común y estandarizado para gráficos de propiedades (como SQL para sistemas de bases de datos relacionales). Se propone GQL para llenar este vacío. [13]
Ver también
- Neo4j , una popular base de datos de gráficos para Cypher Query Language
- Grafica la base de datos , los antecedentes, los modelos de datos, los componentes y los proveedores para esta categoría de base de datos
- SPARQL , otro lenguaje de consulta declarativo para consultar datos de gráficos
- Gremlin , otra forma de consultar datos gráficos
- GQL ( lenguaje de consulta de gráficos )
Referencias
- ^ "Introducción de cifrado" . Neo4j . Consultado el 8 de noviembre de 2019 .
- ^ "Cypher: un lenguaje de consulta en evolución para gráficos de propiedades" (PDF) . Actas de la Conferencia Internacional sobre Gestión de Datos de 2018. ACM . Consultado el 27 de junio de 2018 .
- ^ "Conoce openCypher: el SQL para gráficos - Base de datos de gráficos Neo4j" . Base de datos de gráficos de Neo4j . 2015-10-21 . Consultado el 8 de noviembre de 2019 .
- ^ "Modelo de gráfico de propiedades" . GitHub . Consultado el 8 de noviembre de 2019 .
- ^ "Sistema de tipo cifrado" . GitHub . Consultado el 8 de noviembre de 2019 .
- ^ "Manual de cifrado - cláusula MATCH" . Neo4j . Consultado el 8 de noviembre de 2019 .
- ^ "Manual de cifrado - cláusula WHERE" . Neo4j . Consultado el 8 de noviembre de 2019 .
- ^ "Manual de cifrado - cláusula RETURN" . Neo4j . Consultado el 8 de noviembre de 2019 .
- ^ "Cláusulas del manual cifrado" . Neo4j . Consultado el 8 de noviembre de 2019 .
- ^ https://www.opencypher.org/events
- ^ "Taller del W3C sobre estandarización web para datos gráficos. Creación de puentes: RDF, gráfico de propiedades y SQL" . W3C . Consultado el 29 de septiembre de 2019 .
- ^ "ISO / IEC WD 39075 Tecnología de la información - Lenguajes de bases de datos - GQL" . ISO . Consultado el 29 de septiembre de 2019 .
- ^ "ISO / IEC JTC 1 / SC 32 N 3007 - ISO / IEC NP 39075 Tecnología de la información - Lenguajes de bases de datos - GQL" . Instituto Británico de Estándares . Consultado el 29 de septiembre de 2019 .