

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

# Transaksi Gremlin di Neptunus
<a name="access-graph-gremlin-transactions"></a>

[Ada beberapa konteks di mana transaksi Gremlin dijalankan.](transactions.md) Saat bekerja dengan Gremlin, penting untuk memahami konteks tempat Anda bekerja dan apa implikasinya:
+ **`Script-based`**— Permintaan dibuat menggunakan string Gremlin berbasis teks, seperti ini:
  + Menggunakan driver Java dan `Client.submit(string)`
  + Menggunakan konsol Gremlin dan. `:remote connect`
  + Menggunakan HTTP API.
+ **`Bytecode-based`**— Permintaan dibuat menggunakan bytecode Gremlin serial khas Gremlin Language Variants ([GLV](https://tinkerpop.apache.org/docs/current/reference/#gremlin-drivers-variants)).

  Misalnya, menggunakan driver Java,`g = traversal().withRemote(...)`.

Untuk salah satu konteks di atas, ada konteks tambahan dari permintaan yang dikirim sebagai tanpa sesi atau terikat pada sesi.

**catatan**  
 Transaksi Gremlin harus selalu dilakukan atau dibatalkan, sehingga sumber daya sisi server dapat dilepaskan. Jika terjadi kesalahan selama transaksi, penting untuk mencoba kembali seluruh transaksi dan bukan hanya permintaan tertentu yang gagal. 

## Permintaan tanpa sesi
<a name="access-graph-gremlin-transactions-sessionless"></a>

 Ketika sessionless, permintaan setara dengan satu transaksi.

Untuk skrip, implikasinya adalah bahwa satu atau lebih pernyataan Gremlin yang dikirim dalam satu permintaan akan melakukan atau mengembalikan sebagai satu transaksi. Contoh:

```
Cluster cluster = Cluster.open();
Client client = cluster.connect(); // sessionless
// 3 vertex additions in one request/transaction:
client.submit("g.addV();g.addV();g.addV()").all().get();
```

Untuk bytecode, permintaan tanpa sesi dibuat untuk setiap traversal yang muncul dan dieksekusi dari: `g`

```
GraphTraversalSource g = traversal().withRemote(...);

// 3 vertex additions in three individual requests/transactions:
g.addV().iterate();
g.addV().iterate();
g.addV().iterate();

// 3 vertex additions in one single request/transaction:
g.addV().addV().addV().iterate();
```

## Permintaan terikat pada sesi
<a name="access-graph-gremlin-transactions-session-bound"></a>

Ketika terikat ke sesi, beberapa permintaan dapat diterapkan dalam konteks satu transaksi.

Untuk skrip, implikasinya adalah bahwa tidak perlu menggabungkan semua operasi grafik menjadi satu nilai string yang disematkan:

```
Cluster cluster = Cluster.open();
Client client = cluster.connect(sessionName); // session
try {
    // 3 vertex additions in one request/transaction:
    client.submit("g.addV();g.addV();g.addV()").all().get();
} finally {
    client.close();
}

try {
    // 3 vertex additions in three requests, but one transaction:
    client.submit("g.addV()").all().get(); // starts a new transaction with the same sessionName
    client.submit("g.addV()").all().get();
    client.submit("g.addV()").all().get();
} finally {
    client.close();
}
```

Untuk bytecode, setelah TinkerPop `3.5.x`, transaksi dapat dikontrol secara eksplisit dan sesi dikelola secara transparan. Gremlin Language Variants (GLV) mendukung `tx()` sintaks Gremlin atau transaksi sebagai berikut: `commit()` `rollback()`

```
GraphTraversalSource g = traversal().withRemote(conn);

Transaction tx = g.tx();

// Spawn a GraphTraversalSource from the Transaction.
// Traversals spawned from gtx are executed within a single transaction.
GraphTraversalSource gtx = tx.begin();
try {
    gtx.addV('person').iterate();
    gtx.addV('software').iterate();

    tx.commit();
} finally {
    if (tx.isOpen()) {
        tx.rollback();
    }
}
```

Meskipun contoh di atas ditulis dalam Java, Anda juga dapat menggunakan `tx()` sintaks ini dalam Python, Javascript dan .NET.

**Awas**  
[Kueri hanya-baca tanpa sesi dijalankan di bawah isolasi [SNAPSHOT](transactions-isolation-levels.md), tetapi kueri hanya-baca yang dijalankan dalam transaksi eksplisit dijalankan di bawah isolasi SERIALIZABLE.](transactions-isolation-levels.md) Kueri hanya-baca yang dijalankan di bawah `SERIALIZABLE` isolasi menimbulkan overhead yang lebih tinggi dan dapat memblokir atau diblokir oleh penulisan bersamaan, tidak seperti yang dijalankan di bawah isolasi. `SNAPSHOT`