Kaynak sistemdeki her değişikliği ambara taşımak istiyorsun, ama her gece tüm tabloyu kopyalamak pahalı. CDC (change data capture) yalnız değişen satırları yakalar.
İki yol
| Yol | Nasıl | Kaçırdığı ya da bedeli |
|---|---|---|
| Sorgulayarak (polling) | WHERE updated_at > :watermark ile değişenleri çeker | Fiziksel silmeleri görmez; aynı satırın iki değişimi arasındaki ara hâli kaçırır; updated_at güncellenmiyorsa hiçbir şey görmez |
| Günlükten (log-based) | Veritabanının işlem günlüğünü okur: PostgreSQL mantıksal çoğaltma (wal_level = logical), MySQL binlog, SQL Server CDC (sys.sp_cdc_enable_table). Debezium gibi araçlar bunları olay akışına çevirir | Silmeler dahil her değişikliği sırayla görür; ama kurulum ve yetki ister, günlük saklama süresi dolarsa olay kaybolur |
Olayları hedefe uygulamak
Bir değişiklik olayı en az şunları taşır: anahtar, işlem türü (ekleme, güncelleme, silme), yeni değerler, sıra bilgisi. Üç kural:
- Sıra: Aynı anahtarın olayları sırayla uygulanır, yoksa eski değer yeniyi ezer.
- Tekrar: Çoğu boru hattı “en az bir kez” teslim eder. Uygulama idempotent olmalı: aynı olay iki kez gelse de sonuç değişmemeli (
MERGE, sıra numarası kontrolü). - Sıkıştırma: Toplu uygularken anahtar başına yalnız son olay yeter.
WITH s AS (
SELECT product_id, new_price, updated_at,
ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY updated_at DESC) AS sira
FROM price_updates
)
SELECT product_id, new_price, updated_at
FROM s
WHERE sira = 1;
ZamanlamaBu işleri Airflow gibi bir orkestrasyon aracı sıraya koyar: bağımlılık, yeniden deneme ve izleme onun işidir. SQL tarafında senin sorumluluğun, bir adım iki kez çalışsa da sonucu bozmayan sorgu yazmaktır. Toplu yüklemede watermark: Artımlı yükleme dersi.