Итак, ваша проблема в первую очередь связана с проблемой хранения данных, а также с тем, как сохранить и получить ребра на вашем графике. Применение некоторых простых графовых терминов к вашей задаче:
Узел / Вершина: В вашем случае каждый человек будет представлять узел.
Edge / Link: отношения между узлами, в данном случае «друзьями», создадут ненаправленный край между двумя узлами.
Таким образом, вам нужно будет поддерживать структуру данных в вашей БД, которая позволит вам разрешить пограничные отношения между друзьями.
В этом вопросе можно найти полезную информацию:
вызов, как к орудию-ан-алгоритма-в-шесть-степени разделения
Кроме того, при принятии решения о том, как сохранить список краев, вы должны учитывать, сколько ребер, по вашему мнению, будет генерировать ваш сайт. Это, вероятно, повлияет на механизм хранения, который вы выбрали.
Надеюсь, эти указатели помогут.