У меня есть модель данных, которую я хочу примерно смоделировать по статье, опубликованной в этом Graphgist.
Мне любопытно, какую производительность я могу ожидать от предложения WHERE в случае, если заданный набор из двух узлов имеет большое количество отношений между ними с параметрами «от» и «до», определенными на каждом ребре. Когда вы выполняете такой запрос на сопоставление, где у вас, скажем, 100 отношений SELLS, как Neo4J справляется с производительностью фильтрации по краям только до тех, которые имеют значение, на основе критериев WHERE:
MATCH (s:Shop{shop_id:1})-[r1:SELLS]->(p:Product)
WHERE (r1.from <= 1391558400000 AND r1.to > 1391558400000)
MATCH (p)-[r2:STATE]->(ps:ProductState)
WHERE (r2.from <= 1391558400000 AND r2.to > 1391558400000)
RETURN p.product_id AS productId,
ps.name AS product,
ps.price AS price
ORDER BY price DESC
Я не нашел способа напрямую индексировать свойства на ребре, поэтому я предполагаю, что либо оптимизатор запросов может позаботиться о чем-то подобном, либо он просто буквально проходит массив ребер и находит те, которые соответствуют.