/ / Optymalizacja kwerendy neo4j z bardzo dużym zestawem danych - neo4j, cypher

Optymalizacja kwerendy neo4j z bardzo dużym zestawem danych - neo4j, cypher

Próbuję dowiedzieć się, jak zoptymalizować szyfrzapytanie na bardzo dużym zbiorze danych. Próbuję znaleźć znajomych z drugiego lub trzeciego stopnia w tym samym mieście. Moje bieżące zapytanie o szyfrowanie trwa, co trwa 1 minutę:

match (n:User {id: 123})-[:LIVES_IN]->()<-[:LIVES_IN]-(u:User), (n)-[:FRIENDS_WITH*2..3]-(u) WHERE u.age >= 20 AND u.age <= 36 return u limit 100

Istnieje około 500 000 węzłów użytkownika i 500 milionówRelacje FRIENDS_WITH. Mam już indeksy właściwości id i wieku. Wydaje się, że zapytanie dławi się zgodnie z wymaganiem FRIENDS_WITH. Czy istnieje sposób na przemyślenie tego w inny sposób lub zoptymalizowanie szyfrowania, aby było to w czasie rzeczywistym (tj. Maksymalny czas 1-2 sekund)?

Oto profil zapytania:

Imgur

Dzięki.

Odpowiedzi:

0 dla odpowiedzi № 1

Utwórz indeks na właściwości id dla etykiety Użytkownik:

CREATE INDEX ON :User(id)

Więcej informacji można znaleźć w dokumentacji indeksów schematów http://neo4j.com/docs/stable/query-schema-index.html

Jeśli to nie pomoże dodać wyniku PROFIL zapytanie, a my możemy Ci pomóc

PROFILE MATCH ... rest of your query

Warto również spróbować przepisać zapytanie w następujący sposób:

MATCH (n:User {id: 123})-[:LIVES_IN]->()<-[:LIVES_IN]-(u:User),
(n)-[:FRIENDS_WITH*2..3]-(u)
WHERE u.age >= 20 AND u.age <= 36
return u limit 100