Java Neo4j数据一致性问题
使用以下设置访问neo4j数据库时,我得到了空结果错误Java Neo4j数据一致性问题,java,neo4j,Java,Neo4j,使用以下设置访问neo4j数据库时,我得到了空结果错误 Neo4j在docker中运行 上载程序进程连续运行,每个进程之间的睡眠时间为0.5秒 上传 读卡器进程也持续运行 读者: Driver driver = GraphDatabase.driver("bolt://db_address:7687", AuthTokens.basic("user", "password")); while (true) { try (Session session = driver.sessio
- Neo4j在docker中运行
- 上载程序进程连续运行,每个进程之间的睡眠时间为0.5秒 上传
- 读卡器进程也持续运行
Driver driver = GraphDatabase.driver("bolt://db_address:7687", AuthTokens.basic("user", "password"));
while (true) {
try (Session session = driver.session(AccessMode.READ)) {
for (int i = 1; i <= 100; i++) {
session.run("Match (n:Number) where n.value=$value return ID(n)", parameters("value", i)).single().get(0).asInt();
}
}
Thread.sleep(500);
}
Driver-Driver=GraphDatabase.Driver(“bolt://db_address:7687,AuthTokens.basic(“用户”、“密码”);
虽然(正确){
try(Session Session=driver.Session(AccessMode.READ)){
对于(int i=1;i您需要调用tx.success()
来提交事务
PS:不确定为什么每次上传时都会清除数据库我尝试了建议的解决方案,但我有相同的错误。我想刷新数据库的全部内容,因此每次更新时都会清除。如果这类测试依赖于线程休眠和删除数据库,那么它是非常脆弱的-你能不能先清除数据库并检查一下如果节点被写入?我同意这种并发测试的缺点,但它提供了与我的应用程序相同的错误,当然它可以写入数据库。但是正如我在问题中提到的,我的“阅读器应用程序”有时会看到空数据库,这应该是不可能的,因为“上传程序”在一个事务中清除和填充数据库。
Driver driver = GraphDatabase.driver("bolt://db_address:7687", AuthTokens.basic("user", "password"));
while (true) {
try (Session session = driver.session(AccessMode.WRITE)) {
try (Transaction tx = session.beginTransaction()) {
tx.run("MATCH (n) DELETE n");
for (int i = 1; i <= 100; i++) {
tx.run("CREATE (n:Number {value: $value}) return ID(n)", parameters("value", i)).single().get(0).asInt();
}
tx.success();
}
}
Thread.sleep(500);
}