Tulis

Halaman ini mencantumkan jenis permintaan tulis yang dapat Anda kirim ke Bigtable dan menjelaskan kapan Anda harus menggunakannya dan kapan tidak boleh. Untuk informasi tentang menggabungkan data dalam sel pada waktu penulisan, lihat Menggabungkan nilai pada waktu penulisan.

Bigtable Data API dan library klien memungkinkan Anda menulis data ke tabel secara terprogram. Bigtable akan mengirimkan kembali respons atau konfirmasi untuk setiap operasi tulis.

Setiap library klien menawarkan kemampuan untuk mengirim jenis permintaan tulis berikut:

  • Operasi tulis sederhana
  • Penambahan dan penambahan
  • Operasi tulis bersyarat
  • Operasi tulis batch

Library klien Bigtable memiliki fitur percobaan ulang cerdas bawaan untuk operasi tulis sederhana dan batch, yang berarti library tersebut menangani ketiadaan sementara dengan lancar. Misalnya, jika aplikasi Anda mencoba menulis data dan mengalami pemadaman sementara atau masalah jaringan, aplikasi akan otomatis mencoba lagi hingga penulisan dilakukan atau batas waktu permintaan tercapai. Ketahanan ini berfungsi dengan instance cluster tunggal dan instance yang direplikasi, dengan perutean cluster tunggal atau perutean multi-cluster.

Untuk operasi tulis batch dan streaming, Anda dapat menggunakan konektor Bigtable Beam. Untuk informasi selengkapnya, lihat Penulisan batch.

Untuk mempelajari batas yang berlaku untuk permintaan tulis, lihat Kuota dan batas.

Untuk contoh library klien Cloud Bigtable dari permintaan tulis yang dijelaskan di halaman ini, lihat Contoh tulis.

Jenis operasi tulis dan kapan harus menggunakannya

Semua permintaan tulis menyertakan komponen dasar berikut:

  • Nama tabel yang akan ditulis.
  • ID profil aplikasi, yang memberi tahu Bigtable cara merutekan traffic.
  • Satu atau beberapa mutasi. Mutasi terdiri dari elemen berikut:
    • Nama grup kolom
    • Penentu kolom
    • Stempel waktu
    • Nilai yang Anda tulis ke tabel

Stempel waktu mutasi memiliki nilai default tanggal dan waktu saat ini, yang diukur sebagai waktu yang telah berlalu sejak epoch Unix, 00.00.00 UTC pada 1 Januari 1970.

Stempel waktu yang Anda kirim ke Bigtable harus berupa nilai mikrodetik dengan presisi maksimal milidetik. Stempel waktu dengan presisi mikrodetik, seperti 3023483279876543, ditolak. Dalam contoh ini, nilai stempel waktu yang dapat diterima adalah 3023483279876000.

Semua mutasi dalam satu permintaan tulis memiliki stempel waktu yang sama, kecuali jika Anda menggantinya. Anda dapat menetapkan stempel waktu semua mutasi dalam permintaan tulis agar sama atau berbeda satu sama lain.

Operasi tulis sederhana

Anda dapat menulis satu baris ke Bigtable dengan permintaan MutateRow yang menyertakan nama tabel, ID profil aplikasi yang harus digunakan, kunci baris, dan hingga 100.000 mutasi untuk baris tersebut. Penulisan baris tunggal bersifat atomik. Gunakan jenis operasi tulis ini saat Anda membuat beberapa mutasi ke satu baris.

Untuk mengetahui contoh kode yang menunjukkan cara mengirim permintaan tulis sederhana, lihat Melakukan operasi tulis sederhana.

Kapan sebaiknya Anda tidak menggunakan operasi tulis sederhana

Operasi tulis sederhana bukanlah cara terbaik untuk menulis data untuk kasus penggunaan berikut:

  • Anda menulis batch data yang akan memiliki kunci baris yang berurutan. Dalam hal ini, Anda harus menggunakan penulisan batch, bukan penulisan sederhana berturut-turut, karena batch yang berdekatan dapat diterapkan dalam satu panggilan backend.

  • Anda menginginkan throughput tinggi (baris per detik atau byte per detik) dan tidak memerlukan latensi rendah. Dalam hal ini, operasi tulis batch akan lebih cepat.

