Modelo de datos de gráficos de Neptune. - Amazon Neptune

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Modelo de datos de gráficos de Neptune.

La unidad básica de los datos de gráficos de Amazon Neptune es un elemento de cuatro posiciones (cuádruple), que es similar a un cuádruple del marco de descripción de recursos (RDF). A continuación, se indican las cuatro posiciones de un cuádruple de Neptune:

  • subject    (S)

  • predicate  (P)

  • object     (O)

  • graph      (G)

Cada cuádruple es una instrucción que realiza una afirmación sobre uno o varios recursos. Una instrucción puede afirmar la existencia de una relación entre dos recursos o puede asociar una propiedad (par clave/valor) a un recurso. Por lo general, puede considerar el valor de predicado de cuádruple como el verbo de la instrucción. Describe el tipo de relación o propiedad que se va a definir. El objeto es el objetivo de la relación o el valor de la propiedad. A continuación se muestran algunos ejemplos:

  • Una relación entre dos vértices se puede representar almacenando el identificador del vértice de origen en la posición S, el identificador del vértice de destino en la posición O y la etiqueta de borde en la posición P.

  • Una propiedad se puede representar almacenando el identificador del elemento en la posición S, la clave de propiedad en la posición P y el valor de la propiedad en la posición O.

La posición G del gráfico se utiliza de forma diferente en las distintas pilas. En el caso de los datos RDF de Neptune, la posición G contiene un identificador de gráfico con nombre. En los gráficos de propiedad en Gremlin, se utiliza para almacenar el valor del ID de borde en el caso de un borde. En todos los demás casos, se usa de forma predeterminada un valor fijo.

Un conjunto de instrucciones de cuádruples con identificadores de recursos compartidos crea un gráfico.

Diccionario de valores orientados al usuario

Neptune no almacena la mayoría de los valores orientados al usuario directamente en los distintos índices que mantiene. En su lugar, los almacena por separado en un diccionario y los reemplaza en los índices por identificadores de 8 bytes.

  • Todos los valores orientados al usuario que se incluirían en los índices S, P o G se almacenan en el diccionario de esta forma.

  • En el índice O, los valores numéricos se almacenan directamente en el índice (en línea). Esto incluye los valores date y datetime (representados como milisegundos a partir de la época).

  • Todos los demás valores orientados al usuario que se incluirían en el índice O se almacenan en el diccionario y se representan en el índice mediante identificadores.

El diccionario contiene un mapeo directo de los valores orientados al usuario a identificadores de 8 bytes en un índice value_to_id.

Almacena el mapeo inverso de los identificadores de 8 bytes a los valores de uno de los dos índices, según el tamaño de los valores:

  • Un índice id_to_value mapea los identificadores a valores orientados al usuario que son inferiores a 767 bytes después de la codificación interna.

  • Un índice id_to_blob mapea los identificadores a valores más grandes orientados al usuario.

Cómo se indexan las instrucciones en Neptune

Cuando se realiza una consulta en un gráfico de cuádruples, para cada posición de cuádruple puede especificar una restricción de valor o no. La consulta devuelve todos los cuádruples que coinciden con las restricciones de valor que ha especificado.

Neptune utiliza índices para resolver consultas. En el documento de 2005, Optimized Index Structures for Querying RDF from the Web, Andreas Harth y Stefan Decker observaron que hay 16 (24) patrones de acceso posibles para las cuatro posiciones del cuadrante. Puede consultar los 16 patrones de forma eficiente sin tener que escanear y filtrar utilizando seis índices de instrucciones cuádruples. Cada índice de instrucción cuádruple utiliza una clave compuesta por los cuatro valores de posición concatenados en un orden diferente.

Access Pattern Index key order ---------------------------------------------------- --------------- 1. ???? (No constraints; returns every quad) SPOG 2. SPOG (Every position is constrained) SPOG 3. SPO? (S, P, and O are constrained; G is not) SPOG 4. SP?? (S and P are constrained; O and G are not) SPOG 5. S??? (S is constrained; P, O, and G are not) SPOG 6. S??G (S and G are constrained; P and O are not) SPOG 7. ?POG (P, O, and G are constrained; S is not) POGS 8. ?PO? (P and O are constrained; S and G are not) POGS 9. ?P?? (P is constrained; S, O, and G are not) POGS 10. ?P?G (P and G are constrained; S and O are not) GPSO 11. SP?G (S, P, and G are constrained; O is not) GPSO 12. ???G (G is constrained; S, P, and O are not) GPSO 13. S?OG (S, O, and G are constrained; P is not) OGSP 14. ??OG (O and G are constrained; S and P are not) OGSP 15. ??O? (O is constrained; S, P, and G are not) OGSP 16. S?O? (S and O are constrained; P and G are not) OSGP

