Neo4j проблема согласованности данных - PullRequest
0 голосов
/ 11 ноября 2018

Я получил пустую ошибку результата при доступе к базе данных neo4j со следующей настройкой.

  • Neo4j работает в докере.
  • Процесс загрузки выполняется непрерывно с 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 голосов
/ 12 ноября 2018

Вам нужно позвонить tx.success(), чтобы совершить транзакцию.

PS: не уверен, почему база данных очищается при каждом запуске загрузки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...