Menggabungkan nilai pada waktu tulis

Jika ingin membuat penghitung atau menggabungkan data di Bigtable pada waktu tulis, Anda dapat menggunakan agregat. Agregat adalah sel tabel Bigtable yang menggabungkan nilai sel saat data ditulis. Saat Anda menambahkan nilai baru, fungsi agregasi akan menggabungkan nilai dengan nilai gabungan yang sudah ada di sel. Database lain menyebut kemampuan serupa sebagai penghitung terdistribusi.

Anda dapat membaca dan menulis nilai gabungan menggunakan CLI cbt dan library klien Bigtable untuk C++, Go, dan Java. Anda juga dapat membaca hasil agregasi menggunakan SQL. Anda memperbarui sel gabungan menggunakan metode yang mengirim permintaan MutateRow dengan mutasi AddToCell atau MergeToCell. MergeToCell memungkinkan Anda menggabungkan accumulator, dan AddToCell memungkinkan Anda menambahkan input.

Dokumen ini memberikan ringkasan agregat dan menjelaskan cara membuat keluarga kolom agregat. Sebelum membaca dokumen ini, Anda harus memahami ringkasan Bigtable dan Penulisan.

Kapan harus menggunakan agregat

Agregat Bigtable berguna untuk situasi saat Anda hanya memerlukan data untuk entitas secara agregat, bukan sebagai titik data individual.

Penghitung

Anda dapat membuat penghitung menggunakan sel gabungan dan menambahkan nilai pada waktu menulis, tanpa batasan yang terlibat dalam membuat permintaan ReadModifyWriteRow.

Jika Anda bermigrasi ke Bigtable dari database seperti Apache Cassandra atau Redis, Anda dapat menggunakan agregat Bigtable di tempat yang sebelumnya Anda andalkan penghitung di sistem ini.

Untuk mempelajari panduan memulai yang menunjukkan cara menerapkan penghitung menggunakan CLI cbt, lihat Membuat dan memperbarui penghitung.

Bucket waktu

Anda dapat menggunakan bucket waktu untuk mendapatkan nilai gabungan selama jangka waktu tertentu, seperti jam, hari, atau minggu. Daripada menggabungkan data sebelum atau setelah ditulis ke tabel, Anda menambahkan nilai baru untuk menggabungkan sel dalam tabel.

Misalnya, jika Anda menjalankan layanan yang membantu lembaga amal mengumpulkan dana, Anda mungkin ingin mengetahui jumlah donasi online per hari untuk setiap kampanye, tetapi Anda tidak perlu mengetahui waktu persis setiap donasi atau jumlah per jam. Dalam tabel, kunci baris mewakili ID lembaga amal, dan Anda membuat grup kolom agregat yang disebut donations. Penentu kolom dalam baris adalah ID kampanye.

Setiap jumlah donasi yang diterima untuk hari tertentu untuk kampanye akan ditambahkan ke jumlah di sel gabungan di kolom untuk hari tersebut. Setiap permintaan penambahan untuk sel menggunakan stempel waktu yang terpotong ke awal hari, sehingga setiap permintaan memiliki stempel waktu yang sama. Memotong stempel waktu memastikan bahwa semua donasi dari hari tersebut ditambahkan ke sel yang sama. Keesokan harinya, semua permintaan Anda akan masuk ke sel baru, menggunakan stempel waktu yang terpotong hingga tanggal baru, dan pola tersebut akan berlanjut.

Bergantung pada kasus penggunaan, Anda dapat memilih untuk membuat kolom baru untuk agregat baru. Bergantung pada jumlah bucket yang ingin Anda kumpulkan, Anda dapat mempertimbangkan desain kunci baris yang berbeda.

Untuk mengetahui informasi selengkapnya tentang bucket waktu, lihat Desain skema untuk data deret waktu.

Menyederhanakan alur kerja

Agregat memungkinkan Anda menggabungkan data dalam tabel Bigtable tanpa perlu menggunakan software pemrosesan streaming atau ETL untuk menggabungkan data sebelum atau setelah Anda menulisnya ke Bigtable. Misalnya, jika aplikasi Anda sebelumnya memublikasikan pesan ke Pub/Sub, lalu menggunakan Dataflow untuk membaca pesan dan menggabungkan data sebelum menulisnya ke Bigtable, Anda dapat mengirim data langsung untuk menggabungkan sel di Bigtable.

Grup kolom gabungan

Untuk membuat dan memperbarui sel gabungan, Anda harus memiliki satu atau beberapa grup kolom gabungan dalam tabel – grup kolom yang hanya berisi sel gabungan. Anda dapat membuatnya saat membuat tabel, atau menambahkan keluarga kolom agregat ke tabel yang sudah digunakan. Saat membuat keluarga kolom, Anda menentukan jenis agregasi, seperti jumlah.

