2013-01-08 40 views
0

如果maxDepth是3代碼運行正常,如果maxDepth = 4這個代碼掛@調用td.traverse(開始)(〜38行)&然後我得到:在螺紋的Neo4j - heap space錯誤 - TraversalDescription.traverse(節點);

異常 「主」 的java.lang .OutOfMemoryError:Java堆空間 在java.util.Arrays.copyOf(Arrays.java:2882) 在java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) 在java.lang.AbstractStringBuilder.append(AbstractStringBuilder。 java:515) at com.sun.jersey.core.util.ReaderWriter.readFromAsString(ReaderWriter.java:172) at com.sun.jersey。java.lang.StringBuilder.append(StringBuilder.java:189) core.util.ReaderWriter.readFromAsString(讀erWriter.java:157) at com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.readFromAsString(AbstractMessageReaderWriterProvider.java:114) at com.sun.jersey.core.impl.provider.entity.StringProvider.readFrom(StringProvider。的java:73) 在com.sun.jersey.core.impl.provider.entity.StringProvider.readFrom(StringProvider.java:58) 在com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java: 552) at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:505) at org.neo4j.rest.graphdb.RequestResult.extractFrom(RequestResult.java:87) at org.neo4j。 rest.graphdb.ExecutingRestRequest.post(ExecutingRestRequest.java:138) 在org.neo4j.rest.graphdb.ExecutingRestAPI.traverse(ExecutingRestAPI.java:486) at org.neo4j.rest.graphdb.RestAPIFacade.traverse(RestAPIFacade.java:202) at org.neo4j.rest.graphdb.traversal.RestTraversal.traverse(RestTraversal.java:162) at com.tr.cmg。 alloy.dao.psd.RelationalPathSearchDAO.executeRelationalPathSearch(RelationalPathSearchDAO.java:38) 在com.tr.cmg.alloy.dao.psd.RelationalPathSearchDAO.main(RelationalPathSearchDAO.java:115)

package com.tr.cmg.alloy.dao.psd; 

import java.util.ArrayList; 

import org.neo4j.graphdb.Direction; 
import org.neo4j.graphdb.Node; 
import org.neo4j.graphdb.Path; 
import org.neo4j.graphdb.Relationship; 
import org.neo4j.graphdb.traversal.TraversalDescription; 
import org.neo4j.rest.graphdb.index.RestIndex; 
import org.neo4j.rest.graphdb.traversal.RestTraversalDescription; 

import com.tr.cmg.alloy.aspects.audit.DaoTierAuditAspect; 
import com.tr.cmg.alloy.dao.psd.relationship.RelationType; 
import com.tr.cmg.alloy.dao.support.neo4j.Neo4jDaoSupport; 
import com.tr.cmg.alloy.domain.psd.NodeType; 
import com.tr.cmg.alloy.services.psd.rps.RelationalPathSearch; 
import com.tr.cmg.alloy.services.psd.rps.RelationalPathSearchResult; 

