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
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.
Daftar Isi
Siklus hidup sesi
Urutan API operasi QLDBSesi berikut 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
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.0QldbDriver
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:
-
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 (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 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 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.