Ringkasan aliran perubahan

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:

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 tabel INSERT
  • exclude_update: mengecualikan semua perubahan tabel UPDATE
  • exclude_delete: mengecualikan semua perubahan tabel DELETE

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