Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verwenden expliziter Transaktionsmodi zum Lesen und Schreiben
Wenn Sie Transaktionen mit Neptune und dem Bolt-Treiber verwenden, ist es am besten, den Zugriffsmodus für Lese- und Schreibtransaktionen explizit auf die korrekten Einstellungen einzustellen.
Nur-Lese-Transaktionen
Wenn Sie bei schreibgeschützten Transaktionen beim Erstellen der Sitzung nicht die entsprechende Konfiguration für den Zugriffsmodus angeben, wird die Standardisolationsstufe verwendet, d. h. die Isolation von Mutationsabfragen. Daher ist es für schreibgeschützte Transaktionen wichtig, den Zugriffsmodus explizit auf read
festzulegen.
Beispiel für eine Lesetransaktion mit automatischem Commit:
SessionConfig sessionConfig = SessionConfig .builder() .withFetchSize(1000) .withDefaultAccessMode(AccessMode.READ) .build(); Session session = driver.session(sessionConfig); try {
(Add your application code here)
} catch (final Exception e) { throw e; } finally { driver.close() }
Beispiel für eine Lese-Transaktion:
Driver driver = GraphDatabase.driver(url, auth, config); SessionConfig sessionConfig = SessionConfig .builder() .withDefaultAccessMode(AccessMode.READ) .build(); driver.session(sessionConfig).readTransaction( new TransactionWork<List<String>>() { @Override public List<String> execute(org.neo4j.driver.Transaction tx) {
(Add your application code here)
} } );
In beiden Fällen wird die SNAPSHOT-Isolation mithilfe der Neptune-Nur-Lese-Transaktionssemantik erreicht.
Da Lesereplikate nur schreibgeschützte Abfragen akzeptieren, wird jede Abfrage, die an ein Lesereplikat gesendet wird, mit SNAPSHOT
-Isolationssemantik ausgeführt.
Für schreibgeschützte Transaktionen gibt es keine „Dirty Reads“ oder nicht wiederholbaren Lesevorgänge.
Nur-Lese-Transaktionen
Für Mutationsabfragen gibt es drei verschiedene Mechanismen, um eine Schreibtransaktion zu erstellen, die nachfolgend erläutert werden:
Beispiel für eine implizite Schreibtransaktion:
Driver driver = GraphDatabase.driver(url, auth, config); SessionConfig sessionConfig = SessionConfig .builder() .withDefaultAccessMode(AccessMode.WRITE) .build(); driver.session(sessionConfig).writeTransaction( new TransactionWork<List<String>>() { @Override public List<String> execute(org.neo4j.driver.Transaction tx) {
(Add your application code here)
} } );
Beispiel für eine Auto-Commit-Schreibtransaktion:
SessionConfig sessionConfig = SessionConfig .builder() .withFetchSize(1000) .withDefaultAccessMode(AccessMode.Write) .build(); Session session = driver.session(sessionConfig); try {
(Add your application code here)
} catch (final Exception e) { throw e; } finally { driver.close() }
Beispiel für eine explizite Schreibtransaktion:
Driver driver = GraphDatabase.driver(url, auth, config); SessionConfig sessionConfig = SessionConfig .builder() .withFetchSize(1000) .withDefaultAccessMode(AccessMode.WRITE) .build(); Transaction beginWriteTransaction = driver.session(sessionConfig).beginTransaction();
(Add your application code here)
beginWriteTransaction.commit(); driver.close();
Isolationsstufen für Schreibtransaktionen
Lesevorgänge im Rahmen von Mutationsabfragen werden unter
READ COMMITTED
-Transaktionsisolation ausgeführt.Für Lesevorgänge im Rahmen von Mutationsabfragen gibt es keine „Dirty Reads“.
Datensätze und Datensatzbereiche werden beim Lesen in einer Mutationsabfrage gesperrt.
Wenn ein Bereich des Indexes von einer Mutationstransaktion gelesen wurde, gibt es eine starke Garantie dafür, dass dieser Bereich bis zum Ende der Lesetransaktion nicht durch gleichzeitige Transaktionen geändert wird.
Mutationsabfragen sind nicht Thread-sicher.
Informationen zu Konflikten finden Sie unter Konfliktlösung mithilfe von Sperrwartezeitüberschreitungen.
Mutationsabfragen werden im Fehlerfall nicht automatisch wiederholt.