Ringkasan aliran perubahan

Aliran 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: fungsi dan cara kerjanya. Untuk mempelajari cara membuat dan mengelola aliran perubahan di database Anda serta menghubungkannya dengan layanan lain, ikuti link di Langkah Selanjutnya.

Tujuan aliran data perubahan

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

Mengubah konfigurasi aliran data

Spanner memperlakukan aliran perubahan sebagai objek skema, seperti tabel dan indeks. Oleh karena itu, Anda dapat membuat, mengubah, dan menghapus aliran perubahan menggunakan pernyataan DDL, dan Anda dapat melihat aliran perubahan database seperti objek skema yang dikelola 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 tertentu.

Anda dapat secara opsional mengonfigurasi aliran perubahan dengan hal berikut:

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

Memantau 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 modifikasi apa pun pada konfigurasi aliran perubahan tersebut. Demikian pula, aliran perubahan akan otomatis berhenti memantau kolom apa pun yang dihapus dari tabel tersebut.

Aliran perubahan seluruh database berfungsi dengan cara yang sama. Secara implisit, mereka 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.

Memantau tabel dan kolom secara eksplisit

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

Skema database memperlakukan aliran perubahan sebagai objek dependen dari kolom atau tabel yang secara eksplisit dipantau. Sebelum dapat menghapus kolom atau tabel tersebut, Anda harus menghapusnya secara manual dari konfigurasi setiap aliran perubahan yang secara eksplisit memantaunya.

Jenis perubahan data yang dipantau oleh aliran perubahan

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

Aliran perubahan hanya dapat memantau perubahan data di kolom dan tabel yang dibuat pengguna. Mereka tidak memantau indeks, tampilan, aliran perubahan lainnya, atau tabel sistem seperti skema informasi atau tabel statistik. Aliran perubahan tidak memantau kolom yang dibuat 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 perubahan

Setiap kali Spanner mendeteksi perubahan data dalam kolom yang dipantau oleh aliran perubahan, Spanner akan menulis catatan perubahan data ke penyimpanan internalnya. Penulisan perubahan data dan rekaman perubahan data 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.

Isi rekaman perubahan data

Setiap catatan perubahan data yang ditulis oleh aliran 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 diperoleh berdasarkan definisi aliran perubahan.

  • Nilai lama kolom baris. Ketersediaan nilai lama dan konten yang dilacak, yang dapat berupa hanya kolom yang diubah 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 modifikasi (penyisipan, update, atau penghapusan)

  • Stempel waktu commit

  • ID transaksi

  • Nomor urut rekaman

  • Jenis pengambilan nilai rekaman perubahan data.

Untuk melihat lebih dalam struktur rekaman perubahan data, lihat Rekaman perubahan data.

Retensi data

Aliran perubahan mempertahankan catatan perubahan datanya selama jangka waktu antara satu hingga tiga puluh 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 bagi pembaca aliran perubahan tersebut.

Periode retensi data ini memiliki kelebihan dan kekurangan; periode retensi yang lebih lama akan menimbulkan permintaan penyimpanan yang lebih besar pada database aliran.

Jenis pengambilan nilai

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

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

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

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

  • NEW_ROW_AND_OLD_VALUES: Mencatat 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 secara berkala dari tabel Spanner. Secara default, aliran perubahan mencakup semua penghapusan berbasis TTL. Anda dapat menggunakan exclude_ttl_deletes untuk menyetel aliran perubahan agar mengecualikan penghapusan berbasis TTL. Jika Anda menyetel filter ini untuk mengecualikan penghapusan berbasis TTL, hanya penghapusan berbasis TTL pada masa mendatang yang akan 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 modifikasi tabel

Secara default, aliran perubahan mencakup semua modifikasi tabel, seperti penyisipan, pembaruan, dan penghapusan. Anda dapat memfilter satu atau beberapa modifikasi tabel ini dari cakupan aliran perubahannya 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 perubahan atau mengubah filter untuk jenis modifikasi tabel untuk aliran perubahan yang ada.

Pengecualian catatan tingkat transaksi

Secara default, aliran perubahan memantau semua transaksi tulis dalam database karena opsi DDL allow_txn_exclusion ditetapkan ke false. Anda dapat menyetel opsi allow_txn_exclusion ke true untuk mengaktifkan aliran perubahan agar mengabaikan rekaman dari transaksi penulisan tertentu. Jika Anda tidak menyetel 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 perubahan atau mengubah aliran perubahan yang ada.

Mengecualikan transaksi penulisan dari aliran perubahan

Untuk mengecualikan transaksi tulis dari aliran perubahan, Anda harus menetapkan parameter exclude_txn_from_change_streams ke true. Parameter ini adalah bagian dari metode TransactionOptions dan BatchWriteRequest. 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 perubahan.

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

Untuk memantau perubahan aliran yang memodifikasi kolom yang dimodifikasi oleh transaksi, jika exclude_txn_from_change_streams disetel ke true, ada dua kemungkinan skenario:

  • Jika opsi DDL allow_txn_exclusion disetel ke true, maka pembaruan yang dilakukan dalam transaksi ini tidak dicatat dalam aliran perubahan.
  • Jika Anda tidak menyetel opsi DDL allow_txn_exclusion atau jika opsi tersebut disetel ke false, maka update yang dilakukan dalam transaksi ini akan dicatat dalam aliran perubahan.

Jika Anda tidak menyetel opsi exclude_txn_from_change_streams atau jika opsi tersebut disetel ke false, maka setiap kolom pemantauan aliran perubahan yang diubah oleh transaksi akan mencatat pembaruan yang dilakukan dalam transaksi tersebut.

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.

  • Secara langsung, menggunakan Spanner API. Hal ini mengorbankan abstraksi dan kemampuan pipeline Dataflow untuk kecepatan dan fleksibilitas maksimum.

  • Dengan menggunakan konektor Kafka berbasis Debezium untuk aliran perubahan Spanner. Konektor ini mengalirkan rekaman perubahan langsung ke topik Kafka.

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

Menggunakan Dataflow

Gunakan konektor Apache Beam SpannerIO untuk membangun pipeline Dataflow yang membaca dari aliran perubahan. Setelah mengonfigurasi konektor dengan detail tentang aliran perubahan tertentu, konektor akan otomatis menghasilkan rekaman perubahan data baru ke dalam satu set data PCollection yang tidak terikat, yang siap diproses lebih lanjut oleh transformasi berikutnya dalam pipeline Dataflow.

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

Google menyediakan template yang memungkinkan Anda membangun 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 Membangun koneksi aliran perubahan dengan Dataflow.

Menggunakan API

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

Untuk mempelajari lebih lanjut, lihat Mengkueri aliran perubahan. Untuk pembahasan yang lebih mendetail tentang cara membuat kueri aliran perubahan dan menafsirkan kumpulan data yang ditampilkan, lihat Partisi, kumpulan data, dan kueri aliran perubahan.

Menggunakan konektor Kafka

Konektor Kafka secara langsung menghasilkan rekaman aliran perubahan ke dalam topik Kafka. Library ini menyembunyikan detail kueri aliran perubahan menggunakan Spanner API.

Untuk mempelajari lebih lanjut cara kerja aliran perubahan dan konektor Kafka secara bersamaan, lihat Membangun 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 aliran yang dapat memantau satu kolom. Untuk mengetahui daftar lengkapnya, lihat Batasan aliran 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 berikutnya