Derzeit habe ich ein Diagramm über die DSE Graph Engine mit 100K Knoten gespeichert. Diese Knoten haben das Label "Kunde" und eine Eigenschaft namens "Alter", die ganzzahlige Werte erlaubt.DSE Graph Index auf Integer Interval
schema.vertexLabel("customer").index("custByAge").secondary().by("age").add()
Ich möchte in der Lage sein, diesen Index zu verwenden, zu beantworten Anfragen, die für Kunden innerhalb einer bestimmten Altersgruppe suchen (zum Beispiel „Alter“ zwischen 10 und 20): Ich habe diese Eigenschaft mit dem folgenden Befehl indiziert. Es scheint jedoch nicht so, als ob der Index, den ich erstellt habe, tatsächlich verwendet wird, wenn ich Kunden nach einem Altersintervall abfrage.
Wenn ich die folgende Abfrage einreichen, eine Liste von Scheitelpunkten wird in etwa 40 ms zurück, was mich führt zu glauben, dass der Index verwendet wird:
g.V().has('customer','age',15)
Aber wenn ich die folgende Abfrage senden, die Abfrage mal nach 30 sec (wie ich in meiner Konfiguration angegeben haben):
g.V().has('customer','age',inside(10,20))
Interruption of result iteration
Display stack trace? [yN]
Dies führt mich zu glauben, dass der Index für diese Abfrage nicht verwendet wird. Scheint das richtig? Und wenn der Index nicht verwendet wird, hat jemand einen Ratschlag, wie ich diese Abfrage beschleunigen kann?
EDIT Wie unten durch eine Antwort vorgeschlagen, ich habe auf jedem der oben genannten Abfragen ausführen .profile, mit den folgenden Ergebnissen (nur relevante Informationen angezeigt):
gremlin> g.V().has('customer','age',21).profile()
==>Traversal Metrics
...
index-query 14.333ms
gremlin> g.V().has('customer','age',inside(21,23)).profile()
==>Traversal Metrics
...
index-query 115.055ms
index-query 132.144ms
index-query 132.842ms
>TOTAL 53042.171ms
Dies läßt mich mit einem einige Fragen:
- Gibt die Tatsache, dass .profile()
index-query
zurückgibt, dass Indizes für meine zweite Abfrage verwendet werden? - Warum hat die zweite Abfrage 3 Indexabfragen, im Gegensatz zu 1 für die erste Abfrage?
- Alle Indexabfragen kombiniert, für die zweite Abfrage insgesamt etwa ~ 400ms. Warum dauert die gesamte Abfrage ~ 50000ms? Der Befehl .profile() zeigt nichts anderes als diese Indexabfragen, von denen die zusätzlichen 50000ms kommen.
Die gesamte .profile() Ausgabe wäre nützlich zu sehen.Wenn Sie DataStax Studio verwenden, können Sie zusätzlich die Anmerkungsdetails überprüfen, indem Sie die Maus über die einzelnen Zeilen bewegen. –
Könnten 3 Indexabfragen sein, weil die Zwischenergebnisgrößen die Grenze von 50k Elementen erreichen ..? Wie viele Elemente erwarten Sie? Beachten Sie, dass sekundäre Indizes eine schlechte Wahl für große Ergebnisse sind, sollten Sie stattdessen einen Suchindex versuchen. –