Agregasi, termasuk penambahan

Gabungan adalah sel tabel Bigtable yang menggabungkan nilai sel saat data ditulis. Jenis agregasi berikut tersedia:

  • Sum - Menambahkan penghitung atau mempertahankan total berjalan.
  • Minimum - Kirim bilangan bulat ke sel, dan Bigtable akan menyimpan nilai sel saat ini dan nilai yang dikirim, atau nilai yang dikirim jika sel belum ada.
  • Maksimum - Kirim bilangan bulat ke sel yang berisi nilai, dan Bigtable akan menyimpan nilai yang lebih tinggi dari kedua nilai tersebut.
  • HyperLogLog (HLL) - Mengirim nilai yang ditambahkan ke kumpulan probabilistik semua nilai yang ditambahkan ke sel.

Permintaan untuk memperbarui sel gabungan dikirim dengan permintaan MutateRow dan jenis mutasi AddToCell atau MergeToCell atau salah satu jenis mutasi penghapusan. Untuk mengetahui informasi selengkapnya tentang jenis agregasi dan keluarga kolom agregat, lihat Nilai agregat pada waktu penulisan.

Penambahan

Untuk menambahkan data ke nilai yang ada, Anda dapat menggunakan permintaan ReadModifyWriteRow. Permintaan ini mencakup nama tabel, ID profil aplikasi yang harus digunakan, kunci baris, dan kumpulan aturan yang akan digunakan saat menulis data. Setiap aturan menyertakan nama grup kolom, penentu kolom, dan nilai tambahan atau jumlah penambahan.

Aturan diterapkan secara berurutan. Misalnya, jika permintaan Anda menyertakan permintaan untuk menambahkan nilai untuk kolom yang berisi nilai some dengan string thing, dan aturan berikutnya dalam permintaan yang sama menambahkan kolom yang sama dengan body, nilai diubah dua kali dalam satu operasi tulis atom, dan nilai yang dihasilkan adalah somethingbody. Aturan yang lebih baru tidak akan menimpa aturan yang lebih lama.

Anda juga dapat menambahkan bilangan bulat dengan panggilan ReadModifyWriteRow, tetapi sebaiknya gunakan sel gabungan dan AddToCell atau MergeToCell. Nilai hanya dapat ditambah menggunakan ReadModifyWrite jika dienkode sebagai bilangan bulat bertanda big-endian 64-bit. Bigtable memperlakukan penambahan ke nilai yang kosong atau tidak ada seolah-olah nilainya nol.

Permintaan ReadModifyWriteRow bersifat atomik. Operasi tersebut tidak akan dicoba ulang jika gagal karena alasan apa pun.

Kapan sebaiknya ReadModifyWriteRow tidak digunakan

Jangan kirim permintaan ReadModifyWriteRow dalam situasi berikut:

  • Kasus penggunaan Anda dapat ditangani dengan mengirim permintaan MutateRow dengan mutasi AddToCell. Untuk mengetahui informasi selengkapnya, lihat Agregasi.

  • Anda menggunakan profil aplikasi yang memiliki pemilihan rute multi-cluster.

  • Anda menggunakan beberapa profil aplikasi cluster tunggal dan mengirim operasi tulis yang dapat bertentangan dengan data yang ditulis ke baris dan kolom yang sama di cluster lain dalam instance. Dengan pemilihan rute cluster tunggal, permintaan tulis dikirim ke satu cluster, lalu direplikasi.

  • Anda mengandalkan fitur percobaan ulang cerdas yang disediakan oleh library klien. Permintaan ReadModifyWriteRow tidak dapat dicoba lagi.

  • Anda menulis data dalam jumlah besar dan memerlukan penulisan yang selesai dengan cepat. Permintaan yang membaca, lalu mengubah baris lebih lambat daripada permintaan tulis sederhana. Akibatnya, jenis penulisan ini sering kali bukan pendekatan terbaik dalam skala besar.

    Misalnya, jika Anda ingin menghitung sesuatu yang jumlahnya akan mencapai jutaan, seperti kunjungan halaman, Anda harus MutateRow dengan mutasi AddToCell untuk memperbarui jumlah pada waktu penulisan.

