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
- Pelajari panduan memulai untuk melihat cara membuat dan memperbarui penghitung menggunakan
cbt
CLI. - Lihat contoh kode yang menunjukkan cara menambahkan nilai ke sel agregat.
- Tinjau konsep yang terkait dengan desain skema.