2013-07-10 70 views
8

我是新来的图形,它非常有趣。这个问题可能是小菜一碟,但请网站一些很好的材料。如何将图形数据存储在数据库中?

我正在尝试建立一个小社交网络,每个用户都是一个节点,并且与他的朋友有无关联。

它的工作正常,但现在我想将它存储在数据库中。

如何存储数据?如何存储节点的所有连接节点(指针)。

在用户注销后删除内存并在登录时从数据库中读取内存或者应该登录和注销应该不会对节点有任何影响?

我知道它的理论。任何参考将非常有帮助。

回答

2

我从底部开始。

在用户登出后删除内存并在登录时从数据库中读取内存或者应该登录和注销应该不会对节点有任何影响?

您将需要某种形式的永久存储的,或者你失去所有的数据,你在你的第一次崩溃/重启收购可能会打乱你的用户一点。

如何存储数据? 好吧,不知道更多关于这个,但是假设你有一个用户列表,并且每个用户可以有0个或更多的朋友,那么我会去2个表。

  • 用户- 存储您的所有用户信息,如用户名和密码
  • UsersFriends * - 存储中的所有关系的用户名 - >用户名时尚*

用户表

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] 
相关问题