在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字节的字节值转换。你能确定在你的代码中没有类似的东西吗?
好,我应该意识到这一点。我的用户ID存储为字节数组。我将它们转换为多头,一切正常。 – gsingh2011