Utilizzo di modalità di transazione esplicite per la lettura e la scrittura - Amazon Neptune

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di modalità di transazione esplicite per la lettura e la scrittura

Quando si utilizzano transazioni con Neptune e il driver Bolt, è preferibile impostare esplicitamente la modalità di accesso per le transazioni di lettura e scrittura sui valori corretti.

Transazioni di sola lettura

Per le transazioni di sola lettura, se non si passa la configurazione della modalità di accesso appropriata durante la creazione della sessione, viene utilizzato il livello di isolamento predefinito, ovvero l'isolamento delle query di mutazione. Di conseguenza, è importante impostare la modalità di accesso a read in modo esplicito per le transazioni di sola lettura.

Esempio di transazione di lettura con commit automatico:

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() }

Esempio di transazione di lettura:

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 entrambi i casi, l'isolamento SNAPSHOT viene ottenuto utilizzando la semantica delle transazioni di sola lettura di Neptune.

Poiché le repliche di lettura accettano solo query di sola lettura, qualsiasi query inviata a una replica di lettura viene eseguita in base alla semantica di isolamento SNAPSHOT.

Non esistono letture dirty o letture non ripetibili per le transazioni di sola lettura.

Transazioni di sola lettura

Per le query di mutazione, esistono tre diversi meccanismi per creare una transazione di scrittura, ognuno dei quali è illustrato di seguito:

Esempio di transazione di scrittura implicita:

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) } } );

Esempio di transazione di scrittura con commit automatico:

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() }

Esempio di transazione di scrittura esplicita:

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();
Livelli di isolamento per le transazioni di scrittura
  • Le letture effettuate come parte delle query di mutazione vengono eseguite nell'isolamento delle transazioni READ COMMITTED.

  • Non esistono letture dirty per le letture effettuate come parte delle query di mutazione.

  • I record e gli intervalli di record vengono bloccati durante la lettura in una query di mutazione.

  • Quando un intervallo dell'indice è stato letto da una transazione di mutazione, esiste una forte garanzia che questo intervallo non verrà modificato da alcuna transazione simultanea fino al termine della lettura.

Le query di mutazione non sono thread-safe.

Per i conflitti, consulta Risoluzione dei conflitti tramite timeout di attesa di blocco.

Per le query di mutazione i tentativi non vengono ripetuti automaticamente in caso di errore.