Ich habe eine einfache Abfrage cipher, die zu lange dauert zu vervollständigen.Neo4j-Chiffre-Abfrage dauert zu lange
Knotentypen
Person {PersonId, PersonEmailAddress}
Dokument {DocumentId}
Beziehungsarten: SENT, TO, CC, BCC
Das Konzept lautet:
(p: Person) - [: SENT] -> (d: Dokument) - [: TO | CC | BCC] -> (anotherPerson: Person)
Ich versuche, jene Person, auf die jeder zu bekommen Die angegebene Person hat maximal eine E-Mail gesendet.
Zum Beispiel können Sie in der folgenden Grafik sehen, dass Person # 1 maximal Mails (6 Mails) an Person # 77 und Person # 615 und so weiter gesendet hat. Also hier möchte ich (wie in der folgenden Tabelle erwähnt) Top 5 Person IDs mit Anzahl der Anzahl der an diese Person gesendeten Mail.
+------------+-----------------------+
| ReceiverId | NumberOfMailsReceived |
+------------+-----------------------+
| 77 | 6 |
| 615 | 6 |
| 101 | 4 |
| 247 | 4 |
| 252 | 4 |
+------------+-----------------------+
Ich versuche, die folgende Abfrage:
MATCH(p:Person{PersonId:1})-->(d) WITH DISTINCT d
MATCH (d)-->(rc)
RETURN rc, COUNT(rc) as c ORDER BY c DESC LIMIT 5
Hier wird mit dieser Abfrage keine Performance-Problem, da nur gibt es 9 dokumentiert die Person # 1 gesendet und nur 15 Personen sind als Empfänger dieser 9 Dokumente beteiligt.
Aber wenn ich die gleiche Abfrage für eine andere Person Feuer, die fast 56.500 Dokumente insgesamt gesandt hat, und insgesamt 869 (distinct) Person als Empfänger beteiligt sind, dauert die Abfrage 43261 ms
Cypher version: CYPHER 3.1, planner: COST, runtime: INTERPRETED. 21570218 total db hits in 43261 ms.
Die abzuschließen PROFILE ist als unten
Mein Neo4j Browser zeigt Größe: 5,16 GiB unter Datenbank se ction.
Das sind die configs Ich verwende:
dbms.memory.heap.initial_size=8G
dbms.memory.heap.max_size=8G
dbms.memory.pagecache.size=4g
Irgendwelche Vorschläge oder Ideen, um die Abfrage zu optimieren?
Vielen Dank im Voraus.
EDIT
Nach Neo4j Version von 3.1.1 bis 3.2, die Abfrage dauert noch ca. ms aktualisiert wird.