Почему не рекомендуется индексировать отношения в графовой базе данных - PullRequest
0 голосов
/ 11 июня 2019

В книге Алекса Вукотика и Ники Ватт Neo4j в действии авторы говорят:

По нашему опыту, индексы отношений не являются хорошим решением. Мы не говорим, что индексация отношений - плохая практика, но если вы добавите много индексов отношений, стоит спросить, почему.

Похоже, что авторы не рекомендуют индексировать отношения в базе данных графов, но после этого никаких объяснений не приводится. Кто-нибудь знает почему?

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Во-первых, важно понять роль индексов в Neo4j, так как индексы используются для поиска начальных точек на графике, после чего обход отношений и фильтрация используются для выполнения оставшейся части сопоставления с образцом и для выполнения запроса. .

Поэтому совет примерно такой же, как: «мы не рекомендуем использовать отношения в качестве отправных точек на графике», и мы находим это истиной чаще, чем нет.

Обычно, когда вам нужно выполнить поиск по индексу, вы имеете в виду определенные «вещи» в качестве отправных точек, а важные вещи на графиках обычно представлены узлами. Если мы спрашиваем «какие сотрудники связаны с этой конкретной компанией», мы заинтересованы в том, чтобы быстро начать с поиска этой конкретной компании и расширения, а не поиска всех: связей EMPLOYED_BY на графике и фильтрации по связанной компании, что займет гораздо больше времени.

Часто мы обнаруживаем, что тем, кто сталкивается с этим ограничением и в любом случае нуждается в таком быстром поиске отношений, возможно, придется пересмотреть свою модель. Часто, когда есть необходимость искать отношения как начальные места в графе, это указывает на то, что вещь, представленная отношением, достаточно важна, чтобы она действительно была узлом в графе (со своими собственными отношениями к ранее подключенным узлам ), так что это становится «запахом моделирования», который приводит к изменениям рефакторинга модели. Часто такого рода изменения кажутся более естественными после и дают больше возможностей для вещи в качестве узла, который был недоступен, когда он моделировался как отношение (например, возможность применить к нему несколько меток или подключить его). через отношения к большему количеству узлов, чем просто к двум оригиналам).

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

С полными текстовыми индексами схемы , представленными в Neo4j 3.5, мы добавили возможность добавлять индексы отношений по типу (ам) отношения и свойству (или свойствам). Таким образом, возможность есть, если необходимо, после того, как вы исключили рефакторинг вашей модели.

0 голосов
/ 11 июня 2019

Я проголосовал за то, чтобы этот вопрос был перенесен в SO, и я ответил на него, надеясь, что он действительно будет перенесен. Я использовал Neo4j пару лет. Хотя с тех пор она сильно изменилась, принципы работы с графической базой данных не сильно изменятся, я верю. По моему мнению, если вам нужно много индексов для быстрого запроса взаимосвязей между узлами, вы могли бы спроектировать свою модель данных другим способом, чтобы она больше фокусировалась на узлах графа (например, отношения, являющиеся вашими узлами, и узлы, являющиеся вашими отношениями, как в линейном графике ); потому что механизм запросов (например, запрос Cypher) обычно оптимизирован для узлов.

...