Граф базы данных, чтобы вернуть список общих друзей среди 2 человек в социальной сети - PullRequest
1 голос
/ 30 августа 2011

Существуют ли какие-либо графические базы данных, которые имеют встроенную функцию, позволяющую возвращать список общих друзей из 2 или более людей - как в социальной сети, такой как Facebook?Результат должен быть возвращен как можно быстрее, без необходимости выполнять сложные вычисления или просматривать базу данных.Если нет, каковы способы его реализации?Что насчет OriendDB?А как насчет использования базы данных графов и Redis?

1 Ответ

0 голосов
/ 31 августа 2011

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

Redis имеет команду, чтобы сделать это изначально и очень быстро. Запрос SQL для этого также довольно прост. Получение всех соединений для одного узла должно быть доступно в любой графической базе данных, и даже если вам нужно получить полные списки и вычислить пересечение в коде приложения, производительность, вероятно, будет адекватной, если вам не приходится иметь дело с людьми у которых тысячи / миллионы друзей.

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

...