Podłączam aplikację Java z Neo4j DB za pomocą kierowcy Neo4J-Java (Port Bolt). Chcę uruchomić zapytanie CSV obciążenia, które powinno być uruchomione w partii 500, więc chcę użyć okresowego zatwierdzenia na to samo. Przede wszystkim użyłem:

USING PERIODIC COMMIT 500 ...

W takim przypadku otrzymałem błąd:

Caused by: org.neo4j.driver.exceptions.ClientException: Executing queries that use periodic commit in an open transaction is not possible.

Znalazłem kilka odpowiedzi tutaj mówiących, że powinienem dodać :auto przed zapytaniem, więc zrobiłem to i otrzymałem ten błąd:

Caused by: org.neo4j.driver.exceptions.ClientException: Invalid input ':': expected <init> (line 1, column 1 (offset: 0))
:auto USING PERIODIC COMMIT 500
 ^
0
Asim 17 luty 2021, 06:19

2 odpowiedzi

Najlepsza odpowiedź

https://neo4j.com/docs/driver-Manual/1.7/sessions-Transactions/

Musimy użyć transakcji auto-zatwierdzania w tym przypadku. Ponieważ dokumenty mówi:

Automatyczne zatwierdzenie transakcje są jedynym sposobem wykonania przy użyciu okresowych wyciągów Cyfrowy Cypher.

Przykład:

public void addPerson( String name )
{
    try ( Session session = driver.session() )
    {
        session.run( "CREATE (a:Person {name: $name})", parameters( "name", name ) );
    }
}
1
Asim 17 luty 2021, 04:06

W obliczu tego samego, pracując w Pythonie. Możesz użyć APOC zgodnie z twoim wymaganiami

apoc.periodic.iterate('statement returning items', 'statement per item', {batchSize:1000,iterateList:true,parallel:false,params:{},concurrency:50,retries:0})

Lub

apoc.periodic.commit(statement,params)
0
fruta 17 luty 2021, 14:08