2016-08-09 32 views
0

Wenn Sie Neo4j bitten, einen Index zu erstellen, der bereits existiert, wird keine Ausnahme ausgelöst, was für meinen Zweck gut erscheint.Cypher: Einen bereits existierenden Schema-Index erstellen

session.run("CREATE INDEX ON :User(email)"); 

Frage 1:

Aber wie Neo4j ist der Umgang mit dieser unter der Haube? Löscht es den Index, erstellt ihn neu oder ignoriert er die Abfrage vollständig, da der Index bereits existiert?

Ich würde gerne wissen, weil ich einige CRUD-Operationen habe und ich möchte das Schema für meine Knoten in dem Moment definieren, in dem ich sie erstelle, was bedeutet, "CREATE INDEX" und so viertens aufzurufen. Der Nachteil besteht darin, dass für jeden neuen Knoten redundante Aufrufe erstellt werden, um einen Index zu erstellen, was in Ordnung ist, wenn sie ignoriert werden, wenn der Index bereits existiert.

Frage 2:

ich folgende Arbeiten bemerkt, auch wenn keine Knoten mit der Bezeichnung Benutzer existieren noch (Bedeutung I Etiketten und Index vor dem zugehörigen Knoten anlegen zu können).

CREATE INDEX ON :User(email) 

Ich bin neu in Neo4j und verwenden, um die RDBMS Welt, wo man nicht einen Index für eine Spalte erstellen, die nicht existiert. Habe ich Recht, dass das Erstellen von Indizes und Beschriftungen, bevor ich die Knoten mit diesen Beschriftungen und Eigenschaften erstellt habe, keine unvorhergesehenen Probleme verursachen sollte?

Antwort

1

Bei der Beantwortung der Frage Nr. 2 ist das Erstellen von Indizes und Constraints auch dann kein Problem, wenn keine Knoten mit diesen Labels oder Eigenschaften vorhanden sind. Ich empfehle diese Route.

Ich würde empfehlen, Indizes mit jeder Node-Erstellung zu erstellen. Während ich nicht glaube, dass es viel in verschwendeten Zyklen verursacht, scheint es nicht wie gutes Design.

0

Frage 1

Das wird nicht funktionieren, wenn Sie Einschränkungen schaffen. Sie können nur einmal aufgerufen werden, und wenn sie existieren, werden SIE tatsächlich eine Ausnahme auslösen. Normale Indizes scheinen dies nicht zu tun, daher sollte dieser ganze Ansatz nicht versucht werden.

Frage 2

See InverseFalcons Kommentar, aber es scheint der richtige Ansatz zu sein.