Jika sumbernya hanya sisipkan, beri IDENTITY
kolom saja. Ketika Anda melakukan transfer data, Anda mencatat nilai tertinggi yang dituliskan. Selama transfer berikutnya Anda hanya perlu meminta nilai yang lebih besar dari yang dicatat selama transfer sebelumnya. Kami melakukan ini untuk mentransfer catatan log ke data warehouse.
Untuk baris yang dapat diupdate tambahkan bendera "kotor". Ini akan memiliki tiga nilai - bersih, kotor dan dihapus. Kueri sehari-hari harus menghilangkan baris dengan bendera diatur ke "dihapus". Ini akan mahal dalam perawatan, pengujian, dan waktu pengoperasian. Setelah kueri besar yang Anda sebutkan, semua baris yang ditandai untuk dihapus harus dihapus dan flag direset untuk yang lainnya. Ini tidak akan skala dengan baik.
Alternatif yang lebih ringan untuk Ubah Pengambilan Data adalah Ubah Pelacakan . Ini tidak akan memberi tahu Anda nilai apa yang berubah, hanya saja baris telah berubah sejak terakhir kali ditanya. Fungsi bawaan memfasilitasi pengambilan nilai yang berubah dan pengelolaan pelacakan. Kami telah berhasil menggunakan CT untuk memproses sekitar 100.000 perubahan per hari dalam tabel 100.000.000 baris.
Notifikasi Permintaan bertindak pada tuas yang lebih tinggi lagi - pada tingkat set hasil. Secara konseptual, ini seperti mendefinisikan pandangan. Jika SQL Server mendeteksi bahwa setiap baris yang dikembalikan melalui tampilan itu telah berubah, itu akan mengirimkan pesan ke aplikasi. Tidak ada indikasi berapa banyak baris berubah, atau kolom mana. Hanya ada pesan sederhana yang mengatakan "sesuatu yang terjadi." Terserah aplikasi untuk bertanya dan bereaksi. Praktis itu jauh lebih kompleks dari itu, seperti yang Anda bayangkan. Ada batasan tentang bagaimana kueri dapat didefinisikan dan pemberitahuan dapat diaktifkan untuk kondisi selain data yang diubah. Ketika pemberitahuan menyala itu dihapus. Jika aktivitas menarik selanjutnya terjadi maka tidak ada pesan lebih lanjut yang akan dikirim.
Dalam konteks pertanyaan OP, QN akan memiliki keuntungan sebagai biaya overhead yang rendah untuk diatur dan sedikit biaya run time. Ini mungkin merupakan upaya yang signifikan untuk membangun dan mempertahankan rezim reaksi berlangganan pesan yang keras. Karena tabel data besar, kemungkinan akan ada perubahan yang sering terjadi, artinya notifikasi cenderung menyala di sebagian besar siklus pemrosesan. Karena tidak ada indikasi perubahan pemrosesan delta yang berubah tidak akan mungkin terjadi, seperti halnya dengan CT atau CDC. Overhead karena pemicu salah adalah hal yang melelahkan, tetapi bahkan dalam kasus terburuk kueri mahal tidak perlu dijalankan lebih sering daripada saat ini.