Ringkasan aliran perubahan

Aliran data perubahan memantau dan men-streaming perubahan data database Spanner—penyisipan, pembaruan, dan penghapusan—mendekati real time.

Halaman ini menawarkan ringkasan tingkat tinggi tentang aliran data perubahan Spanner: fungsi dan cara kerjanya. Untuk mempelajari cara membuat dan mengelola aliran data perubahan di database Anda serta menghubungkannya dengan layanan lain, ikuti link di Langkah Berikutnya.

Tujuan aliran data perubahan

Aliran data perubahan menyediakan cara yang fleksibel dan skalabel untuk men-streaming perubahan data ke layanan lain. Kasus penggunaan umum mencakup:

  • 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.

Konfigurasi aliran data perubahan

Spanner memperlakukan aliran data perubahan sebagai objek skema, seperti tabel dan indeks. Oleh karena itu, Anda membuat, mengubah, dan menghapus aliran data perubahan menggunakan pernyataan DDL, dan Anda dapat melihat aliran data perubahan database seperti objek skema yang dikelola DDL lainnya.

Anda dapat mengonfigurasi aliran data perubahan untuk memantau perubahan data di seluruh database, atau membatasi cakupannya ke tabel dan kolom tertentu. Database dapat memiliki beberapa aliran data perubahan, dan tabel atau kolom tertentu dapat memiliki beberapa aliran yang memantaunya, dalam batas tertentu.

Anda dapat mengonfigurasi aliran data perubahan secara opsional dengan hal berikut:

Mengeluarkan DDL yang membuat aliran data perubahan akan memulai operasi yang berjalan lama. Setelah selesai, aliran data perubahan baru akan segera mulai memantau tabel dan kolom yang ditetapkan untuknya.

Memantau tabel dan kolom secara implisit

Aliran data perubahan yang memantau seluruh tabel secara implisit memantau semua kolom dalam tabel tersebut, bahkan saat definisi tabel tersebut diperbarui. Misalnya, saat Anda menambahkan kolom baru ke tabel tersebut, aliran data perubahan akan otomatis mulai memantau kolom baru tersebut, tanpa memerlukan modifikasi apa pun pada konfigurasi aliran data perubahan tersebut. Demikian pula, aliran data perubahan akan otomatis berhenti memantau kolom apa pun yang dihapus dari tabel tersebut.

Aliran data perubahan seluruh database berfungsi dengan cara yang sama. Aliran data perubahan seluruh database secara implisit memantau setiap kolom di setiap tabel, otomatis memantau tabel atau kolom apa pun yang ditambahkan setelah pembuatan aliran data perubahan, dan berhenti memantau tabel atau kolom yang dihapus.

Memantau tabel dan kolom secara eksplisit

Jika Anda mengonfigurasi aliran data perubahan untuk hanya memantau kolom tertentu dalam tabel, dan Anda kemudian menambahkan kolom ke tabel tersebut, aliran data perubahan tidak akan mulai memantau kolom tersebut kecuali jika Anda mengonfigurasi ulang aliran data perubahan tersebut.

Skema database memperlakukan aliran data 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 data perubahan yang memantaunya secara eksplisit.

Jenis perubahan data yang dipantau aliran data perubahan

Perubahan data yang dipantau aliran data perubahan mencakup semua penyisipan, pembaruan, dan penghapusan yang dilakukan pada tabel dan kolom yang dipantaunya. Perubahan ini dapat berasal dari:

Aliran data perubahan hanya dapat memantau perubahan data di kolom dan tabel yang dibuat pengguna. Aliran data perubahan tidak memantau indeks, tampilan, aliran data perubahan lainnya, atau tabel sistem seperti skema informasi atau tabel statistik. Aliran data perubahan tidak memantau kolom yang dihasilkan kecuali jika kolom tersebut merupakan bagian dari kunci utama. Kolom kunci utama selalu dilacak.

