Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用只读操作优化遍历Neo4j图?_Java_Multithreading_Graph_Neo4j_Bigdata - Fatal编程技术网

Java 如何使用只读操作优化遍历Neo4j图?

Java 如何使用只读操作优化遍历Neo4j图?,java,multithreading,graph,neo4j,bigdata,Java,Multithreading,Graph,Neo4j,Bigdata,我使用的是Neo4j图形。我用Neo4J构建了一个图,如下所示- 我在图上有Person节点和Article节点。它们通过其他节点与多条路径连接 我想遍历每个人和文章节点之间的所有路径进行计算。问题是图形太大了,我想使用多线程方法 下面是伪代码- function processGraph() { For each personId in personIdList For each articleId in articelIdList randomWalkSco

我使用的是Neo4j图形。我用Neo4J构建了一个图,如下所示-

我在图上有
Person
节点和
Article
节点。它们通过其他节点与多条路径连接

我想遍历每个
文章
节点之间的所有路径进行计算。问题是图形太大了,我想使用多线程方法

下面是伪代码-

function processGraph()
{
  For each personId in personIdList
     For each articleId in articelIdList 
        randomWalkScore = getRandomWalkScore(personId, articleId)
        storeRandomWalkScore(personId, articleId, randomWalkScore)
}

function getRandomWalkScore(personId, articleId)
{
    randomWalkScore = 0
    beginTransaction()
    {
      personNode = findPersonNode(personId)
      articleNode = findArticleNode(articleId)
      paths = findAllPathsBetween(personNode, articleNode)
         For each path in Paths
            randomWalkScore += getRandomWalkScore(path) // This will iterate over each relationship in path and multiply their weights
    } //End Transaction

    return randomWalkScore
}     
简而言之,这是一个图遍历,由只读操作组成

在Neo4J中,每个都是线程绑定的,所以我在单独的线程中运行
getRandomWalkScore(..)
函数。虽然它在启动时工作并使用所有内核,但在大约10小时后,它只使用1或2个内核。虽然我的图形的磁盘大小约为1GB,但它需要大量内存~60GB。除此之外,它需要很长时间才能完成。我有以下疑问-

  • 在Neo4J图形上执行此操作的最佳方式是什么
  • 如何减少此程序的内存占用
  • 如何减少执行时间

  • 如有任何建议或指示,将不胜感激。谢谢

    > P>既然你做了大量的图形全局操作,你应该考虑编写你的代码多线程。
    请注意,有一个正在进行的项目专注于这种工作负载,并提供最常见的全局图算法,请参阅。一天结束时,pagerank是你想要的吗?如果那里缺少您的算法,请在那里打开github问题。

    我需要的算法与PageRank略有不同。它基本上是计算两个节点之间的随机游走概率。对于这些路径查找操作为什么占用这么多内存以及如何减少内存,您有什么建议吗?我怀疑
    findAllPathsBetween
    将返回大量的可能性。