Índice en RedisGraph (índice RedisGraph)

Índice en RedisGraph

descripción general

La indexación es un aspecto importante del diseño y desarrollo de bases de datos gráficas. La indexación puede mejorar en gran medida la eficiencia de las consultas de la base de datos.

Por ejemplo, cuando RedisGraph maneja la siguiente solicitud (consulta):

GRAPH.QUERY DEMO_GRAPH "MATCH (n:作品)-[]-(m:角色) where m.name='郭靖' return n.name"

Si no se establece un índice correspondiente, RedisGraph tendrá que atravesar los nodos cuya etiqueta es un rol y la eficiencia de la consulta es baja; si hay un índice correspondiente, RedisGraph puede encontrar directamente el nodo de destino de acuerdo con el nombre = 'Guo Jing'. evitando operaciones transversales ineficientes.

Descripción general del índice en RedisGraph

No existe una implementación de código de índice en RedisGraph, que utiliza el motor de búsqueda RediSearch para construir el índice.

RediSearch es un motor de búsqueda de texto completo de alto rendimiento que puede ejecutarse en Redis como un módulo de Redis. La estructura de datos principal de RediSearch es el índice invertido, que es una tabla hash. En otras palabras, el índice en RedisGraph es un índice hash.

Hay dos tipos de índices en RedisGraph:

  • índice de coincidencia exacta

    RedisGraph solo admite la creación de índices de atributo único para nodos/bordes.

    Por ejemplo, podemos crear un índice de atributo único para el atributo de nombre en el nodo cuya etiqueta es un rol:

    GRAPH.QUERY DEMO_GRAPH "CREATE INDEX ON :Person(age)"
    
  • índice de texto completo

    RedisGraph utiliza la función de índice de RediSearch para proporcionar un índice de texto completo mediante una llamada a procedimiento.

    Por ejemplo, podemos construir un índice de texto completo en el atributo de nombre de todos los nodos cuya etiqueta es "rol":

    GRAPH.QUERY DEMO_GRAPH "CALL db.idx.fulltext.createNodeIndex('Person', 'name')"
    

Implementación de índice en RedisGraph

Primero, veamos Indexla implementación. IndexHay dos tipos, a saber, coincidencia exacta y texto completo, que admiten el establecimiento de índices de atributo único para nodo/borde. RedisGraph utiliza el motor de búsqueda RediSearch para construir un índice, que Indexestá encapsulado en RedisGraph RSIndex.

typedef struct {
    
    
	char *label;                  // indexed label
	int label_id;                 // indexed label ID
	IndexField *fields;           // indexed fields
	char *language;               // language
	char **stopwords;             // stopwords
	GraphEntityType entity_type;  // entity type (node/edge) indexed
	IndexType type;               // index type exact-match / fulltext
	RSIndex *idx;                 // rediSearch index
} Index;

RedisGraph utiliza Schemapara organizar índices. Para cada entidad (nodo/borde), RedisGraph mantiene un archivo Schema. SchemaTodos los índices relacionados con la entidad (nodo/borde) se almacenan en .

typedef struct {
    
    
	int id;               // schema id
	char *name;           // schema name
	SchemaType type;      // schema type (node/edge)
	Index *index;         // exact match index
	Index *fulltextIdx;   // full-text index
} Schema;

Supongo que te gusta

Origin blog.csdn.net/qq_49588762/article/details/127819905
Recomendado
Clasificación