Transaksi adalah sekumpulan operasi pada satu atau beberapa entitas. Setiap transaksi dijamin bersifat atomik, yang berarti transaksi tidak pernah diterapkan sebagian. Semua operasi dalam transaksi diterapkan, atau tidak ada yang diterapkan.
Menggunakan transaksi
Transaksi berakhir setelah 270 detik atau jika tidak ada aktivitas selama 60 detik.
Operasi mungkin gagal jika:
- Terlalu banyak perubahan serentak yang dicoba pada entitas yang sama.
- Transaksi melebihi batas resource.
- Database mode Datastore mengalami error internal.
Dalam semua kasus ini, Datastore API akan menampilkan error.
Transaksi adalah fitur opsional. Anda tidak perlu menggunakan transaksi untuk melakukan operasi database.
Aplikasi dapat menjalankan kumpulan pernyataan dan operasi dalam satu transaksi, sehingga jika ada pernyataan atau operasi yang menimbulkan pengecualian, tidak ada satu pun operasi database dalam kumpulan yang diterapkan. Aplikasi menentukan tindakan yang akan dilakukan dalam transaksi.
Cuplikan berikut menunjukkan cara melakukan transaksi. Akun akan mentransfer uang dari satu rekening ke rekening lain.
C#
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C# Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Go
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Go Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Java
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
PHP
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API PHP Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Ruby
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Ruby Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Perhatikan bahwa agar contoh kita lebih ringkas, terkadang kita menghilangkan rollback
jika transaksi gagal. Dalam kode produksi, penting untuk memastikan bahwa setiap transaksi di-commit atau di-roll back secara eksplisit.
Yang dapat dilakukan dalam transaksi
Transaksi dapat mengkueri atau mencari sejumlah entitas. Ukuran maksimum transaksi adalah 10 MiB. Anda dapat menggunakan transaksi baca-tulis atau transaksi hanya baca.
Isolasi dan konsistensi
Database mode Datastore menerapkan isolasi serialisasi. Data yang dibaca atau diubah oleh transaksi tidak dapat diubah serentak.
Kueri dan pencarian dalam transaksi melihat snapshot yang konsisten dari status database. Snapshot ini dijamin berisi efek dari semua transaksi dan penulisan yang diselesaikan sebelum awal transaksi.
Tampilan snapshot yang konsisten ini juga meluas ke operasi baca setelah operasi tulis di dalam transaksi. Tidak seperti kebanyakan database, kueri dan pencarian di dalam transaksi mode Datastore tidak melihat hasil penulisan sebelumnya di dalam transaksi tersebut. Khususnya, jika suatu entitas diubah atau dihapus dalam transaksi, kueri atau pencarian akan menampilkan versi asli dari entitas tersebut sejak awal transaksi, atau tidak menampilkan apa pun jika entitas tersebut tidak ada pada saat itu.
Di luar transaksi, kueri dan pencarian juga memiliki isolasi serial.
Mode konkurensi
Firestore dalam mode Datastore mendukung tiga mode konkurensi. Mode serentak adalah setelan database yang menentukan cara transaksi serentak berinteraksi. Anda dapat memilih salah satu mode serentak berikut:
Pesimis
Transaksi baca-tulis menggunakan kunci pembaca/penulis untuk menerapkan isolasi dan serialisasi. Jika dua atau beberapa transaksi baca-tulis serentak membaca atau menulis data yang sama, kunci yang ditahan oleh satu transaksi dapat menunda transaksi lainnya. Jika transaksi tidak memerlukan operasi tulis, Anda dapat meningkatkan performa dan menghindari pertentangan dengan transaksi lain menggunakan transaksi hanya baca. Transaksi hanya baca tidak memerlukan kunci apa pun.
Firestore dalam database mode Datastore menggunakan mode konkurensi pesimis secara default.
Optimistik
Saat dua atau beberapa transaksi baca-tulis serentak membaca atau menulis data yang sama, hanya transaksi pertama yang melakukan commit perubahannya yang berhasil. Transaksi lain yang melakukan penulisan gagal pada commit.
Optimistik Dengan Grup Entitas
Gunakan mode serentak ini hanya jika aplikasi Anda bergantung pada semantik transaksional grup entity dari Cloud Datastore lama. Mode serentak ini memberikan batas tambahan pada transaksi:
- Transaksi dibatasi hingga 25 grup entitas.
- Operasi tulis ke entity group dibatasi 1 per detik.
- Kueri dalam transaksi harus berupa kueri ancestor.
Melihat mode serentak
Gunakan resource REST projects.databases Firestore untuk melihat mode serentak database Anda:
curl -X GET -H "Authorization: Bearer "$(gcloud auth print-access-token) \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases"
Mengubah mode serentak
Untuk mengubah mode serentak database, kirim permintaan PATCH
ke resource REST projects.databases Firestore:
curl --request PATCH \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"concurrencyMode":"CONCURRENCY_MODE"}' \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/(default)?updateMask=concurrencyMode"
dengan:
- CONCURRENCY_MODE adalah
PESSIMISTIC
,OPTIMISTIC
, atauOPTIMISTIC_WITH_ENTITY_GROUPS
. - PROJECT_ID adalah ID project Google Cloud Anda.
Penggunaan transaksi
Salah satu kegunaan transaksi adalah memperbarui entity dengan nilai properti baru yang relatif
terhadap nilainya saat ini. Contoh transferFunds
di atas melakukannya untuk dua
entitas, dengan menarik uang dari satu rekening dan mentransfernya ke akun lain.
Datastore API tidak mencoba ulang transaksi secara otomatis, tetapi Anda dapat menambahkan logika Anda sendiri untuk mencobanya kembali, misalnya untuk menangani konflik saat permintaan lain memperbarui entity yang sama secara bersamaan.
C#
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C# Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Go
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Go Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Java
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
PHP
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API PHP Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Ruby
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Ruby Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Hal ini memerlukan transaksi karena nilai balance
dalam entity dapat diupdate oleh pengguna lain setelah kode ini mengambil objek, tetapi sebelum kode ini menyimpan objek yang telah diubah. Tanpa transaksi, permintaan pengguna tersebut akan menggunakan nilai balance
sebelum update pengguna lain, dan file yang disimpan akan menimpa nilai baru. Dengan transaksi, aplikasi diberi tahu tentang update pengguna dari lain.
Penggunaan umum lainnya untuk transaksi adalah mengambil entity dengan kunci bernama, atau membuatnya jika belum ada (contoh ini dibuat berdasarkan contoh TaskList dari membuat entity):
C#
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C# Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Go
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Go Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Java
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
PHP
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API PHP Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Ruby
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Ruby Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Seperti sebelumnya, diperlukan transaksi untuk menangani kasus saat pengguna lain mencoba membuat atau memperbarui entity dengan ID string yang sama. Tanpa transaksi, jika entitas tidak ada dan dua pengguna mencoba membuatnya, yang kedua akan menimpa entitas pertama tanpa mengetahui bahwa hal itu telah terjadi.
Jika transaksi gagal, Anda dapat meminta aplikasi mencoba ulang transaksi hingga berhasil, atau Anda dapat membiarkan pengguna menangani error dengan menyebarkannya ke tingkat antarmuka pengguna aplikasi. Anda tidak perlu membuat loop percobaan ulang di setiap transaksi.
Transaksi hanya baca
Terakhir, Anda dapat menggunakan transaksi untuk membaca snapshot database yang konsisten. Hal ini berguna ketika Anda memerlukan beberapa operasi baca untuk merender halaman atau mengekspor data yang harus konsisten. Untuk kasus ini, Anda dapat membuat transaksi hanya-baca.
Transaksi hanya baca tidak dapat mengubah entity, tetapi sebagai gantinya, transaksi tersebut tidak bersaing dengan transaksi lain dan tidak perlu dicoba lagi. Jika Anda hanya melakukan pembacaan dalam transaksi baca-tulis reguler, transaksi tersebut mungkin bersaing dengan transaksi yang mengubah data yang sama.
C#
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C# Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Go
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Go Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Java
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
PHP
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API PHP Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Ruby
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Ruby Cloud Datastore.
Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Langkah selanjutnya
- Pelajari Kueri.