Operasi tulis bersyarat

Jika Anda ingin memeriksa kondisi baris, lalu, bergantung pada hasilnya, menulis data ke baris tersebut, kirimkan permintaan CheckAndMutateRow. Jenis permintaan ini mencakup kunci baris dan filter baris. Filter baris adalah kumpulan aturan yang Anda gunakan untuk memeriksa nilai data yang ada. Mutasi kemudian di-commit ke kolom tertentu dalam baris hanya jika kondisi tertentu, yang diperiksa oleh filter, terpenuhi. Proses pemeriksaan, lalu penulisan ini diselesaikan sebagai satu tindakan atomik.

Permintaan filter harus menyertakan salah satu atau kedua jenis mutasi berikut:

  • Mutasi benar, atau mutasi yang akan diterapkan jika filter menampilkan nilai.
  • Mutasi palsu, yang diterapkan jika filter tidak menghasilkan apa pun.

Anda dapat menyediakan hingga 100.000 dari setiap jenis mutasi--benar dan salah--dalam satu operasi tulis, dan Anda harus mengirim setidaknya satu. Bigtable mengirimkan respons saat semua mutasi selesai.

Untuk contoh kode yang menunjukkan cara mengirim operasi tulis bersyarat, lihat Menulis nilai secara bersyarat.

Kapan sebaiknya tidak menggunakan operasi tulis bersyarat

Anda tidak dapat menggunakan operasi tulis bersyarat untuk kasus penggunaan berikut:

  • Anda menggunakan profil aplikasi yang memiliki pemilihan rute multi-cluster.

  • Anda menggunakan beberapa profil aplikasi cluster tunggal dan mengirim operasi tulis yang dapat bertentangan dengan data yang ditulis ke baris dan kolom yang sama di cluster lain dalam instance. Dengan pemilihan rute cluster tunggal, permintaan tulis dikirim ke satu cluster, lalu direplikasi.

  • Anda menulis data dalam jumlah besar dan memerlukan operasi tulis yang selesai dengan cepat. Serupa dengan ReadModifyWriteRow, permintaan tulis kondisional perlu membaca baris sebelum mengubahnya, sehingga permintaan CheckAndModifyRow lebih lambat daripada permintaan tulis sederhana. Akibatnya, jenis penulisan ini sering kali bukan pendekatan terbaik dalam skala besar.

Operasi tulis batch

Anda dapat menulis lebih dari satu baris dengan satu panggilan menggunakan permintaan MutateRows. Permintaan MutateRows berisi kumpulan hingga 100.000 entri yang setiap kali diterapkan secara atomik. Setiap entri terdiri dari kunci baris dan minimal satu mutasi yang akan diterapkan ke baris. Permintaan operasi tulis batch dapat berisi hingga 100.000 mutasi yang tersebar di semua entri. Misalnya, operasi tulis batch dapat menyertakan salah satu permutasi berikut:

  • 100.000 entri dengan 1 mutasi di setiap entri.
  • 1 entri dengan 100.000 mutasi.
  • 1.000 entri dengan masing-masing 100 mutasi.

Setiap entri dalam permintaan MutateRows bersifat atomik, tetapi permintaan secara keseluruhan tidak. Jika perlu, Bigtable akan mencoba kembali entri apa pun dalam batch yang tidak berhasil, hingga semua penulisan berhasil atau batas waktu permintaan tercapai. Kemudian, metode ini akan menampilkan respons yang mengidentifikasi setiap operasi tulis dalam batch dan apakah operasi tulis berhasil atau tidak.

