Представление базы данных как сети

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

Как и сеть, пользователи - это узлы, а соединения - это ребра. Предположим, что дружба - это своего рода край. Там могут быть некоторые другие типы соединений. Соединения могут иметь какой-то вес / приоритет.

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

Я не могу найти с чего начать? Мне не нужен готовый код для этого, но мне нужно учиться. Поэтому, пожалуйста, предложите учебники или статьи, если вы знаете об этом. Вы также можете предложить мне код, где я могу узнать об этом.

Другой вопрос: можно ли использовать базу данных MySQL для представления сети такого типа или мне нужна какая-то специальная база данных?

1 ответ

Решение

Если вы свободны в выборе необходимого вам движка базы данных, лучше всего использовать графовые базы данных. Вы можете найти довольно полный список в Википедии здесь: http://en.wikipedia.org/wiki/Graph_database

Посмотрите также это видео: http://www.youtube.com/watch?v=UodTzseLh04

У меня был хороший опыт работы с Neo4J ( http://www.neo4j.org/). Он написан на Java, но содержит привязки для многих языков (в JMV языки могут работать во встроенном режиме). Вы можете использовать его также через интерфейс REST. Язык для запроса графика - Cypher ( http://docs.neo4j.org/chunked/milestone/cypher-query-lang.html), который не так сильно отличается от SQL.

Однако одним из ключевых моментов, которые следует учитывать при оценке, является размер вашего графика. Способность моделировать такие сложные данные имеет главный недостаток - трудность эффективного масштабирования на нескольких машинах (разбиение графа является сложной задачей NP). Neo4J может обрабатывать огромное количество узлов на одной машине, но если вам нужен очень массивный график, я предлагаю вам попробовать Titan ( http://thinkaurelius.github.com/titan/).

Больше информации о Титане: http://www.slideshare.net/slidarko/titan-the-rise-of-big-graph-data

И если в будущем вам потребуется тяжелая обработка: http://thinkaurelius.github.com/faunus/

Другие вопросы по тегам