Memahami manajemen sesi dengan pengemudi di Amazon QLDB - Database Buku Besar Amazon Quantum (AmazonQLDB)

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

Memahami manajemen sesi dengan pengemudi di Amazon QLDB

penting

Pemberitahuan akhir dukungan: Pelanggan yang ada akan dapat menggunakan Amazon QLDB hingga akhir dukungan pada 07/31/2025. Untuk detail selengkapnya, lihat Memigrasi QLDB Buku Besar Amazon ke Amazon Aurora Postgre. SQL

Jika Anda memiliki pengalaman menggunakan sistem manajemen database relasional (RDBMS), Anda mungkin akrab dengan koneksi bersamaan. QLDBtidak memiliki konsep RDBMS koneksi tradisional yang sama karena transaksi dijalankan dengan pesan HTTP permintaan dan respons.

DalamQLDB, konsep analog adalah sesi aktif. Sesi secara konseptual mirip dengan login pengguna — ia mengelola informasi tentang permintaan transaksi data Anda ke buku besar. Sesi aktif adalah sesi yang aktif menjalankan transaksi. Ini juga bisa menjadi sesi yang baru-baru ini menyelesaikan transaksi di mana layanan mengantisipasi akan segera memulai transaksi lain. QLDBmendukung satu transaksi yang aktif berjalan per sesi.

Batas sesi aktif bersamaan per buku besar didefinisikan dalam. Kuota dan batasan di Amazon QLDB Setelah batas ini tercapai, setiap sesi yang mencoba memulai transaksi akan menghasilkan error (LimitExceededException).

Untuk praktik terbaik untuk mengonfigurasi kumpulan sesi dalam aplikasi Anda menggunakan QLDB driver, lihat Mengkonfigurasi objek QldbDriver di rekomendasi QLDB driver Amazon.

Siklus hidup sesi

Urutan API operasi QLDBSesi berikut mewakili siklus hidup khas sesi: QLDB

  1. StartSession

  2. StartTransaction

  3. ExecuteStatement

  4. CommitTransaction

  5. Ulangi langkah 2-4 untuk memulai lebih banyak transaksi (satu transaksi pada satu waktu).

  6. EndSession

Kedaluwarsa sesi

QLDBkedaluwarsa dan membuang sesi setelah masa pakai total 13-17 menit, terlepas dari apakah itu aktif menjalankan transaksi. Sesi dapat hilang atau terganggu karena sejumlah alasan, seperti kegagalan perangkat keras, kegagalan jaringan, atau restart aplikasi. QLDBmemberlakukan masa pakai maksimum pada sesi untuk memastikan bahwa aplikasi klien tahan terhadap kegagalan sesi.

Penanganan sesi di QLDB pengemudi

Meskipun Anda dapat menggunakan an AWS SDK untuk berinteraksi langsung dengan QLDBSesiAPI, ini menambah kompleksitas dan mengharuskan Anda untuk menghitung intisari komit. QLDBmenggunakan intisari komit ini untuk memastikan integritas transaksi. Alih-alih berinteraksi langsung dengan iniAPI, kami sarankan menggunakan QLDB driver.

Driver menyediakan lapisan abstraksi tingkat tinggi di atas data transaksional. API Ini merampingkan proses menjalankan pernyataan PartiQL pada data buku besar dengan mengelola panggilan. SendCommandAPI APIPanggilan ini memerlukan beberapa parameter yang ditangani pengemudi untuk Anda, termasuk pengelolaan sesi, transaksi, dan kebijakan coba lagi jika terjadi kesalahan.

Ikhtisar penyatuan sesi

Dalam versi QLDB driver yang lebih lama (misalnya, Java v1.1.0), kami menyediakan dua implementasi objek driver: standar, QldbDriver nonpooled dan a. PooledQldbDriver Seperti namanya, PooledQldbDriver mempertahankan kumpulan sesi yang digunakan kembali di seluruh transaksi.

Berdasarkan umpan balik pengguna, pengembang lebih memilih untuk mendapatkan fitur penyatuan dan manfaatnya secara default, daripada menggunakan driver standar. Jadi, kami menghapus PooledQldbDriver dan memindahkan fungsionalitas penyatuan sesi ke. QldbDriver Perubahan ini termasuk dalam rilis terbaru dari setiap driver (misalnya, Java v2.0.0).

