Transaksi Gremlin di Neptunus - Amazon Neptune

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

Transaksi Gremlin di Neptunus

Ada beberapa konteks di mana transaksi Gremlin dijalankan. 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 danClient.submit(string).

    • Menggunakan konsol Gremlin dan. :remote connect

    • Menggunakan HTTP API.

  • Bytecode-based— Permintaan dibuat menggunakan bytecode Gremlin serial khas Gremlin Language Variants (GLV).

    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.

Permintaan tanpa sesi

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. Sebagai 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

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, tetapi kueri hanya-baca yang dijalankan dalam transaksi eksplisit dijalankan di bawah isolasi SERIALIZABLE. 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