2015-08-27 2 views
0

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

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

  2. Один пользователь также подключается к другому пользователю, если оба находятся в одном обществе/сообществе. Поэтому, когда пользователь обновляет свой адрес проживания (название общества, город), я делаю запрос в графе db и получаю все узлы, которые также остаются в том же обществе и создают этого нового пользователя с теми узлами с именем отношения " Это же общество ».

  3. То же самое можно было бы связать с другим пользователем, если оба пользователя учатся в одном колледже или школе. Я делаю связь между двумя узлами с отношением «Тот же колледж/школа».

Каков наилучший способ моделирования вышеуказанной проблемы в neo4j? Если я делаю запрос в БД, чтобы получить все типы отношений и кратчайший путь всех отношений между заданными двумя узлами, какая модель будет оптимизирована для этого типа запроса?

ответ

0
  1. Просто создать отношения между пользователями

    (user)-[:FRIEND_OF]-(user)

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

  2. Создайте узел, представляющий ваше общество/сообщество, и соедините всех пользователей, живущих там, с этим узлом. Это имеет ряд преимуществ:

    • при добавлении нового пользователя в сообществе вы только создать одно соотношение (по сравнению с связывающая пользователя непосредственно ко всем пользователям, что является N отношения), то же самое для удаления пользователя из сообщества.

    • вы можете создавать различные отношения между пользователем и сообщества

    (user)-[:LIVES]-(community1) (user)-[:WORKS]-(community2)

  3. Это, по существу, такой же, как нет. 2. Вы можете различать типы сообществ (школы и т. Д.), Используя разные метки/свойства.

Поиск кратчайшего пути между двумя узлами в этой модели даст вам самое близкое соединение, типа «знать через что-то». Вы можете ограничить путь по типу отношений/типу сообщества и т. Д.