我对图表很新奇,这可能是一个初学者问题,请推荐一些好的材料。
我正在尝试制作一个小型社交网络,在这个网络中,每个用户都是一个节点,并与他的朋友有无向连接。
目前它工作得很好,但现在我想将它存储在数据库中。
如何存储数据?如何存储节点的所有连接(指针)。
用户注销后最好删除内存,当用户再次登录时从数据库读取,还是登录和注销不应对节点产生任何影响?
我知道这是理论上的问题。任何参考资料都将非常有帮助。
我对图表很新奇,这可能是一个初学者问题,请推荐一些好的材料。
我正在尝试制作一个小型社交网络,在这个网络中,每个用户都是一个节点,并与他的朋友有无向连接。
目前它工作得很好,但现在我想将它存储在数据库中。
如何存储数据?如何存储节点的所有连接(指针)。
用户注销后最好删除内存,当用户再次登录时从数据库读取,还是登录和注销不应对节点产生任何影响?
我知道这是理论上的问题。任何参考资料都将非常有帮助。
使用实际的图形数据库来存储数据。
您可以在节点中存储键/值对,还可以存储连接节点的边缘。
然后,您可以使用类似 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]
当用户注销后,删除内存并在其登录时从数据库中读取,还是登录和注销不应对节点产生任何影响,哪种方法更好?
您需要一些永久存储方式,否则在第一次崩溃/重启时丢失的所有数据可能会让您的用户感到不满。
如何存储数据? 如果没有更多信息,则很难确定,但假设您有一个用户列表,每个用户可以拥有0个或多个朋友,则我会使用2个表。
示例
用户表
UserID Username
1 user2511713
2 abstracthchaos
3 anotheruser
用户好友
UserID FriendUserID
1 3
2 3
1 2
意味着user2511713与另一个用户和abstracthchaos是朋友,而abstracthchaos与另一个用户是朋友。根据您的业务逻辑,暗示另一方向也可能很有用,比如31与13相同