Я - граф БД относительно 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 кричит, что этого не должно быть. Это просто так, или я ничего не знаю о правильном «графическом» способе вещей?