Neo4j ГДЕ В ВОПРОСАХ - PullRequest
       2

Neo4j ГДЕ В ВОПРОСАХ

0 голосов
/ 20 февраля 2020

Я - граф БД относительно n00b, играю с Neo4j (через Ruby ActiveRecord, но я не думаю, что это актуально), очень наслаждаюсь этим, но обнаружил некоторое нелогичное поведение.

Моя проблема заключается в получении некоторых данных из БД, возвращении их к моему Ruby коду, выполнении некоторой обработки, а затем создании второго запроса с набором идентификаторов, идентифицированных этой внешней обработкой (это слишком сложно делать в БД). В результате получается запрос ActiveRecord, например

Foo.where(foo_id: foo_ids)...

, который преобразуется в запрос Cypher, например

MATCH (foo:Foo) WHERE foo.foo_id IN [1, 5, ...] ...

. Набор идентификаторов - largi sh, несколько десятков тысяч, и я Нахожу этот запрос действительно довольно медленно. У foo_id есть уникальное ограничение, и мой опыт работы с RDBMS кричит, что этого не должно быть. Это просто так, или я ничего не знаю о правильном «графическом» способе вещей?

1 Ответ

2 голосов
/ 20 февраля 2020

вам нужно создать индекс по foo_id. После этого вместо проверки в массиве вы можете разматывать этот массив и сопоставлять, как показано ниже

UNWIND [1,4,5,.....] as id 
MATCH (foo : Foo{foo_id:id}) 
RETURN foo 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...