Saya tidak menggunakan FME, tetapi saya memiliki tugas pemrosesan serupa yang mengharuskan penggunaan output dari pekerjaan pemrosesan 5 jam untuk mengidentifikasi tiga kasus pemrosesan yang mungkin untuk database paralel di tautan jaringan bandwidth rendah:
- Fitur baru yang akan ditambahkan
- Fitur yang ada diperbarui
- Exisitng fitur yang akan dihapus
Karena saya memang memiliki jaminan bahwa semua fitur akan mempertahankan nilai ID unik di antara lintasan, saya dapat:
- Jalankan skrip pemrosesan yang menghasilkan tabel pasangan {uID, checksum} di seluruh kolom penting dalam tabel yang diperbarui
- Menggunakan pasangan {uID, checksum} yang dihasilkan dalam iterasi sebelumnya untuk mengirimkan pembaruan ke tabel target dengan baris di tabel yang diperbarui di mana uID berada di subquery di mana checksum tidak cocok
- Mengirimkan sisipan dari tabel yang diperbarui yang diindikasikan subquery gabungan luar memiliki UID yang tidak cocok, dan
- Menransmisikan daftar uID untuk menghapus fitur di tabel eksternal yang ditunjukkan subquery gabungan luar tidak lagi memiliki uID yang cocok di tabel saat ini
- Simpan pasangan {uID, checksum} saat ini untuk operasi hari berikutnya
Pada database eksternal, saya hanya perlu memasukkan fitur baru, memperbarui delta, mengisi tabel sementara dari UID yang dihapus, dan menghapus fitur-fitur DI dalam tabel hapus.
Saya dapat mengotomatiskan proses ini untuk menyebarkan ratusan perubahan harian ke tabel baris 10-juta dengan dampak minimal ke tabel produksi, menggunakan runtime harian kurang dari 20 menit. Itu berjalan dengan biaya administrasi minimum selama beberapa tahun tanpa kehilangan sinkronisasi.
Meskipun tentu saja mungkin untuk melakukan perbandingan N di seluruh baris M, menggunakan digest / checksum adalah cara yang sangat menarik untuk menyelesaikan tes "ada" dengan biaya yang jauh lebih rendah.