public class RelationalPathSearchDAO extends Neo4jDaoSupport{ 

public RelationalPathSearchResult executeRelationalPathSearch(
     RelationalPathSearch rps) { 

    RestIndex<Node> personIndex = API.getIndex(NodeType.PERSON.name()); 

    Node start = personIndex.get("KEY", rps.getPerson1PermId()).getSingle(); 
    Node end = personIndex.get("KEY", rps.getPerson2PermId()).getSingle(); 

    Iterable<Node> nodes = null; 
    Iterable<Relationship> relationships = null; 

    if (start != null && end != null) { 

     TraversalDescription td = createTraversalDescription(rps); 
     nodes = null; 
     relationships = null; 
     for (Path position : td.traverse(start)) { 

      // Log audit record info 
      DaoTierAuditAspect 
        .storeSqlStatement("Relational Path Neo4j Query: " 
          + rps.getPerson1PermId() + " -> " 
          + rps.getPerson2PermId()); 
      DaoTierAuditAspect.storeSqlParameters(""); 

      System.out.println(position); 

      if (position.endNode().equals(end)) { 
       nodes = position.nodes(); 
       relationships = position.relationships(); 
       break; 
      } 
     } 

     if(nodes == null) { 
      ArrayList<Node> x = new ArrayList<Node>(); 
      x.add(start); 
      x.add(end); 
      nodes = x; 
     } 
    } 

    return new RelationalPathSearchResult(nodes, relationships); 

} 

private TraversalDescription createTraversalDescription(RelationalPathSearch rps) { 

    RestTraversalDescription rtd = (RestTraversalDescription) API.createTraversalDescription(); 
    rtd.maxDepth(4); 

    return rtd 
      .depthFirst() 
      .relationships(RelationType.IsDirector, Direction.BOTH) 
      .relationships(RelationType.HasGraduatedFrom, Direction.BOTH) 
      .relationships(RelationType.IsOfficer, Direction.BOTH) 
      .relationships(RelationType.IsUnknownOfficerDirectorAt, Direction.BOTH) 
      .relationships(RelationType.IsInsiderAt, Direction.BOTH) 
      .relationships(RelationType.IsEquityAnalystAt, Direction.BOTH) 
      .relationships(RelationType.IsMemberOrChairmanOf, Direction.BOTH) 
      .relationships(RelationType.IsChiefInvestmentOfficerAt, Direction.BOTH) 
      .relationships(RelationType.IsDirectorOfResearchAt, Direction.BOTH) 
      .relationships(RelationType.IsPortfolioManagerAt, Direction.BOTH) 
      .relationships(RelationType.IsTraderAt, Direction.BOTH) 
      .relationships(RelationType.IsEconomistAt, Direction.BOTH) 
      .relationships(RelationType.IsSalesProfessionalAt, Direction.BOTH) 
      .relationships(RelationType.IsStrategistAt, Direction.BOTH) 
      .relationships(RelationType.IsExecutiveOfficerAt, Direction.BOTH) 
      .relationships(RelationType.IsShariahSupervisoryAt, Direction.BOTH) 
      .relationships(RelationType.IsNonExecutiveAt, Direction.BOTH) 
      .relationships(RelationType.IsVEExecutive, Direction.BOTH) 
      .relationships(RelationType.IsProvidingResearchOn, Direction.BOTH) 
      .relationships(RelationType.IsAnalystAt, Direction.BOTH) 
      .relationships(RelationType.IsReuterMessengerUserAt, Direction.BOTH) 
      .relationships(RelationType.IsProvidingAssetClassCoverageOn, Direction.BOTH) 
      .relationships(RelationType.IsSpeakingLanguageOf, Direction.BOTH) 
      .relationships(RelationType.IsProvidingGeographyCoverageOf, Direction.BOTH) 
      .relationships(RelationType.IsUnknownSellSideBuySideAt, Direction.BOTH) 
      .relationships(RelationType.IsUnknownInsiderAt, Direction.BOTH) 
      .relationships(RelationType.IsUnknownResearchAnalystAt, Direction.BOTH) 
      .relationships(RelationType.IsUnknownVEExecutiveAt, Direction.BOTH) 
      .relationships(RelationType.IsUnknownReutersMessengerUserAt, Direction.BOTH) 
      .relationships(RelationType.IsUnknownStreetEventsUserAt, Direction.BOTH); 
} 

public static void main(String[] args) { 

    RelationalPathSearchDAO dao = new RelationalPathSearchDAO(); 

    RelationalPathSearch rps = new RelationalPathSearch(); 
    rps.setPerson1PermId("34414591164"); 
    rps.setPerson2PermId("34414710307"); 

    RelationalPathSearchResult result = dao.executeRelationalPathSearch(rps); 
    result.toJSON(); 

} 

}

回答

1

您需要增加JVM maximum heap memory size

你目前的JVM內存設置?

+0

我將Max Memory設置爲-Xmx1024m,我仍然收到錯誤消息。數據庫只有1.6M節點,所以這真的不應該是一個問題.. – user1344581

0

它看起來像你試圖找到兩個節點之間的路徑,對不對?如果通過REST API使用allPaths或allSimplePaths算法,它應該更快,並且需要更少的內存,因爲它將是雙向遍歷。

不知道,如果RestGraphDatabase支持它雖然。無論哪種方式,你可以看看http://docs.neo4j.org/chunked/stable/rest-api-graph-algos.html

0

它解決了,採取的方法將整個數據庫拉成json和跨網線做一些應該在db內運行的東西。

它在這GitHub issue解決。