Selain itu, aliran data 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 data 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 di kolom yang dipantau oleh aliran data perubahan, Spanner akan menulis kumpulan data perubahan ke penyimpanan internalnya. Penulisan perubahan data dan kumpulan data perubahan ditulis dalam transaksi yang sama. Spanner menempatkan kedua penulisan ini secara bersamaan sehingga diproses oleh server yang sama, sehingga meminimalkan pemrosesan penulisan. Transaksi tersebut kemudian direplikasi di seluruh replika database, sehingga dikenai biaya penyimpanan dan replikasi. Untuk mengetahui informasi selengkapnya, lihat Harga Spanner.

Konten kumpulan data perubahan

Setiap kumpulan data perubahan yang ditulis oleh aliran data perubahan mencakup 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 data perubahan.

  • Nilai lama kolom baris. Ketersediaan nilai lama dan konten yang dilacak, 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 dilacak bergantung pada jenis pengambilan nilai yang dikonfigurasi pengguna.

  • Jenis modifikasi (penyisipan, pembaruan, atau penghapusan)

  • Stempel waktu commit

  • ID transaksi

  • Nomor urutan kumpulan data

  • Jenis pengambilan nilai kumpulan data perubahan.

Untuk melihat lebih mendalam struktur kumpulan data perubahan, lihat Kumpulan data perubahan.

Retensi data

Aliran data perubahan menyimpan kumpulan data perubahan selama jangka waktu antara satu hingga tiga puluh hari. Anda dapat menggunakan DDL untuk menentukan batas retensi data selain default tujuh hari saat pertama kali membuat aliran data perubahan, atau menyesuaikannya kapan saja di masa mendatang. Perhatikan bahwa mengurangi batas retensi data aliran data perubahan akan membuat semua data perubahan historis yang lebih lama dari batas baru segera dan secara permanen tidak tersedia untuk pembaca aliran data perubahan tersebut.

Periode retensi data ini menghadirkan pertukaran; periode retensi yang lebih lama akan membawa permintaan penyimpanan yang lebih besar pada database aliran.

Jenis pengambilan nilai

Opsi konfigurasi jenis pengambilan nilai aliran data perubahan mengontrol cara aliran data perubahan menyimpan nilai baris yang diubah. Anda dapat menggunakan DDL untuk menentukan salah satu jenis pengambilan nilai berikut untuk aliran data perubahan:

  • OLD_AND_NEW_VALUES: Mengambil nilai lama dan baru kolom yang diubah dari baris.

  • NEW_VALUES: Hanya mengambil nilai baru kolom non-kunci, tetapi tidak ada nilai lama.

  • NEW_ROW: Mengambil semua nilai baru kolom yang dipantau, baik yang diubah maupun yang tidak diubah, setiap kali salah satu kolom tersebut berubah. Tidak ada nilai lama yang diambil.

  • NEW_ROW_AND_OLD_VALUES: Mengambil semua nilai baru untuk kolom yang diubah dan tidak diubah, serta nilai lama untuk kolom yang diubah.

Mengecualikan penghapusan berbasis waktu aktif

Di Spanner, waktu aktif (TTL) memungkinkan Anda menetapkan kebijakan untuk menghapus data secara berkala dari tabel Spanner. Secara default, aliran data perubahan menyertakan semua penghapusan berbasis TTL. Anda dapat menggunakan exclude_ttl_deletes untuk menetapkan aliran data perubahan agar mengecualikan penghapusan berbasis TTL. Jika Anda menetapkan filter ini untuk mengecualikan penghapusan berbasis TTL, hanya penghapusan berbasis TTL di masa mendatang yang akan dikecualikan dari aliran data 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 data perubahan atau mengubah aliran data perubahan yang ada untuk menyertakan filter.

Jenis modifikasi tabel

