Aliran perubahan memantau dan mengalirkan perubahan data pada database Spanner—penyisipan, pembaruan, dan penghapusan—hampir secara real-time.
Halaman ini menawarkan ringkasan umum tentang aliran data perubahan Spanner: apa yang dilakukannya, dan cara kerjanya. Untuk mempelajari cara membuat dan mengelola aliran perubahan di database Anda serta menghubungkannya dengan layanan lain, ikuti link Langkah Berikutnya.
Tujuan aliran perubahan
Aliran data perubahan menyediakan cara yang fleksibel dan skalabel untuk mengalirkan 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 streaming
Spanner memperlakukan aliran data perubahan sebagai objek skema, seperti tabel dan indeks. Dengan demikian, Anda dapat membuat, mengubah, dan menghapus aliran data perubahan menggunakan pernyataan DDL, dan dapat melihat aliran data perubahan database seperti objek skema lain yang dikelola oleh DDL.
Anda dapat mengonfigurasi aliran data perubahan untuk mengamati perubahan data di seluruh database, atau membatasi cakupannya hanya ke tabel dan kolom tertentu. Database dapat memiliki beberapa aliran perubahan, dan tabel atau kolom tertentu dapat memiliki beberapa aliran data yang menontonnya, dalam batas.
Anda juga dapat mengonfigurasi aliran data perubahan untuk menentukan periode retensi data, jenis pengambilan nilai, filter penghapusan berbasis TTL, atau filter modifikasi tabel.
Menerbitkan DDL yang membuat aliran perubahan akan memulai operasi yang berjalan lama. Setelah selesai, aliran data perubahan baru akan segera mulai mengamati tabel dan kolom yang ditetapkan untuknya.
Memantau tabel dan kolom secara implisit
Ubah aliran data yang memantau seluruh tabel secara implisit menonton 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 mengamati kolom baru tersebut, tanpa memerlukan perubahan apa pun pada konfigurasi aliran data perubahan tersebut. Demikian pula, aliran data perubahan secara otomatis berhenti mengamati kolom yang dihapus dari tabel tersebut.
Aliran data perubahan di seluruh {i>database<i} bekerja dengan cara yang sama. Secara implisit, LLM secara implisit mengamati setiap kolom di setiap tabel, otomatis mengamati setiap tabel atau kolom yang ditambahkan setelah pembuatan aliran perubahan, dan berhenti melihat tabel atau kolom apa pun yang dihapus.
Memantau tabel dan kolom secara eksplisit
Jika Anda mengonfigurasi aliran data perubahan agar hanya mengamati kolom tertentu dalam tabel, lalu menambahkan kolom ke tabel tersebut, aliran data perubahan tidak akan mulai memantau kolom tersebut, kecuali Anda mengonfigurasi ulang aliran data perubahan tersebut untuk melakukannya.
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 perubahan apa pun yang mengamatinya secara eksplisit.
Jenis perubahan data yang mengubah streaming yang ditonton
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 bertingkat di tabel turunan berselang
Penghapusan yang dihasilkan dari aturan waktu aktif
Aliran data perubahan hanya dapat melihat perubahan data di kolom dan tabel yang dibuat pengguna. Alat ini 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 langsung dihasilkan dari perubahan skema. Misalnya, aliran data perubahan yang mengamati seluruh database tidak akan memperlakukan penghapusan tabel sebagai perubahan data, meskipun tindakan ini akan menghapus semua data tabel tersebut dari database.
Cara Spanner menulis dan menyimpan aliran data perubahan
Setiap kali mendeteksi perubahan data di kolom yang dipantau oleh aliran perubahan, Spanner akan menulis data perubahan data ke penyimpanan internalnya. Hal ini dilakukan secara sinkron dengan perubahan data tersebut, dalam transaksi yang sama. Spanner menempatkan kedua penulisan ini bersama-sama sehingga diproses oleh server yang sama, sehingga meminimalkan pemrosesan tulis.
Konten catatan perubahan data
Setiap kumpulan data perubahan data yang ditulis oleh aliran data perubahan menyertakan informasi berikut tentang perubahan data:
Nama tabel yang terpengaruh
Nama, nilai, dan jenis data dari kunci utama yang mengidentifikasi baris yang diubah
Nama dan jenis data kolom baris yang diubah dan 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 perubahan (menyisipkan, memperbarui, atau menghapus)
Stempel waktu commit
ID transaksi
Nomor urut kumpulan data
Jenis pengambilan nilai dari kumpulan data perubahan data.
Untuk mempelajari lebih dalam struktur catatan perubahan data, lihat Data perubahan data.
Retensi data
Aliran perubahan menyimpan catatan perubahan datanya selama jangka waktu antara satu hingga tujuh hari. Anda dapat menggunakan DDL untuk menentukan batas retensi data selain batas default satu hari saat pertama kali membuat aliran data perubahan, atau menyesuaikannya di lain waktu. Perlu diperhatikan bahwa mengurangi batas retensi data aliran data perubahan akan membuat semua data perubahan historis yang lebih lama dari batas baru akan langsung dan tidak tersedia secara permanen bagi pembaca aliran data perubahan tersebut.
Periode retensi data ini menghadirkan konsekuensi; periode retensi data yang lebih lama memberikan permintaan penyimpanan yang lebih besar pada database aliran data.
Jenis tangkapan nilai
Opsi konfigurasi jenis pengambilan nilai aliran data perubahan mengontrol caranya 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 dari kolom yang diubah dalam baris.NEW_VALUES
: Hanya mengambil nilai baru dari kolom non-kunci, tetapi tanpa nilai lama.NEW_ROW
: Mengambil semua nilai baru dari 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
: Mengambil semua nilai baru untuk kolom yang diubah dan tidak diubah, serta nilai lama untuk kolom yang diubah.
Mengecualikan waktu penghapusan berbasis live
Di Spanner, Time to live (TTL) memungkinkan Anda
menetapkan kebijakan untuk menghapus data dari tabel Spanner secara berkala.
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 berikutnya yang akan dikecualikan dari aliran perubahan.
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 data perubahan menyertakan semua modifikasi tabel, seperti penyisipan, pembaruan, dan penghapusan. Anda dapat memfilter satu atau beberapa modifikasi tabel ini dari cakupan aliran 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 mengatur satu atau
lebih filter secara bersamaan.
Anda dapat menambahkan filter untuk jenis perubahan tabel saat membuat aliran data perubahan atau mengubah filter untuk jenis perubahan tabel untuk aliran perubahan yang ada.
Membaca aliran 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 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 mengalirkan kumpulan data secara langsung ke topik Kafka.
Anda dapat menyediakan isolasi parsial untuk pembacaan aliran perubahan menggunakan perintah baca. Pembacaan terarah dapat membantu meminimalkan dampak pada workload transaksional dalam database Anda. Anda dapat menggunakan Spanner API untuk merutekan aliran data perubahan yang dibaca ke jenis atau region replika tertentu dalam konfigurasi instance multi-region atau konfigurasi regional kustom dengan region hanya baca opsional. Untuk informasi selengkapnya, lihat bacaan 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 perubahan tertentu, konektor akan otomatis menghasilkan kumpulan data perubahan data baru ke dalam satu set data PCollection
yang tidak terbatas, yang siap untuk diproses lebih lanjut dengan transformasi berikutnya dalam pipeline Dataflow.
Dataflow menggunakan fungsi windowing untuk membagi koleksi tak terbatas menjadi komponen logis, atau jendela. Hasilnya, Dataflow menyediakan streaming yang mendekati real-time, dengan latensi sekitar enam detik saat membaca dari aliran data perubahan.
Google menyediakan template yang memungkinkan Anda dengan cepat membangun pipeline Dataflow untuk kasus penggunaan aliran data perubahan umum, termasuk mengirim semua perubahan data aliran data ke set data BigQuery, atau menyalinnya ke bucket Cloud Storage.
Untuk ringkasan yang lebih mendetail tentang cara kerja sama aliran data perubahan dan Dataflow, lihat Membangun koneksi aliran data perubahan dengan Dataflow.
Menggunakan API
Sebagai alternatif penggunaan Dataflow untuk mem-build pipeline aliran data perubahan, Anda dapat menulis kode yang menggunakan Spanner API untuk membaca data aliran data perubahan secara langsung. Hal ini memungkinkan Anda membaca kumpulan perubahan data dengan cara yang sama seperti yang dilakukan konektor Spanner, yang mengorbankan abstraksi yang disediakannya dengan imbalan latensi serendah mungkin saat membaca data aliran perubahan.
Untuk mempelajari lebih lanjut, lihat Aliran data perubahan kueri. Untuk diskusi yang lebih detail tentang cara membuat kueri stream perubahan dan menafsirkan data yang ditampilkan, lihat Mengubah partisi, data, dan kueri stream.
Menggunakan konektor Kafka
Konektor Kafka secara langsung menghasilkan output perubahan data streaming menjadi topik Kafka. Fitur ini mengabstraksi detail aliran data perubahan yang dikueri menggunakan Spanner API.
Untuk mempelajari lebih lanjut cara aliran data perubahan dan konektor Kafka saling bersinergi, lihat Membuat koneksi aliran data perubahan dengan konektor Kafka.
Batas
Ada beberapa batasan aliran perubahan, termasuk jumlah maksimum aliran perubahan yang dapat dimiliki database, dan jumlah maksimum aliran yang dapat memantau satu kolom. Untuk daftar lengkapnya, lihat Mengubah batas aliran data.
Izin
Aliran data perubahan menggunakan hal berikut:
Membuat, memperbarui, atau menghapus aliran data perubahan memerlukan
spanner.databases.updateDdl
.Membaca data aliran perubahan memerlukan
spanner.databases.select
.
Jika Anda menggunakan konektor SpannerIO, pemilik tugas Dataflow yang membaca data aliran data perubahan memerlukan izin IAM tambahan, baik di database aplikasi Anda maupun di database metadata terpisah. Baca artikel Membuat database metadata.
Langkah selanjutnya
Pelajari sintaksis DDL untuk membuat dan mengelola aliran data perubahan.
Gunakan aliran data dan template perubahan untuk mereplikasi perubahan dari Spanner ke BigQuery atau ke Cloud Storage.
Pelajari lebih lanjut cara membangun pipeline Dataflow untuk memproses data aliran data perubahan.
Pelajari lebih lanjut detail aliran data perubahan, termasuk detail selengkapnya tentang arsitektur aliran perubahan, cara membuat kueri aliran data perubahan menggunakan API dan menafsirkan data yang ditampilkan.
Pelajari lebih lanjut cara menggunakan konektor Kafka untuk memproses data aliran perubahan.