Anda tidak dapat mengonversi grup kolom yang berisi data non-agregat menjadi grup kolom agregat. Kolom dalam grup kolom gabungan tidak dapat berisi sel non-gabungan, dan grup kolom standar tidak dapat berisi sel gabungan.

Untuk membuat tabel baru dengan keluarga kolom gabungan, lihat Membuat tabel. Untuk menambahkan keluarga kolom agregat ke tabel, lihat Menambahkan keluarga kolom.

Jenis agregasi

Bigtable mendukung jenis agregasi berikut:

Jumlah

Saat Anda menulis nilai ke sel agregat jumlah (sum), nilai sel akan diganti dengan jumlah nilai yang baru ditambahkan dan nilai sel saat ini. Jenis input yang didukung untuk jumlah adalah Int64.

Minimum

Saat Anda menulis nilai ke sel agregat minimum (min), nilai sel akan diganti dengan nilai yang lebih rendah antara nilai yang baru ditambahkan dan nilai sel saat ini. Jenis input yang didukung untuk min adalah Int64.

Maksimum

Saat Anda menulis nilai ke sel agregat maksimum (max), nilai sel akan diganti dengan nilai yang lebih tinggi antara nilai yang baru ditambahkan dan nilai sel saat ini. Jenis input yang didukung untuk maksimum adalah Int64.

HyperLogLog (HLL)

Saat Anda menulis nilai ke sel agregat HLL (inthll), nilai tersebut akan ditambahkan ke kumpulan probabilistik dari semua nilai yang ditambahkan sejak reset terbaru. Nilai sel mewakili status set tersebut. Untuk informasi umum selengkapnya tentang algoritma HLL, lihat HyperLogLog.

Anda dapat membaca nilai HLL menggunakan library Zetasketch. Untuk mengetahui informasi selengkapnya, lihat repositori GitHub Zetasketch. Jenis input yang didukung untuk HLL adalah BYTES.

Stempel waktu

Sel gabungan ditentukan oleh kunci baris, grup kolom, penentu kolom, dan stempel waktu. Anda menggunakan stempel waktu yang sama setiap kali menambahkan data ke sel. Jika Anda mengirim nilai ke kunci baris, grup kolom, dan penentu kolom yang sama, tetapi dengan stempel waktu yang berbeda, sel agregat baru akan dibuat di kolom.

Setiap permintaan yang dikirim ke sel gabungan harus menyertakan stempel waktu.

Jenis input

Jenis input nilai dalam permintaan tulis harus cocok dengan jenis input yang digunakan untuk membuat keluarga kolom. Misalnya, jika Anda mengirim nilai string ke keluarga kolom yang dikonfigurasi untuk Int64, permintaan akan ditolak.

Jenis mutasi

Permintaan MutateRow Bigtable menyertakan jenis mutasi, yang merupakan perubahan pada tabel. Jenis mutasi yang dapat Anda kirim untuk membuat dan memperbarui sel gabungan adalah AddToCell dan MergeToCell. Sebaliknya, penulisan non-agregat melibatkan mutasi SetCell. Anda juga dapat menggunakan mutasi penghapusan untuk menghapus nilai akumulasi sel.

Dalam tabel yang direplikasi, sel agregat akan berkonvergensi pada nilai akhir yang sama di semua cluster dalam penundaan replikasi saat ini. Nilai akhir adalah agregat dari semua mutasi AddToCell yang dikirim ke sel tersebut di semua cluster sejak operasi penghapusan terakhir, atau sejak sel dibuat.

Operasi agregasi tunduk pada batas operasi yang sama seperti mutasi tabel lainnya.

AddToCell

Untuk menambahkan data ke sel gabungan, seperti saat menambahkan penghitung, Anda mengirim mutasi AddToCell dalam permintaan MutateRow. Untuk informasi selengkapnya, lihat AddToCell dalam referensi Bigtable Data API.

MergeToCell

Jika Anda ingin menyalin data antar-sel, gunakan mutasi MergeToCell. Misalnya, untuk menyalin status dari sel A ke sel B, Anda dapat melakukan hal seperti [DeleteCell(B), MergeToCell(B)] dengan nilai yang Anda baca dari sel A. Untuk mengetahui informasi selengkapnya, lihat MergeToCell dalam referensi Bigtable Data API.

Penghapusan

Sama seperti data yang tidak digabungkan, Anda dapat mereset penghitung atau menghapus data gabungan menggunakan mutasi Data API. Untuk informasi selengkapnya, lihat Mutasi dalam referensi Bigtable Data API.

Pembersihan sampah memori

Sel gabungan diperlakukan seperti sel lainnya selama pembersihan sampah: jika sel ditandai untuk dihapus, penghapusan akan direplikasi ke semua cluster dalam instance. Untuk informasi selengkapnya, lihat Replikasi dan pembersihan sampah. Jika permintaan penambahan dikirim ke sel gabungan yang telah dihapus oleh pembersihan sampah memori, sel gabungan baru akan dibuat.

Langkah selanjutnya