2013-07-10 3 views
8

Я новичок в графах и очень интересных. Этот вопрос может быть noob, но, пожалуйста, разместите несколько полезных материалов.Как хранить данные графа в базе данных?

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

Его работа хорошая, но теперь я хочу сохранить его в базе данных.

Как сохранить данные? Как сохранить все подключенные узлы (указатель) узла.

Лучше ли удалять память после выхода пользователя из системы и читать его из базы данных при входе в систему или при входе в систему и выходе из системы не должно иметь никакого влияния на узел?

Я знаю его теоретический. Любые ссылки будут действительно полезными.

ответ

2

Я начинаю снизу.

Лучше ли удалять память после выхода пользователя из системы и считывать его из базы данных при входе в систему или при входе в систему и выходе из системы не должно иметь никакого влияния на узел?

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

Как хранить данные? Ну, не зная об этом, сложно, однако, полагая, что у вас есть список пользователей, и у каждого пользователя может быть 0 или более друзей, тогда я бы пошел с двумя таблицами.

  • Пользователи - хранит всю информацию о пользователе, например, имя пользователя и пароль
  • UsersFriends * - магазин все отношения в UserID -> Идентификатор_пользователя мода *

Пример

Таблица пользователей

UserID Username 
1  user2511713 
2  abstracthchaos 
3  anotheruser 

UsersFriends

UserID FriendUserID 
1   3 
2   3 
1   2 

Средства user2511713 дружит с anotheruser & abstracthchaos и abstracthchaos друзей с anotheruser, в зависимости от бизнес-логики это также может быть полезно подразумевать наоборот, такие, что 3 1 is the same as 1 3

+1

Если я делаю так (вторая таблица), то, Что использование graph.It все то кипит вниз Эффективность моей базы данных не та структура данных, которую я использую – user2511713

8

Используйте фактическую базу данных графа для хранения ваших данных.

http://www.neo4j.org/

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

Тогда вы можете использовать что-то вроде Gremlin для запроса/прохождения графика - https://github.com/tinkerpop/gremlin. Смотрите их документацию, чтобы загрузить примеры и запустить примеры запросов: https://github.com/tinkerpop/gremlin/wiki/Getting-Started

идея синтаксиса:

gremlin> // lets only take 'knows' labeled edges 
gremlin> v.out('knows') 
==>v[2] 
==>v[4] 
gremlin> // lets do a traversal from the '1' marko vertex to its outgoing edges. 
gremlin> // in the property graph world, edges are first class citizens that can be traversed to. 
gremlin> v.outE 
==>e[7][1-knows->2] 
==>e[9][1-created->3] 
==>e[8][1-knows->4] 
Смежные вопросы