Это кажется очень странной проблемой.Я стресс-тестирую свою графическую базу данных neo4j, поэтому один из моих тестов требует создания большого количества пользователей (в этом конкретном тесте 1000).Таким образом, код для этого выглядит следующим образом:
// 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 (), автоматически индексируется.
Есть идеи, почему он не создает больше узлов (или не индексирует эти узлы)?