Secara default, aliran data perubahan menyertakan semua modifikasi tabel, seperti penyisipan, pembaruan, dan penghapusan. Anda dapat memfilter satu atau beberapa modifikasi tabel ini dari cakupan aliran data perubahan menggunakan opsi filter berikut yang tersedia:

  • exclude_insert: mengecualikan semua modifikasi tabel INSERT
  • exclude_update: mengecualikan semua modifikasi tabel UPDATE
  • exclude_delete: mengecualikan semua modifikasi tabel DELETE

Nilai default untuk filter ini adalah false. Untuk mengecualikan jenis modifikasi tabel tertentu, tetapkan filter ke true. Anda dapat menetapkan satu atau beberapa filter secara bersamaan.

Anda dapat menambahkan filter untuk jenis modifikasi tabel saat membuat aliran data perubahan atau mengubah filter untuk jenis modifikasi tabel untuk aliran data perubahan yang ada.

Pengecualian kumpulan data tingkat transaksi

Secara default, aliran data perubahan memantau semua transaksi tulis di database karena opsi DDL allow_txn_exclusion ditetapkan ke false. Anda dapat menetapkan opsi allow_txn_exclusion ke true untuk memungkinkan aliran data perubahan mengabaikan kumpulan data dari transaksi tulis yang ditentukan. Jika Anda tidak menetapkan opsi ini ke true, semua transaksi tulis akan dipantau, meskipun Anda menggunakan parameter exclude_txn_from_change_streams dalam transaksi tulis.

Anda dapat mengaktifkan opsi ini saat membuat aliran data perubahan atau mengubah aliran data perubahan yang ada.

Mengecualikan transaksi tulis dari aliran data perubahan

Untuk mengecualikan transaksi tulis dari aliran data perubahan, Anda harus menetapkan parameter exclude_txn_from_change_streams ke true. Parameter ini adalah bagian dari TransactionOptions dan BatchWriteRequest metode. Nilai default untuk parameter ini adalah false. Anda dapat menetapkan parameter ini dengan RPC API, REST API, atau menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Menentukan transaksi tulis yang akan dikecualikan dari aliran data perubahan.

Anda tidak dapat menetapkan parameter ini ke true untuk transaksi hanya baca. Jika Anda melakukannya, API akan menampilkan error argumen tidak valid.

Untuk kolom pemantauan aliran data perubahan yang diubah oleh transaksi, jika exclude_txn_from_change_streams ditetapkan ke true, dua skenario dapat terjadi:

  • Jika opsi DDL allow_txn_exclusion ditetapkan ke true, pembaruan yang dilakukan dalam transaksi ini tidak akan dicatat dalam aliran data perubahan.
  • Jika Anda tidak menetapkan opsi DDL allow_txn_exclusion atau jika opsi tersebut ditetapkan ke false, pembaruan yang dilakukan dalam transaksi ini akan dicatat dalam aliran data perubahan.

Jika Anda tidak menetapkan opsi exclude_txn_from_change_streams atau jika opsi tersebut ditetapkan ke false, kolom pemantauan aliran data perubahan yang diubah oleh transaksi akan mengambil pembaruan yang dilakukan dalam transaksi tersebut.

Membaca aliran data perubahan

Spanner menawarkan beberapa cara untuk membaca data aliran data perubahan:

  • Melalui Dataflow, menggunakan konektor Apache Beam SpannerIO. Ini adalah solusi yang kami rekomendasikan untuk sebagian besar aplikasi aliran data perubahan. Google juga menyediakan template Dataflow untuk kasus penggunaan umum.

  • Secara 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 men-streaming kumpulan data perubahan langsung ke topik Kafka.

  • Menggunakan Datastream untuk men-streaming perubahan Anda secara langsung ke BigQuery, tabel BigLake Iceberg, atau Cloud Storage.

Anda dapat memberikan isolasi parsial untuk pembacaan aliran data perubahan dengan menggunakan pembacaan terarah. Pembacaan terarah dapat membantu meminimalkan dampak pada workload transaksional di database Anda. Anda dapat menggunakan Spanner API untuk merutekan pembacaan aliran data perubahan ke jenis atau region replika tertentu dalam konfigurasi instance multi-region atau konfigurasi regional kustom dengan region hanya baca opsional. Untuk mengetahui informasi selengkapnya, lihat pembacaan terarah.

