Topik ini menjelaskan cara kerja sinkronisasi data di Data Integration. Pemahaman terhadap proses ini membantu Anda mengevaluasi hasil tugas sinkronisasi, termasuk jumlah data yang disinkronkan dan jumlah catatan akhir di tujuan. Topik ini juga menguraikan skenario umum terkait Kualitas Data untuk membantu Anda mengidentifikasi dan menyelesaikan masalah tersebut.
Prinsip sinkronisasi
DataWorks Data Integration menggunakan pemrosesan paralel dan arsitektur berbasis plugin untuk mencapai sinkronisasi data yang efisien dan stabil.
Model eksekusi paralel (Job dan Task)
Untuk memaksimalkan throughput data, tugas sinkronisasi menerapkan struktur eksekusi dua tingkat:
Job: Instans yang sedang berjalan dari tugas sinkronisasi.
Task: Unit eksekusi terkecil dari sebuah Job. Sebuah Job dibagi menjadi beberapa Task yang dapat berjalan secara konkuren pada satu atau beberapa mesin.
Setiap Task memproses shard data yang independen. Mekanisme pemrosesan paralel ini secara signifikan meningkatkan efisiensi keseluruhan sinkronisasi data.
Aliran data berbasis plugin (Reader dan Writer)
Di dalam setiap Task, aliran data menghubungkan plugin Reader dan plugin Writer melalui buffer memori:
Plugin Reader: Terhubung ke penyimpanan data sumber, membaca data, dan mendorongnya ke buffer internal.
Plugin Writer: Mengonsumsi data dari buffer dan menuliskannya ke penyimpanan data tujuan.
Plugin Reader dan Writer mengikuti protokol baca/tulis asli serta batasan data dari sumber datanya masing-masing. Batasan ini dapat mencakup tipe data dan batasan kunci utama. Hasil sinkronisasi akhir dan perilaku konsistensi data bergantung pada aturan implementasi sumber dan tujuan data.
Pemecahan masalah konsistensi data di sisi writer
Plugin Writer di Data Integration menulis data dari sumber ke tujuan. Setiap jenis sumber data tujuan memiliki plugin Writer yang sesuai. Plugin Writer menggunakan mode tulis yang dikonfigurasi, termasuk kebijakan resolusi konflik, serta memanfaatkan Java Database Connectivity (JDBC) atau kit pengembangan perangkat lunak (SDK) sumber data untuk menulis data ke tujuan.
Hasil penulisan aktual dan konten data di tujuan bergantung pada mode tulis dan batasan tabel tujuan.
Jika Anda mengalami masalah Kualitas Data, seperti perbedaan jumlah catatan atau konten data, setelah tugas sinkronisasi selesai, tinjau skenario umum di sisi writer berikut:
Penyebab | Deskripsi | Solusi | |
Konfigurasi mode tulis yang tidak tepat | Plugin Writer menulis data sumber ke tujuan berdasarkan mode tulis yang dipilih. Jika terdapat konflik antara data sumber dan skema tabel tujuan karena batasan data, operasi tersebut dapat menghasilkan kegagalan insert (data kotor), insert yang diabaikan, atau insert yang diganti. | Pilih mode tulis yang sesuai dengan kebutuhan bisnis Anda. Untuk informasi selengkapnya, lihat Lampiran: Mode tulis untuk database relasional. | |
Ambang batas data kotor tercapai | Jumlah data kotor—yang dapat disebabkan oleh ketidakcocokan tipe data atau konten yang terlalu besar—melebihi ambang batas yang dikonfigurasi, sehingga menyebabkan tugas gagal dan sebagian data tidak ditulis ke tujuan. | Identifikasi penyebab data kotor dan selesaikan masalah tersebut. Atau, tingkatkan ambang batas jika Anda dapat mentolerir dan mengabaikan data kotor tersebut. Catatan Jika tugas Anda tidak dapat mentolerir data kotor, ubah ambang batas di . Untuk informasi selengkapnya tentang cara mengonfigurasi ambang batas data kotor, lihat Konfigurasi UI tanpa kode. Untuk informasi lebih lanjut mengenai definisi data kotor, lihat Istilah. | |
Menanyakan data terlalu dini | Anda menanyakan data sebelum tugas sinkronisasi selesai. Untuk beberapa sumber data, seperti Hive dan MaxCompute (dapat dikonfigurasi), data mungkin sebagian atau sepenuhnya tidak terlihat sebelum tugas selesai. | Selalu tanyakan dan verifikasi tabel tujuan setelah memastikan bahwa instans tugas sinkronisasi telah berhasil dijalankan. | |
Ketergantungan node yang hilang | Ketergantungan tidak dikonfigurasi antara tugas analisis downstream dan tugas sinkronisasi upstream, sehingga tugas downstream dimulai sebelum sinkronisasi data selesai dan membaca data yang tidak lengkap. | Di DataStudio, konfigurasikan ketergantungan parent-child node untuk tugas upstream dan downstream. Hindari penggunaan ketergantungan lemah seperti | |
Banyak tugas sinkronisasi menulis ke tabel atau partisi yang sama secara konkuren dan menyebabkan gangguan | Eksekusi konkuren tugas sinkronisasi yang tidak tepat.
|
| |
Tugas tidak dikonfigurasi untuk eksekusi idempoten | Tugas tidak dirancang agar idempoten, artinya eksekusi berulang menghasilkan hasil yang berbeda. Menjalankan ulang tugas dapat menyebabkan insert duplikat atau overwrite yang salah. | 1. Rancang tugas agar idempoten. Misalnya, gunakan mode | |
Ekspresi partisi salah | Misalnya, di MaxCompute, sebagian besar tabel data adalah tabel partisi. Nilai partisi merupakan parameter penjadwalan DataWorks seperti $bizdate. Kesalahan umum meliputi:
| Periksa ekspresi variabel dalam tugas sinkronisasi data. Pastikan konfigurasi parameter penjadwalan benar. Selain itu, verifikasi apakah parameter waktu proses dari instans tugas sesuai. | |
Ketidakcocokan tipe data atau zona waktu | Tipe data atau pengaturan zona waktu sumber dan tujuan tidak konsisten, yang dapat menyebabkan data terpotong atau dikonversi secara salah selama penulisan, atau menghasilkan perbedaan saat perbandingan data. |
| |
Data tujuan telah berubah | Jika aplikasi lain menulis ke sumber data tujuan secara konkuren, kontennya menjadi tidak konsisten dengan data sumber. | Pastikan tidak ada proses lain yang menulis ke tabel tujuan selama jendela sinkronisasi. Jika penulisan konkuren merupakan perilaku yang diharapkan, Anda harus menerima perbedaan data yang dihasilkan. | |
Lampiran: Mode tulis untuk database relasional
Jenis Protokol | Mode tulis | Perilaku (saat terjadi konflik data) | Perilaku (tidak ada konflik data) | Skenario utama |
Protokol Umum/MySQL |
| Gagal dan menghasilkan data kotor. | Menyisipkan data baru secara normal. | Append penuh atau inkremental. Anda tidak ingin menimpa atau memodifikasi data yang sudah ada. |
| Mengganti baris lama. Menghapus baris lama, lalu menyisipkan baris baru. | Menyisipkan data baru secara normal. | Skenario yang memerlukan penimpaan lengkap catatan lama dengan data terbaru. | |
| Memperbarui baris lama. Mempertahankan baris lama dan hanya memperbarui bidang tertentu dengan data baru. | Menyisipkan data baru secara normal. | Skenario yang memerlukan pembaruan beberapa bidang catatan sambil mempertahankan bidang lainnya, seperti waktu pembuatan. | |
| Mengabaikan baris baru. Tidak menulis atau melaporkan kesalahan. | Menyisipkan data baru secara normal. | Anda hanya ingin menyisipkan data baru dan tidak melakukan tindakan apa pun pada catatan yang sudah ada. | |
PostgreSQL |
| Mengabaikan baris baru. Tidak menulis atau melaporkan kesalahan. | Menyisipkan data baru secara normal. | Anda hanya ingin menyisipkan data baru dan tidak melakukan tindakan apa pun pada catatan yang sudah ada. |
| Memperbarui baris lama. Menggunakan data baru untuk memperbarui bidang tertentu di baris yang bertentangan. | Menyisipkan data baru secara normal. | Memperbarui beberapa bidang catatan sambil mempertahankan bidang lainnya, seperti waktu pembuatan. | |
| Membuang baris yang bertentangan. Menggunakan protokol | Menyisipkan data baru secara massal secara normal. | Menambahkan data dalam jumlah besar secara efisien, memungkinkan Anda melewati catatan duplikat yang sudah ada. | |
| Memperbarui baris yang bertentangan. Menggunakan protokol | Menyisipkan data baru secara massal secara normal. | Menyinkronkan data dalam jumlah besar secara efisien. Anda perlu menimpa catatan lama sepenuhnya dengan data terbaru. | |
- |
| Tidak didukung. | ||
Pemecahan masalah konsistensi data di sisi reader
Plugin Reader di Data Integration terhubung ke penyimpanan data sumber, mengekstraksi data yang akan disinkronkan, dan mengirimkannya ke plugin Writer. Setiap kelas penyimpanan memiliki plugin Reader yang sesuai. Plugin Reader menggunakan mode ekstraksi data yang dikonfigurasi—termasuk kondisi filter, tabel, partisi, dan kolom—serta memanfaatkan JDBC atau SDK sumber data untuk mengekstraksi data.
Hasil baca aktual bergantung pada mekanisme sinkronisasi data, perubahan pada data sumber, dan konfigurasi tugas.
Jika Anda mengalami masalah Kualitas Data, seperti perbedaan jumlah catatan atau konten data, setelah tugas sinkronisasi selesai, tinjau skenario umum di sisi reader berikut:
Masalah | Deskripsi | Solusi |
Perubahan konkuren pada data sumber |
| Terima perilaku ini sebagai hal normal untuk sinkronisasi data ber-throughput tinggi. Menjalankan tugas beberapa kali dapat menghasilkan hasil yang berbeda karena perubahan real-time pada data sumber. |
Kondisi kueri salah |
| Periksa ekspresi variabel penjadwalan tugas sinkronisasi data. Pastikan konfigurasi parameter penjadwalan sesuai harapan dan parameter diganti dengan nilai yang diharapkan selama penjadwalan. |
Data kotor di sisi reader | Penguraian gagal saat membaca data sumber. Hal ini jarang terjadi di database terstruktur. Namun, di sumber data semi-terstruktur seperti file CSV atau JSON di OSS atau Sistem File Terdistribusi Hadoop (HDFS), kesalahan format dapat mencegah sebagian data dibaca. |
|
Pemecahan masalah konteks lingkungan
Masalah | Solusi |
Pemilihan sumber data, tabel, atau partisi yang salah untuk kueri |
|
Output dependensi belum siap | Jika data dihasilkan secara berkala, misalnya, oleh tugas sinkronisasi data berulang atau tugas penggabungan data penuh/inkremental berulang, periksa bahwa tugas generasi data dependensi telah dijalankan dan selesai dengan sukses. |
Untuk pemecahan masalah umum saat mengalami masalah Kualitas Data, Anda dapat menjalankan tugas beberapa kali untuk mengamati dan membandingkan hasil sinkronisasi. Anda juga dapat mengganti sumber data atau tujuan untuk pengujian perbandingan. Menjalankan beberapa pengujian perbandingan dapat membantu mempersempit cakupan masalah.