Aliran data perubahan memantau dan men-streaming perubahan data database Spanner—penyisipan, pembaruan, dan penghapusan—hampir secara real time.
Halaman ini menawarkan ringkasan tingkat tinggi tentang aliran perubahan Spanner: fungsinya, dan cara kerjanya. Untuk mempelajari cara membuat dan mengelola aliran perubahan di database Anda serta menghubungkannya dengan layanan lain, ikuti link di Langkah Berikutnya.
Tujuan aliran data perubahan
Aliran perubahan memberikan cara yang fleksibel dan skalabel untuk melakukan streaming perubahan data ke layanan lain. Kasus penggunaan umum meliputi:
Mereplikasi perubahan data Spanner ke data warehouse, seperti BigQuery, untuk analisis.
Memicu logika aplikasi berdasarkan perubahan data yang dikirim ke antrean pesan, seperti Pub/Sub.
Menyimpan perubahan data di Cloud Storage, untuk tujuan kepatuhan atau pengarsipan.
Mengubah konfigurasi aliran data
Spanner memperlakukan aliran perubahan sebagai objek skema, seperti tabel dan indeks. Dengan demikian, Anda membuat, mengubah, dan menghapus aliran perubahan menggunakan pernyataan DDL, dan Anda dapat melihat aliran perubahan database seperti objek skema terkelola DDL lainnya.
Anda dapat mengonfigurasi aliran perubahan untuk memantau perubahan data di seluruh database, atau membatasi cakupannya ke tabel dan kolom tertentu. Database dapat memiliki beberapa aliran perubahan, dan tabel atau kolom tertentu dapat memiliki beberapa aliran yang memantaunya, dalam batas.
Anda juga dapat mengonfigurasi aliran perubahan untuk menentukan periode retensi data, jenis pengambilan nilai, filter penghapusan berbasis TTL, atau filter modifikasi tabel.
Mengeluarkan DDL yang membuat aliran perubahan akan memulai operasi yang berjalan lama. Setelah selesai, streaming perubahan baru akan segera mulai memantau tabel dan kolom yang ditetapkan ke streaming tersebut.
Mengamati tabel dan kolom secara implisit
Aliran perubahan yang memantau seluruh tabel secara implisit memantau semua kolom dalam tabel tersebut, meskipun definisi tabel tersebut diperbarui. Misalnya, saat Anda menambahkan kolom baru ke tabel tersebut, aliran perubahan akan otomatis mulai memantau kolom baru tersebut, tanpa memerlukan perubahan apa pun pada konfigurasi aliran perubahan tersebut. Demikian pula, streaming perubahan akan otomatis berhenti memantau kolom apa pun yang dihapus dari tabel tersebut.
Aliran perubahan seluruh database berfungsi dengan cara yang sama. Fungsi ini secara implisit memantau setiap kolom di setiap tabel, secara otomatis memantau tabel atau kolom yang ditambahkan setelah pembuatan aliran perubahan, dan berhenti memantau tabel atau kolom yang dihapus.
Mengamati tabel dan kolom secara eksplisit
Jika Anda mengonfigurasi aliran perubahan untuk hanya memantau kolom tertentu dalam tabel, dan kemudian Anda menambahkan kolom ke tabel tersebut, aliran perubahan tidak akan mulai memantau kolom tersebut kecuali jika Anda mengonfigurasi ulang aliran perubahan tersebut untuk melakukannya.
Skema database memperlakukan aliran perubahan sebagai objek dependen dari kolom atau tabel apa pun yang dipantau secara eksplisit. Sebelum dapat menghapus kolom atau tabel tersebut, Anda harus menghapusnya secara manual dari konfigurasi aliran perubahan yang memantaunya secara eksplisit.
Jenis perubahan data yang mengubah streaming watch
Perubahan data yang dipantau oleh aliran data perubahan mencakup semua penyisipan, pembaruan, dan penghapusan yang dilakukan pada tabel dan kolom yang dipantau. Perubahan ini dapat berasal dari:
Penghapusan berurutan di tabel turunan sisipan
Penghapusan yang dihasilkan dari aturan time to live
Change stream hanya dapat memantau perubahan data di kolom dan tabel yang dibuat pengguna. Fungsi ini tidak memantau indeks, tampilan, aliran perubahan lainnya, atau tabel sistem seperti skema informasi atau tabel statistik. Aliran perubahan tidak memantau kolom yang dihasilkan kecuali jika kolom tersebut merupakan bagian dari kunci utama. Kolom kunci utama selalu dilacak.
Selain itu, aliran perubahan tidak memantau perubahan skema atau perubahan data apa pun yang secara langsung dihasilkan dari perubahan skema, selain pengisian ulang untuk nilai default. Misalnya, aliran perubahan yang memantau seluruh database tidak mempertimbangkan dan mencatat penghapusan tabel sebagai perubahan data, meskipun tindakan ini menghapus semua data tabel tersebut dari database.
Cara Spanner menulis dan menyimpan aliran data perubahan
Setiap kali Spanner mendeteksi perubahan data dalam kolom yang dipantau oleh aliran perubahan, Spanner akan menulis data change record ke penyimpanan internalnya. Penulisan perubahan data dan data perubahan data ditulis dalam transaksi yang sama. Spanner menempatkan kedua operasi tulis ini secara bersama sehingga diproses oleh server yang sama, sehingga meminimalkan pemrosesan operasi tulis. Kemudian, transaksi tersebut replikasikan di seluruh replika database, sehingga menimbulkan biaya penyimpanan dan replikasi. Untuk mengetahui informasi selengkapnya, lihat Harga Spanner.
Konten data perubahan data
Setiap data perubahan yang ditulis oleh aliran perubahan menyertakan informasi berikut tentang perubahan data:
Nama tabel yang terpengaruh
Nama, nilai, dan jenis data kunci utama yang mengidentifikasi baris yang diubah
Nama dan jenis data kolom baris yang diubah yang diambil berdasarkan definisi aliran perubahan.
Nilai lama kolom baris. Ketersediaan nilai lama dan konten yang dilacaknya, yang dapat berupa kolom yang diubah saja atau seluruh baris yang dilacak, bergantung pada jenis pengambilan nilai yang dikonfigurasi pengguna.
Nilai baru kolom baris. Ketersediaan nilai baru dan konten yang dilacaknya bergantung pada jenis pengambilan nilai yang dikonfigurasi pengguna.
Jenis perubahan (menyisipkan, memperbarui, atau menghapus)
Stempel waktu commit
ID transaksi
Nomor urutan data
Jenis pengambilan nilai kumpulan data perubahan.
Untuk melihat struktur data perubahan catatan secara lebih mendalam, lihat Data perubahan catatan.
Retensi data
Aliran perubahan mempertahankan data perubahannya selama jangka waktu antara satu hingga tujuh hari. Anda dapat menggunakan DDL untuk menentukan batas retensi data selain default satu hari saat pertama kali membuat aliran perubahan, atau menyesuaikannya kapan saja di masa mendatang. Perhatikan bahwa mengurangi batas retensi data aliran perubahan akan membuat semua data perubahan historis yang lebih lama dari batas baru segera dan tidak tersedia secara permanen untuk pembaca aliran perubahan tersebut.
Periode retensi data ini memiliki konsekuensi; periode retensi yang lebih lama membawa permintaan penyimpanan yang lebih besar pada database aliran data.
Jenis pengambilan nilai
Opsi konfigurasi jenis pengambilan nilai aliran perubahan mengontrol cara menyimpan nilai baris yang diubah. Anda dapat menggunakan DDL untuk menentukan salah satu jenis pengambilan nilai berikut untuk aliran perubahan:
OLD_AND_NEW_VALUES
: Menangkap nilai lama dan baru dari kolom baris yang diubah.NEW_VALUES
: Hanya mengambil nilai baru dari kolom non-kunci, tetapi tidak ada nilai lama.NEW_ROW
: Merekam semua nilai baru kolom yang dipantau, baik yang diubah maupun tidak diubah, setiap kali salah satu kolom tersebut berubah. Tidak ada nilai lama yang diambil.NEW_ROW_AND_OLD_VALUES
: Menangkap semua nilai baru untuk kolom yang diubah dan tidak diubah, serta nilai lama untuk kolom yang diubah.
Mengecualikan penghapusan berdasarkan time to live
Di Spanner, Time to live (TTL) memungkinkan Anda menetapkan kebijakan untuk menghapus data dari tabel Spanner secara berkala.
Secara default, aliran perubahan menyertakan semua penghapusan berbasis TTL. Anda dapat menggunakan
exclude_ttl_deletes
untuk menetapkan aliran perubahan agar mengecualikan penghapusan berbasis TTL. Saat
Anda menetapkan filter ini untuk mengecualikan penghapusan berbasis TTL, hanya penghapusan berbasis TTL mendatang
yang dikecualikan dari aliran perubahan Anda.
Nilai default untuk filter ini adalah false
. Untuk mengecualikan penghapusan berbasis TTL,
tetapkan filter ke true
. Anda dapat menambahkan filter saat membuat aliran perubahan atau mengubah aliran perubahan yang ada untuk menyertakan filter.
Jenis perubahan tabel
Secara default, aliran perubahan menyertakan semua modifikasi tabel, seperti penyisipan, pembaruan, dan penghapusan. Anda dapat memfilter satu atau beberapa perubahan tabel ini dari cakupan streaming perubahan menggunakan opsi filter yang tersedia berikut:
exclude_insert
: mengecualikan semua perubahan tabelINSERT
exclude_update
: mengecualikan semua perubahan tabelUPDATE
exclude_delete
: mengecualikan semua perubahan tabelDELETE
Nilai default untuk filter ini adalah false
. Untuk mengecualikan jenis perubahan tabel tertentu, tetapkan filter ke true
. Anda dapat menetapkan satu atau beberapa filter secara bersamaan.
Anda dapat menambahkan filter untuk jenis perubahan tabel saat membuat aliran perubahan atau mengubah filter untuk jenis perubahan tabel untuk aliran perubahan yang ada.
Membaca aliran data perubahan
Spanner menawarkan beberapa cara untuk membaca data aliran perubahan:
Melalui Dataflow, menggunakan konektor Apache Beam SpannerIO. Ini adalah solusi yang kami rekomendasikan untuk sebagian besar aplikasi aliran perubahan. Google juga menyediakan template Dataflow untuk kasus penggunaan umum.
Langsung, menggunakan Spanner API. Hal ini mengorbankan abstraksi dan kemampuan pipeline Dataflow untuk kecepatan dan fleksibilitas maksimum.
Melalui penggunaan konektor Kafka berbasis Debezium untuk aliran data perubahan Spanner. Konektor ini melakukan streaming data perubahan langsung ke topik Kafka.
Anda dapat memberikan isolasi sebagian untuk pembacaan aliran perubahan menggunakan pembacaan terarah. Pembacaan terarah dapat membantu meminimalkan dampak pada beban kerja transaksional di database Anda. Anda dapat menggunakan Spanner API untuk merutekan pembacaan aliran perubahan ke jenis atau region replika tertentu dalam konfigurasi instance multi-region atau konfigurasi regional kustom dengan region hanya baca opsional. Untuk informasi selengkapnya, lihat pembacaan terarah.
Menggunakan Dataflow
Gunakan konektor Apache Beam SpannerIO
untuk mem-build pipeline Dataflow yang membaca dari aliran perubahan. Setelah Anda mengonfigurasi konektor dengan detail tentang aliran perubahan tertentu, konektor akan otomatis menghasilkan kumpulan data PCollection
yang tidak terbatas dan tunggal, yang siap untuk diproses lebih lanjut oleh transformasi berikutnya di pipeline Dataflow.
Dataflow menggunakan fungsi jendela untuk membagi koleksi tanpa batas menjadi komponen logis, atau jendela. Akibatnya, Dataflow menyediakan streaming mendekati real-time saat membaca dari aliran perubahan.
Google menyediakan template yang memungkinkan Anda membuat pipeline Dataflow dengan cepat untuk kasus penggunaan aliran perubahan umum, termasuk mengirim semua perubahan data aliran ke set data BigQuery, atau menyalinnya ke bucket Cloud Storage.
Untuk ringkasan yang lebih mendetail tentang cara kerja aliran perubahan dan Dataflow, lihat Mem-build koneksi aliran perubahan dengan Dataflow.
Menggunakan API
Sebagai alternatif untuk menggunakan Dataflow guna mem-build pipeline perubahan, Anda dapat menulis kode yang menggunakan Spanner API untuk membaca data perubahan secara langsung. Hal ini memungkinkan Anda membaca data perubahan dengan cara yang sama seperti konektor SpannerIO, dengan mengorbankan abstraksi yang disediakannya sebagai imbalan untuk latensi serendah mungkin saat membaca data stream perubahan.
Untuk mempelajari lebih lanjut, lihat Mengkueri aliran perubahan. Untuk diskusi yang lebih mendetail tentang cara membuat kueri streaming perubahan dan menafsirkan kumpulan data yang ditampilkan, lihat Mengubah partisi, kumpulan data, dan kueri streaming.
Menggunakan konektor Kafka
Konektor Kafka langsung menghasilkan kumpulan data aliran perubahan ke dalam topik Kafka. API ini memisahkan detail kueri aliran perubahan menggunakan Spanner API.
Untuk mempelajari lebih lanjut cara kerja aliran perubahan dan konektor Kafka, lihat Mem-build koneksi aliran perubahan dengan konektor Kafka.
Batas
Ada beberapa batasan pada aliran perubahan, termasuk jumlah maksimum aliran perubahan yang dapat dimiliki database, dan jumlah maksimum streaming yang dapat memantau satu kolom. Untuk mengetahui daftar lengkap, lihat Batas stream perubahan.
Izin
Aliran perubahan menggunakan hal berikut:
Membuat, memperbarui, atau menghapus aliran perubahan memerlukan
spanner.databases.updateDdl
.Membaca data aliran perubahan memerlukan
spanner.databases.select
.
Jika menggunakan konektor SpannerIO, pemilik tugas Dataflow yang membaca data aliran perubahan memerlukan izin IAM tambahan, baik di database aplikasi Anda maupun di database metadata terpisah; lihat Membuat database metadata.
Langkah selanjutnya
Pelajari sintaksis DDL untuk membuat dan mengelola aliran perubahan.
Gunakan aliran perubahan dan template untuk mereplikasi perubahan dari Spanner ke BigQuery atau ke Cloud Storage.
Pelajari lebih lanjut cara mem-build pipeline Dataflow untuk memproses data aliran perubahan.
Pelajari lebih lanjut detail aliran perubahan, termasuk detail selengkapnya tentang arsitektur aliran perubahan, cara membuat kueri aliran perubahan menggunakan API, dan menafsirkan data yang ditampilkan.
Pelajari lebih lanjut cara menggunakan konektor Kafka untuk memproses data aliran perubahan.