De forma predeterminada, Neptune crea y mantiene solo tres de esos seis índices:

  • SPOG –   utiliza una clave compuesta de Subject + Predicate + Object + Graph.

  • POGS –   utiliza una clave compuesta de Predicate + Object + Graph + Subject.

  • GPSO –   utiliza una clave compuesta de Graph + Predicate + Subject + Object.

Estos tres índices administran muchos de los patrones de acceso más comunes. El mantenimiento de solo tres índices de instrucciones completos en lugar de seis reduce considerablemente los recursos que necesita para permitir un acceso rápido sin necesidad de escanear ni filtrar. Por ejemplo, el índice SPOG permite una búsqueda eficiente siempre que un prefijo de las posiciones, como el vértice o el identificador de vértice y propiedad, esté vinculado. El índice POGS permite un acceso eficiente cuando solo se vincula la etiqueta de borde o de propiedad almacenada en la posición P.

La API de bajo nivel para encontrar instrucciones toma un patrón de instrucción en el que algunas posiciones son conocidas y el resto se dejan para su detección por parte de la búsqueda por índice. Al componer las posiciones conocidas en un prefijo de clave de acuerdo con el orden de la clave de índice para uno de los índices de la instrucción, Neptune realiza un análisis de rango para recuperar todas las instrucciones que coincidan con las posiciones conocidas.

Sin embargo, uno de los índices de la instrucción que Neptune no crea de forma predeterminada es un índice OSGP de recorrido inverso, que puede reunir predicados en objetos y sujetos. En su lugar, Neptune realiza de forma predeterminada un seguimiento de predicados diferentes en un índice independiente que utiliza para realizar un análisis de unión de {all P x POGS}. Cuando trabaja con Gremlin, un predicado se corresponde con una propiedad o una etiqueta de borde.

La estrategia de acceso predeterminada de Neptune puede ser ineficiente si el número de predicados diferentes de un gráfico se vuelve grande. En Gremlin, por ejemplo, un paso in() en el que no se proporcionan etiquetas de borde, o cualquier paso que utilice in() internamente como both() o drop(), puede resultar bastante ineficiente.

Habilitación de la creación de índices OSGP mediante el modo lab

Si el modelo de datos crea un gran número de predicados distintos, es posible que experimente una reducción del rendimiento y un aumento de los costos operativos que se pueden mejorar considerablemente utilizando el modo de laboratorio para habilitar el índice OSGP además de los tres índices que Neptune mantiene de manera predeterminada.

nota

Esta característica está disponible a partir de la versión 1.0.1.0.200463.0 del motor de Neptune.

Habilitar el índice OSGP puede tener algunos inconvenientes:

  • La tasa de inserción puede disminuir hasta un 23 %.

  • El almacenamiento aumenta hasta un 20 %.

  • Las consultas de lectura que modifican todos los índices por igual (lo cual es bastante raro) pueden tener mayores latencias.

Sin embargo, en general merece la pena habilitar el índice OSGP para clústeres de base de datos con un gran número de predicados distintos. Las búsquedas basadas en objetos se vuelven muy eficientes (por ejemplo, encontrar todos los bordes entrantes en un vértice o todos los sujetos conectados a un objeto determinado) y, como resultado, la eliminación de vértices también se vuelve mucho más eficiente.

importante

Solo puede habilitar el índice OSGP en un clúster de base de datos vacío, antes de cargar cualquier dato en él.

 

Instrucciones de Gremlin en el modelo de datos de Neptune

Los datos de gráficos de propiedades de Gremlin se expresan en el modelo SPOG mediante tres clases de instrucciones:

Para saber cómo se utilizan en las consultas de Gremlin, consulte Descripción de cómo funcionan las consultas de Gremlin en Neptune.