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 Buku Besar QLDB Amazon ke Amazon
Jika Anda memiliki pengalaman menggunakan sistem manajemen basis data relasional (RDBMS), Anda mungkin akrab dengan koneksi bersamaan. QLDB tidak memiliki konsep yang sama dari koneksi RDBMS tradisional karena transaksi dijalankan dengan permintaan HTTP dan pesan respons.
Dalam QLDB, 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. QLDB mendukung satu transaksi aktif yang berjalan per sesi.
Batas sesi aktif bersamaan per buku besar didefinisikan dalam. Kuota dan batas 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 driver QLDB, lihat di rekomendasi driver QLDB Mengkonfigurasi objek QldbDriver Amazon.
Daftar Isi
Siklus hidup sesi
Urutan operasi QLDB Session API berikut ini mewakili siklus hidup khas sesi QLDB:
-
StartSession
-
StartTransaction
-
ExecuteStatement
-
CommitTransaction
-
Ulangi langkah 2-4 untuk memulai lebih banyak transaksi (satu transaksi pada satu waktu).
-
EndSession
Kedaluwarsa sesi
QLDB kedaluwarsa 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. QLDB memberlakukan masa pakai maksimum pada sesi untuk memastikan bahwa aplikasi klien tahan terhadap kegagalan sesi.
Penanganan sesi di driver QLDB
Meskipun Anda dapat menggunakan AWS SDK untuk berinteraksi langsung dengan QLDB Session API, ini menambah kerumitan dan mengharuskan Anda untuk menghitung intisari komit. QLDB menggunakan intisari komit ini untuk memastikan integritas transaksi. Alih-alih berinteraksi langsung dengan API ini, sebaiknya gunakan driver QLDB.
Driver menyediakan lapisan abstraksi tingkat tinggi di atas API data transaksional. Ini merampingkan proses menjalankan pernyataan PartiQL pada data buku besar dengan mengelola panggilan API. SendCommand Panggilan API ini memerlukan beberapa parameter yang ditangani driver untuk Anda, termasuk pengelolaan sesi, transaksi, dan kebijakan coba lagi jika terjadi kesalahan.
Ikhtisar penyatuan sesi
Dalam versi driver QLDB yang lebih lama (misalnya, Java v1.1.0),QldbDriver
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 membuangnya 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 individual (yaitu, tidak ada operasi API 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:
-
Pengemudi memeriksa apakah sudah mencapai batas kumpulan sesi. Jika demikian, pengemudi segera melempar
NoSessionAvailable
pengecualian. Kalau tidak, itu melanjutkan ke langkah berikutnya. -
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.
-
-
Setelah pengemudi mendapat sesi di langkah 2, pengemudi memanggil
execute
operasi pada instance sesi. -
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.
-
-
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.
-
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 optimis (OCC). 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 adalah
4
.
-
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
Jika InvalidSessionException
terjadi kapan saja selama transaksi aktif, pengemudi tidak mengembalikan sesi ke kolam. QLDB membuang sesi sebagai gantinya, dan pengemudi mendapat sesi lain dari kolam renang. Dalam semua kasus lain, pengemudi mengembalikan sesi ke kolam renang.