Graph 是否可以在不使用整个数据集的情况下执行pagerank?

Graph 是否可以在不使用整个数据集的情况下执行pagerank?,graph,graph-theory,neo4j,pagerank,Graph,Graph Theory,Neo4j,Pagerank,对不起,如果这是愚蠢的,但我只是想我应该试一试。假设我有一个巨大的图(例如,1000亿个节点)。Neo4J支持320亿,其他的支持大致相同,所以假设我不能在数据库中同时拥有整个数据集,如果它是一个有向图(无循环),并且每组节点连接到下一组节点(因此不会向后创建新链接,只会创建指向新数据集的新链接),我可以在其上运行pagerank吗 是否有一种方法可以将以前的pagerank分数应用于新数据集(我只关心最新数据集的pagerank,但需要以前数据集的pagerank来导出最后的数据集) 这有意义

对不起,如果这是愚蠢的,但我只是想我应该试一试。假设我有一个巨大的图(例如,1000亿个节点)。Neo4J支持320亿,其他的支持大致相同,所以假设我不能在数据库中同时拥有整个数据集,如果它是一个有向图(无循环),并且每组节点连接到下一组节点(因此不会向后创建新链接,只会创建指向新数据集的新链接),我可以在其上运行pagerank吗

是否有一种方法可以将以前的pagerank分数应用于新数据集(我只关心最新数据集的pagerank,但需要以前数据集的pagerank来导出最后的数据集)


这有意义吗?如果是这样,有可能吗?

您需要计算1000亿乘1000亿矩阵的主特征向量。除非它是非常稀疏的,否则你不能把它放在你的机器里。所以,当你一次只能看到矩阵的一小部分时,你需要一种方法来计算矩阵的前导特征向量

计算特征向量的迭代方法只需要在每次迭代时存储几个向量(每个向量都有1000亿个元素)。这些可能适合您的机器(每个向量需要大约375GB的4字节浮点)。一旦你有了一个候选的排名向量,你可以(非常缓慢地)通过分块阅读矩阵来应用你的巨大矩阵(因为你可以一次看320亿行,你需要3个以上的块)。重复这个过程,您将掌握在pagerank中使用的power方法的基本知识。cf和

当然,这里的限制因素是需要检查矩阵的次数。事实证明,通过存储多个候选向量并使用一些随机算法,您可以在读取数据较少的情况下获得良好的准确性。这是应用数学界当前的一个研究课题。你可以在这里、这里和这里找到更多信息。这里有可用的代码:但您不能仅将其用于您所讨论的数据大小


另一种方法是研究“增量svd”,它可能更适合您的问题,但有点复杂。请看这张便条:这个论坛:

ikes……看起来比我希望的要复杂得多。我希望有一个解决方案,允许我从以前的数据集中获取pagerank并将该属性应用到当前集(因为我只关心当前节点集的pagerank)。我需要一段时间来消化你写的内容,但我会通读这些文件pagerank取决于整个网络我认为在查找更新的排名时,你不能轻易忽略旧数据。增量方法解决了这个问题(请参见最后一个链接),但我不知道您是否可以不做复杂的事情就离开。我猜Riak可以处理更大的数字,它可以通过MapReduce遍历链接