Index in RedisGraph (RedisGraph-Index)

Index in RedisGraph

Überblick

Die Indizierung ist ein wichtiger Aspekt des Entwurfs und der Entwicklung von Graphdatenbanken. Indizes können die Abfrageeffizienz der Datenbank erheblich verbessern.

Wenn RedisGraph beispielsweise die folgende Anfrage (Abfrage) verarbeitet:

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

Wenn kein entsprechender Index eingerichtet ist, muss RedisGraph die Knoten durchlaufen, deren Bezeichnung eine Rolle ist, und die Abfrageeffizienz ist gering. Wenn ein entsprechender Index vorhanden ist, kann RedisGraph den Zielknoten direkt anhand von name='Guo Jing' finden. Vermeidung ineffizienter Traversierungsvorgänge.

Übersicht über den Index in RedisGraph

Es gibt keine Indexcode-Implementierung in RedisGraph, das die RediSearch-Suchmaschine zum Erstellen des Index verwendet.

RediSearch ist eine leistungsstarke Volltextsuchmaschine, die als Redis-Modul auf Redis ausgeführt werden kann. Die Kerndatenstruktur von RediSearch ist der invertierte Index, der hashbar ist. Mit anderen Worten, der Index in RedisGraph ist ein Hash-Index.

Es gibt zwei Arten von Indizes in RedisGraph:

  • exakter Übereinstimmungsindex

    RedisGraph unterstützt nur die Erstellung von Einzelattributindizes für Knoten/Kanten.

    Beispielsweise können wir einen Einzelattributindex für das Namensattribut auf dem Knoten erstellen, dessen Bezeichnung eine Rolle ist:

    GRAPH.QUERY DEMO_GRAPH "CREATE INDEX ON :Person(age)"
    
  • Volltextindex

    RedisGraph nutzt die Indexfunktion von RediSearch, um über einen Prozeduraufruf einen Volltextindex bereitzustellen.

    Beispielsweise können wir einen Volltextindex für das Namensattribut aller Knoten erstellen, deren Bezeichnung „Rolle“ ist:

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

Implementierung des Index in RedisGraph

Schauen wir uns zunächst Indexdie Implementierung an. IndexEs gibt zwei Typen, nämlich Exact-Match und Fulltext, die die Einrichtung von Einzelattributindizes für Knoten/Kanten unterstützen. RedisGraph verwendet die RediSearch-Suchmaschine, um einen Index zu erstellen, der Indexin RedisGraph gekapselt ist 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 wird Schemazum Organisieren von Indizes verwendet. Für jede Entität (Knoten/Kante) verwaltet RedisGraph eine Schema. SchemaAlle mit der Entität (Knoten/Kante) verbundenen Indizes werden in gespeichert.

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;

おすすめ

転載: blog.csdn.net/qq_49588762/article/details/127819905