Pengemudi menyediakan tiga tingkat abstraksi:

  • Driver (implementasi driver gabungan) - Abstraksi tingkat atas. Pengemudi memelihara dan mengelola kumpulan sesi. Ketika Anda meminta pengemudi untuk menjalankan transaksi, pengemudi memilih sesi dari kolam dan menggunakannya untuk menjalankan transaksi. Jika transaksi gagal karena kesalahan sesi (InvalidSessionException), pengemudi menggunakan sesi lain untuk mencoba kembali transaksi. Pada dasarnya, pengemudi menawarkan pengalaman sesi yang dikelola sepenuhnya.

  • Sesi — Satu tingkat di bawah abstraksi driver. Sesi terkandung dalam kolam, dan pengemudi mengelola siklus hidup sesi. Jika transaksi gagal, pengemudi mencobanya kembali hingga sejumlah upaya tertentu menggunakan sesi yang sama. Tetapi jika sesi mengalami error (InvalidSessionException), QLDB buang secara internal. Pengemudi kemudian bertanggung jawab untuk mendapatkan sesi lain dari kolam untuk mencoba kembali transaksi.

  • Transaksi — Tingkat abstraksi terendah. Transaksi terkandung dalam sesi, dan sesi mengelola siklus hidup transaksi. Sesi ini bertanggung jawab untuk mencoba kembali transaksi jika terjadi kesalahan. Sesi ini juga memastikan bahwa itu tidak membocorkan transaksi terbuka yang belum dilakukan atau dibatalkan.

Dalam versi terbaru dari setiap driver, Anda dapat melakukan operasi pada tingkat abstraksi driver saja. Anda tidak memiliki kontrol langsung atas sesi dan transaksi individu (yaitu, tidak ada API operasi untuk memulai sesi atau transaksi baru secara manual).

Pengumpulan sesi dan logika transaksi

Rilis terbaru dari setiap driver tidak lagi menyediakan implementasi nonpooled dari objek driver. Secara default, QldbDriver objek mengelola kumpulan sesi. Saat Anda melakukan panggilan untuk menjalankan transaksi, pengemudi melakukan langkah-langkah berikut:

  1. Pengemudi memeriksa apakah sudah mencapai batas kumpulan sesi. Jika demikian, pengemudi segera melempar NoSessionAvailable pengecualian. Kalau tidak, itu melanjutkan ke langkah berikutnya.

  2. Pengemudi memeriksa apakah kolam memiliki sesi yang tersedia.

    • Jika sesi tersedia di kolam renang, pengemudi menggunakannya untuk menjalankan transaksi.

    • Jika tidak ada sesi yang tersedia di kolam renang, pengemudi membuat sesi baru dan menggunakannya untuk menjalankan transaksi.

  3. Setelah pengemudi mendapat sesi di langkah 2, pengemudi memanggil execute operasi pada instance sesi.

  4. Dalam execute pengoperasian sesi, pengemudi mencoba memulai transaksi dengan meneleponstartTransaction.

    • Jika sesi tidak valid, startTransaction panggilan gagal, dan driver kembali ke langkah 1.

    • Jika startTransaction panggilan berhasil, pengemudi melanjutkan ke langkah berikutnya.

  5. Driver menjalankan ekspresi lambda Anda. Ekspresi lambda ini dapat berisi satu atau beberapa panggilan untuk menjalankan pernyataan PartiQL. Setelah ekspresi lambda selesai berjalan tanpa kesalahan, pengemudi melanjutkan untuk melakukan transaksi.

  6. Komit transaksi dapat memiliki salah satu dari dua hasil:

    • Komit berhasil, dan driver mengembalikan kontrol ke kode aplikasi Anda.

    • Komit gagal karena konflik kontrol konkurensi (OCC) yang optimis. Dalam hal ini, pengemudi mencoba ulang langkah 4-6 menggunakan sesi yang sama. Jumlah maksimum percobaan ulang dapat dikonfigurasi dalam kode aplikasi Anda. Batas defaultnya adalah4.

catatan

Jika InvalidSessionException dilemparkan selama langkah 4-6, pengemudi menandai sesi sebagai ditutup dan kembali ke langkah 1 untuk mencoba kembali transaksi.

Jika ada pengecualian lain yang dilemparkan selama langkah 4-6, pengemudi memeriksa apakah pengecualian dapat dicoba lagi. Jika demikian, ia mencoba ulang transaksi hingga jumlah percobaan ulang yang ditentukan. Jika tidak, itu menyebarkan (menggelembung dan melempar) pengecualian ke kode aplikasi Anda.

Mengembalikan sesi ke kolam renang

Jika InvalidSessionException terjadi kapan saja selama transaksi aktif, pengemudi tidak mengembalikan sesi ke kolam. QLDBmembuang sesi sebagai gantinya, dan pengemudi mendapat sesi lain dari kolam renang. Dalam semua kasus lain, pengemudi mengembalikan sesi ke kolam renang.