Neo4j数据一致性问题

时间:2018-11-11 18:33:56

标签: 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.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("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);
}

几个周期后,我在读取器过程中遇到错误: 无法检索单个记录,因为此结果为空。

开始时,数据库包含请求的数据。 根据“写交易”的描述,空结果上方的代码似乎很奇怪。

使用neo4j进行事务处理时,我是否错过了某些事情?

1 个答案:

答案 0 :(得分:1)

您需要致电tx.success()提交交易。

PS:不确定为什么每次上载运行都会清除数据库