在neo4j索引中创建第128个节点后,无法访问更多节点

问题描述:

这似乎是一个非常奇怪的问题。我正在测试我的neo4j图形数据库,因此我的一个测试需要创建大量的用户(在这个特定的测试中,1000)。因此,对于该代码如下,在neo4j索引中创建第128个节点后,无法访问更多节点

// Creates a n users and measures the time taken to add another 
      n = 1000; 
      tx = graphDb.beginTx(); 
      try { 
       for(int i = 0; i < n; i++){ 
        dataService.createUser(BigInteger.valueOf(i)); 
       } 

       start = System.nanoTime(); 
       dataService.createUser(BigInteger.valueOf(n)); 
       end = System.nanoTime(); 

       time = end - start; 

       System.out.println("The time taken for createUser with " + n + " users is " + time +" nanoseconds."); 

       tx.success(); 
      } 
      finally 
      { 
       tx.finish(); 
      } 

而对于dataService.createUser()是代码,

public User createUser(BigInteger identifier) throws ExistsException { 
     // Verify that user doesn't already exist. 
     if (this.nodeIndex.get(UserWrapper.KEY_IDENTIFIER, identifier) 
       .getSingle() != null) { 
      throw new ExistsException("User with identifier '" 
        + identifier.toString() + "' already exists."); 
     } 

     // Create new user. 
     final Node userNode = graphDb.createNode(); 
     final User user = new UserWrapper(userNode); 
     user.setIdentifier(identifier); 

     userParent.getNode().createRelationshipTo(userNode, NodeRelationships.PARENT); 

     return user; 
    } 

现在我需要调用dataService.getUser()我做了这些之后,用户。 getUser()的代码如下,

public User getUser(BigInteger identifier) throws DoesNotExistException { 
     // Search for the user. 
     Node userNode = this.nodeIndex.get(UserWrapper.KEY_IDENTIFIER, 
       identifier).getSingle(); 
     // Return the wrapped user, if found. 
     if (userNode != null) { 
      return new UserWrapper(userNode); 
     } else { 
      throw new DoesNotExistException("User with identifier '" 
        + identifier.toString() + "' was not found."); 
     } 
    } 

所以一切都很好,直到我创建第129个用户。我在调试器中观察dataService.getUser(BigInteger.valueOf(1))(它是第二个节点)的值,dataService.getUser(BigInteger.valueOf(127))(它是第128个节点)和dataService。 getUser(BigInteger.valueOf(i-1))这是最后创建的节点。调试器告诉我,节点128创建后,节点129及以上不会创建,因为getUser()为这些节点抛出DoesNotExistException异常,但仍给出节点2和节点128的值。

用户标识我传递给createUser()是autoindexed。

任何想法为什么它没有更多的节点(或不索引这些节点)?

它听起来很像128字节的字节值转换。你能确定在你的代码中没有类似的东西吗?

+0

好,我应该意识到这一点。我的用户ID存储为字节数组。我将它们转换为多头,一切正常。 – gsingh2011