Menggunakan Dataflow

Gunakan konektor Apache Beam SpannerIO untuk membuat pipeline Dataflow yang membaca dari aliran data perubahan. Setelah Anda mengonfigurasi konektor dengan detail tentang aliran data perubahan tertentu, konektor tersebut akan otomatis menampilkan kumpulan data perubahan baru ke dalam satu set data PCollection yang tidak terbatas, siap untuk diproses lebih lanjut oleh transformasi berikutnya dalam pipeline Dataflow.

Dataflow menggunakan fungsi windowing untuk membagi koleksi yang tidak terbatas menjadi komponen logis, atau jendela. Hasilnya, Dataflow menyediakan streaming mendekati real time saat membaca dari aliran data perubahan.

Google menyediakan template yang memungkinkan Anda membuat pipeline Dataflow dengan cepat untuk kasus penggunaan aliran data perubahan umum, termasuk mengirim semua perubahan data aliran ke set data BigQuery, atau menyalinnya ke bucket Cloud Storage.

Untuk mengetahui ringkasan yang lebih mendetail tentang cara kerja aliran data perubahan dan Dataflow bersama-sama, lihat Membangun koneksi aliran data perubahan dengan Dataflow.

Menggunakan API

Sebagai alternatif untuk menggunakan Dataflow dalam membangun pipeline aliran data perubahan, Anda dapat menulis kode yang menggunakan Spanner API untuk membaca kumpulan data aliran data perubahan secara langsung. Hal ini memungkinkan Anda membaca kumpulan data perubahan dengan cara yang sama seperti yang dilakukan konektor SpannerIO, dengan memberikan latensi serendah mungkin saat membaca data aliran data perubahan, bukan memberikan fleksibilitas Dataflow.

Untuk mempelajari lebih lanjut, lihat Mengkueri aliran data perubahan. Untuk mengetahui pembahasan yang lebih mendetail tentang cara mengkueri aliran data perubahan dan menafsirkan kumpulan data yang ditampilkan, lihat Mengubah partisi, kumpulan data, dan kueri streaming.

Menggunakan konektor Kafka

Konektor Kafka langsung menampilkan kumpulan data aliran data perubahan ke topik Kafka. Konektor ini mengabstraksikan detail kueri aliran data perubahan menggunakan Spanner API.

Untuk mempelajari lebih lanjut cara kerja aliran data perubahan dan konektor Kafka bersama sama, lihat Membangun koneksi aliran data perubahan dengan konektor Kafka.

Menggunakan Datastream

Gunakan Datastream, layanan replikasi dan pengambilan data perubahan (CDC) yang serverless dan mudah digunakan yang tersedia di Google Cloud. Datastream mendukung aliran data perubahan Spanner, dan memungkinkan Anda membaca dari dan men-streaming data perubahan ke berbagai tujuan.

Untuk mempelajari lebih lanjut cara Datastream mendukung Spanner untuk membaca dan men-streaming data perubahan, lihat Spanner sebagai sumber.

Batas

Ada beberapa batasan pada aliran data perubahan, termasuk jumlah maksimum aliran data perubahan yang dapat dimiliki database, dan jumlah maksimum aliran yang dapat memantau satu kolom. Untuk mengetahui daftar lengkapnya, lihat Batas aliran data perubahan.

Izin

Aliran data perubahan menggunakan hal berikut:

  • Membuat, memperbarui, atau menghapus aliran data perubahan memerlukan spanner.databases.updateDdl.

  • Membaca data aliran data perubahan memerlukan spanner.databases.select.

Jika menggunakan konektor SpannerIO, pemilik tugas Dataflow yang membaca data aliran data perubahan memerlukan izin Identity and Access Management (IAM) tambahan, baik di database aplikasi Anda maupun di database metadata terpisah; lihat Membuat database metadata.

Langkah berikutnya