

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Gunakan mode transaksi eksplisit untuk membaca dan menulis
<a name="best-practices-opencypher-use-explicit-txs"></a>

Saat menggunakan transaksi dengan Neptunus dan driver Bolt, yang terbaik adalah secara eksplisit mengatur mode akses untuk transaksi baca dan tulis ke pengaturan yang tepat.

## Transaksi hanya-baca
<a name="best-practices-opencypher-read-txs"></a>

Untuk transaksi hanya-baca, jika Anda tidak meneruskan konfigurasi mode akses yang sesuai saat membangun sesi, tingkat isolasi default digunakan, yaitu isolasi kueri mutasi. Akibatnya, penting bagi transaksi read-only untuk mengatur mode akses secara eksplisit. `read`

**Contoh transaksi baca komit otomatis:**

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

**Baca contoh transaksi:**

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

Dalam kedua kasus, [`SNAPSHOT`isolasi](transactions-isolation-levels.md) dicapai dengan menggunakan semantik transaksi [read-only Neptunus](transactions-neptune.md#transactions-neptune-read-only).

Karena replika baca hanya menerima kueri hanya-baca, kueri apa pun yang dikirimkan ke replika baca berjalan di bawah semantik isolasi. `SNAPSHOT`

Tidak ada pembacaan kotor atau pembacaan yang tidak dapat diulang untuk transaksi hanya-baca.

## Transaksi mutasi
<a name="best-practices-opencypher-mutation-txs"></a>

Untuk kueri mutasi, ada tiga mekanisme berbeda untuk membuat transaksi tulis, yang masing-masing diilustrasikan di bawah ini:

**Contoh transaksi tulis implisit:**

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

**Contoh transaksi tulis komit otomatis:**

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

**Contoh transaksi tulis eksplisit:**

```
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();
```

**Tingkat isolasi untuk transaksi tulis**
+ Pembacaan yang dibuat sebagai bagian dari kueri mutasi dijalankan di bawah isolasi `READ COMMITTED` transaksi.
+ Tidak ada bacaan kotor untuk bacaan yang dibuat sebagai bagian dari kueri mutasi.
+ Catatan dan rentang catatan dikunci saat membaca dalam kueri mutasi.
+ Ketika rentang indeks telah dibaca oleh transaksi mutasi, ada jaminan kuat bahwa rentang ini tidak akan dimodifikasi oleh transaksi bersamaan sampai akhir pembacaan.

Kueri mutasi tidak aman untuk utas.

Untuk konflik, lihat[Resolusi Konflik Menggunakan Lock-Wait Timeout](transactions-neptune.md#transactions-neptune-conflicts).

Kueri mutasi tidak dicoba ulang secara otomatis jika terjadi kegagalan.