Untuk contoh kode yang menunjukkan cara mengirim operasi tulis batch, lihat Melakukan operasi tulis batch.

Kapan sebaiknya Anda tidak menggunakan operasi tulis batch

  • Anda menulis data massal ke baris yang tidak berdekatan. Bigtable menyimpan data secara leksikografis berdasarkan kunci baris, yang setara dengan urutan abjad dalam biner. Oleh karena itu, saat kunci baris dalam permintaan tidak mirip satu sama lain, Bigtable akan menanganinya secara berurutan, bukan secara paralel. Throughput akan tinggi, tetapi latensi juga akan tinggi. Untuk menghindari latensi tinggi tersebut, gunakan MutateRows saat kunci baris serupa dan Bigtable akan menulis baris yang berdekatan. Gunakan MutateRow, atau operasi tulis sederhana, untuk baris yang tidak berdekatan.

  • Anda meminta beberapa mutasi ke baris yang sama. Dalam hal ini, Anda akan melihat performa yang lebih baik jika melakukan semua mutasi dalam satu permintaan tulis sederhana. Hal ini karena dalam operasi tulis sederhana, semua perubahan di-commit dalam satu tindakan atomik, tetapi operasi tulis batch dipaksa untuk melakukan serialisasi mutasi ke baris yang sama, sehingga menyebabkan latensi.

Kontrol alur tulis batch

Jika mengirim operasi tulis batch (termasuk penghapusan) menggunakan salah satu hal berikut, Anda dapat mengaktifkan kontrol alur operasi tulis batch dalam kode.

Saat kontrol alur penulisan batch diaktifkan untuk tugas Dataflow, Bigtable akan otomatis melakukan hal berikut :

  • Batasi kapasitas traffic untuk menghindari kelebihan beban cluster Bigtable
  • Memastikan cluster memiliki beban yang cukup untuk memicu penskalaan otomatis Bigtable (jika diaktifkan), sehingga lebih banyak node otomatis ditambahkan ke cluster saat diperlukan

Tindakan gabungan ini mencegah kelebihan beban cluster dan kegagalan tugas, dan Anda tidak perlu menskalakan cluster secara manual untuk mengantisipasi pengoperasian penulisan batch. Jika kontrol alur diaktifkan, penskalaan cluster akan terjadi selama tugas Dataflow, bukan sebelum tugas tersebut, sehingga tugas mungkin memerlukan waktu lebih lama untuk selesai daripada jika Anda menskalakan cluster secara manual.

Anda harus menggunakan profil aplikasi yang dikonfigurasi untuk perutean cluster tunggal. Mengaktifkan penskalaan otomatis Bigtable untuk cluster tujuan bukanlah persyaratan, tetapi penskalaan otomatis memungkinkan Anda memanfaatkan kontrol alur tulis batch sepenuhnya. Anda dapat menggunakan penskalaan otomatis Dataflow seperti yang Anda lakukan dengan tugas lainnya.

Untuk mempelajari penskalaan otomatis Bigtable lebih lanjut, lihat Penskalaan otomatis. Untuk memahami kebijakan pemilihan rute profil aplikasi, lihat Ringkasan profil aplikasi.

Untuk contoh kode, lihat Mengaktifkan kontrol alur operasi tulis batch.

Menulis data ke tampilan yang diotorisasi

Untuk menulis data ke tampilan yang diotorisasi, Anda harus menggunakan salah satu dari hal berikut:

  • gcloud CLI
  • Klien Bigtable untuk Java

Library klien Bigtable lainnya belum mendukung akses tampilan yang diotorisasi.

Saat menulis data ke tampilan yang diotorisasi, Anda harus memberikan ID tampilan yang diotorisasi selain ID tabel.

Semua operasi tulis ke tampilan yang diotorisasi diterapkan langsung ke tabel yang mendasarinya.

Batasan definisi tampilan yang diotorisasi

Dalam tampilan yang diotorisasi, baris atau kolom tempat Anda dapat menulis data dibatasi oleh definisi tampilan yang diotorisasi. Dengan kata lain, Anda hanya dapat menulis ke baris dan kolom yang memenuhi kriteria yang sama yang ditentukan untuk tampilan yang diotorisasi.

