我认为Facebook上的每个人都表示为Facebook中的节点(图),每个人(节点)之间的关系/友谊表示为涉及节点之间的优势。

鉴于Facebook上有数百万人,该图如何存储?

有帮助吗?

解决方案

听起来很奇怪,图形和图形数据库通常被实现为 链接列表. 。正如所暗示的 这里, ,即使是最受欢迎的/性能的图形数据库(NEO4J),也秘密地使用类似于双关联列表的东西。

以这种方式代表图形具有许多重要的好处,但也有一些缺点。首先,以这种方式表示图,这意味着您可以在接近恒定的时间内进行基于边缘的插入。其次,这意味着如果我们只想向上或向上列出链接列表,则遍历图形可能会很快发生。

尽管这有时是贾斯汀·比伯效应,但最大的缺点来自于某些东西,其中有大量连接的节点往往非常慢。想象一下,每次有人链接到贾斯汀·比伯(Justin Bieber)时,都必须穿越一百万个半冗余的链接。

我知道Neo4J的很棒的人正在处理第二个问题,但是我不确定他们如何处理或取得了多少成功。

其他提示

在使用Facebook数据(从Facebook用户中收获)之后,我们将其存储为一对值:user_id,friend_user_id。

但是我想您的问题有点深吗?您可以以不同的方式存储它,具体取决于您的研究问题。一个有趣的选择是三合会 - 例如 - http://mypersonality.org/wiki/doku.php?id=list_of_variables_availables#triad

当我使用社交网络数据时,我们在表格中的数据库中填写了“友谊”关系 Friends(friend_a, friend_b, ...) 带有b-tree索引 (friend_a, friend_b) 加上一些分区。

在我们的情况下,这有点不同,因为该图是指指导的,因此不是真正的“友谊”,而是“跟随/追随者”的关系。但是对于友谊,我只会存储两个边缘: (friend_a, friend_b)(friend_b, friend_a)

如果重要的话,我们使用mySQL存储数据,但我想不应该。

许可以下: CC-BY-SA归因
scroll top