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:
- Tentukan periode retensi data untuk menggantikan periode retensi data default selama satu hari.
- Tentukan jenis pengambilan nilai untuk menggantikan
jenis pengambilan nilai default
OLD_AND_NEW_VALUES
. - Terapkan filter penghapusan berbasis TTL untuk mengecualikan penghapusan berbasis TTL dari aliran perubahan Anda.
- Terapkan filter modifikasi tabel untuk mengecualikan semua modifikasi tabel
INSERT
,UPDATE
, atauDELETE
. - Aktifkan pengecualian rekaman tingkat transaksi untuk mengecualikan transaksi tertentu dari aliran perubahan Anda.
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:
Cascading delete pada tabel turunan berselang-seling
Penghapusan yang dihasilkan dari aturan time to live
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 tabelINSERT
exclude_update
: mengecualikan semua modifikasi tabelUPDATE
exclude_delete
: mengecualikan semua modifikasi tabelDELETE
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 ketrue
, 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 kefalse
, 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
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 membangun 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.