Misalnya, jika tampilan yang diotorisasi ditentukan oleh awalan kunci baris examplepetstore1, Anda tidak dapat menulis data menggunakan kunci baris examplepetstore2; awal nilai kunci baris harus menyertakan seluruh string examplepetstore1.

Demikian pula, jika tampilan yang diotorisasi ditentukan oleh awalan penentu kolom order-phone, Anda dapat menulis data menggunakan penentu kolom order-phone123, tetapi tidak dapat menggunakan penentu kolom order-tablet.

Permintaan tulis Anda juga tidak dapat mereferensikan data yang berada di luar tampilan yang diotorisasi, seperti saat Anda memeriksa nilai dalam permintaan tulis bersyarat.

Untuk setiap permintaan yang menulis atau mereferensikan data di luar tampilan yang diotorisasi, pesan error PERMISSION_DENIED akan ditampilkan.

Replikasi

Saat satu cluster dari instance yang direplikasi menerima operasi tulis, operasi tulis tersebut akan langsung direplikasi ke cluster lain dalam instance.

Atomitas

Setiap permintaan MutateRows yang Anda kirim ke instance yang direplikasi di-commit sebagai satu tindakan atomik di cluster tempat permintaan dirutekan. Saat penulisan direplikasi ke cluster lain dalam instance, cluster tersebut juga masing-masing menerima penulisan sebagai operasi atomik. Cluster tidak menerima mutasi sebagian; mutasi berhasil atau gagal secara atomik untuk semua sel yang diubahnya.

Konsistensi

Waktu yang diperlukan agar data yang Anda tulis tersedia untuk dibaca bergantung pada beberapa faktor, termasuk jumlah cluster dalam instance dan jenis perutean yang digunakan profil aplikasi Anda.

Dengan instance cluster tunggal, data dapat segera dibaca, tetapi jika instance memiliki lebih dari satu cluster, yang berarti menggunakan replikasi, Bigtable akan konsisten tertunda. Anda dapat mencapai konsistensi read-your-write dengan merutekan permintaan ke cluster yang sama.

Anda dapat membuat dan menggunakan token konsistensi serta memanggil CheckConsistency dalam mode StandardReadRemoteWrites setelah mengirim permintaan tulis. Token memeriksa konsistensi replikasi. Secara umum, Anda membuat token konsistensi setelah batch operasi tulis dikirim atau setelah interval tertentu, seperti satu jam. Kemudian, Anda dapat menyerahkan token untuk digunakan oleh proses lain, seperti modul yang membuat permintaan baca, yang menggunakan token untuk memeriksa untuk memastikan semua data telah direplikasi sebelum mencoba membaca.

Jika Anda menggunakan token tepat setelah membuatnya, perlu waktu hingga beberapa menit untuk memeriksa konsistensi saat pertama kali menggunakannya. Penundaan ini karena setiap cluster memeriksa setiap cluster lain untuk memastikan tidak ada lagi data yang masuk. Setelah penggunaan awal, atau jika Anda menunggu beberapa menit untuk menggunakan token untuk pertama kali, token akan langsung berhasil setiap kali digunakan.

Penyelesaian konflik

Setiap nilai sel dalam tabel Bigtable diidentifikasi secara unik oleh empat tuple (kunci baris, grup kolom, penentu kolom, stempel waktu). Lihat Model penyimpanan Bigtable untuk mengetahui detail selengkapnya tentang ID ini. Dalam kasus yang jarang terjadi, jika dua operasi tulis dengan empat tuple yang sama persis dikirim ke dua cluster yang berbeda, Bigtable akan otomatis menyelesaikan konflik menggunakan algoritma last write wins internal berdasarkan waktu sisi server. Implementasi "last write wins" Bigtable bersifat deterministik, dan saat replika mengejar, semua cluster memiliki nilai yang sama untuk empat tuple.

Langkah selanjutnya