如何在数据库中存储图形数据?

时间:2013-07-10 14:29:23

标签: database graph graph-databases

我是图表的新手并且非常有趣。这个问题可能是noob one,但请提供一些好材料。

我正在尝试创建一个小型社交网络,其中每个用户都是一个节点,并且与他的朋友有无向连接。

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

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

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

我知道它的理论。任何参考资料都会非常有用。

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:2)

我从底部开始。

  

用户注销后删除内存并在登录时从数据库中读取内存是否更好?登录和注销是否应该对节点没有任何影响?

您需要某种永久存储空间,否则您将丢失在第一次崩溃/重启时获得的所有数据,这些数据可能会让您的用户感到不安。

  

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

  • 用户 - 存储您的所有用户信息,例如用户名和密码
  • UsersFriends * - 将所有关系存储在UserID中 - > UserID fashion *

示例

用户表

UserID  Username
1       user2511713
2       abstracthchaos
3       anotheruser

UsersFriends

UserID    FriendUserID
1           3
2           3
1           2

表示user2511713是与另一个用户& abstracthchaos和abstracthchaos与anotheruser的朋友,依赖于你的业务逻辑,暗示相反的方式也可能是有用的3 1 is the same as 1 3