Используйте метку или узел для оптимизации шифра запроса - PullRequest
0 голосов
/ 25 мая 2018

Мне нужно знать, какие пользователи в моей базе данных активны, а какие нет.Первый способ - поместить типичное свойство Active и установить для него значение true или false, но в запросе для возврата активные пользователи должны будут пройти через все узлы.Я думаю, что это можно оптимизировать несколькими способами.Первым было бы создать узел, активный , чтобы у активных пользователей было отношение MATCH (u:User)-[:IS]-> (Active) return u, другой - создать метку : активный , чтобы его вернутьбыть MATCH (u:Active) RETURN u.Аналогично ответу: Тип свойства узла Neo4j .Лично я считаю, что назначение метки более эффективно, но я не знаю, как я могу вернуть пользователей, которые не активны, я не хотел бы создавать вторую метку для Inactive.Что ты думаешь?

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Чтобы сделать более глубокий тест, я добавил в базу данных 240'014 пользователей из них 120'000 были помечены как активные, чтобы выполнить 3 типа запросов:

  1. с активным свойством : match(c:User) where c.active=true return c.name с задержкой 285 мс match(c:User) where c.active=true return count(c) с задержкой 75 мс

  2. с меткой: Active : match(c:Active) return c.name с задержкой 271 мс match(c:Active) return count(c) с задержкой 1 мс

  3. с активным узлом : match(c:User)-[:IS]->(:Active) return c.name с задержкой 433 мс match(c:User)-[:IS]->(:Active) return count(c) с задержкой 167 мс

0 голосов
/ 25 мая 2018

Вы даете каждому User логическое active свойство и создаете на нем index , например:

CREATE INDEX ON :User(active);

Затем вы можете быстро получить все активныепользователям нравится это:

MATCH (u:User)
WHERE u.active
RETURN u;

и всем неактивным пользователям нравится это:

MATCH (u:User)
WHERE NOT u.active
RETURN u;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...