Incremental vs. Full Sync: Five Change-Capture Methods and How to Choose
The Essential Trade-off
Full sync pulls everything each run: simple logic and self-healing (a bad run is corrected by the next full pull), at the cost of heavy resource usage and poor timeliness. Incremental sync pulls only changes: light and near-real-time, but any missed change persists silently until the next full run exposes it. The standard engineering answer is therefore not either/or: increments for daily operation, periodic full syncs as the reconciliation safety net.
Five Change-Capture Methods
1. Timestamps (modified time). Pull where "last modified > watermark". The simplest method, supported by most SaaS APIs. Weaknesses: clock drift causes misses; pagination across records sharing the same second is error-prone; and deletes produce no modification time, so they are never captured. Mitigate by overlapping the watermark 5–10 minutes and deduplicating by primary key.
2. Auto-increment ID / sequence. Advance a watermark over an auto-increment key. Reliably captures inserts but never updates — an old record's ID doesn't change when it is edited. Fit for append-only data (flows, logs), not for master data.
3. Log-based CDC. Subscribe to the database's transaction log (MySQL binlog, PostgreSQL WAL). Captures inserts, updates and deletes with zero application intrusion, but requires database-level privileges and operational maturity — which a SaaS vendor will never grant. Applicable only between systems you own.
4. Triggers. Database triggers write changes into a queue table that the sync process reads. Captures all DML, but is intrusive: trigger failures drag down business transactions, performance suffers on hot tables, and DBAs generally object. A last resort.
5. Message subscriptions / webhooks. The source pushes business events as they happen. Best timeliness and real business semantics ("order shipped", not "row changed"). Weaknesses: pushes can be lost (network, consumer downtime), so a scheduled incremental fallback is mandatory; duplicates happen, so consumers must be idempotent.
Comparison
| Method | Deletes | Updates | Intrusiveness | Latency | Fit |
|---|---|---|---|---|---|
| Timestamp | ✗ | ✓ | None | Minutes | SaaS API pulls |
| Auto-increment ID | ✗ | ✗ | None | Minutes | Append-only flows |
| Log CDC | ✓ | ✓ | Low (to app) | Seconds | Owned databases |
| Trigger | ✓ | ✓ | High | Seconds | Last resort |
| Webhook | Event-dependent | Event-dependent | None | Real-time | Webhook-capable systems |
Engineering Essentials
Persist the watermark so restarts resume from the checkpoint; overlap time-based windows and deduplicate by key — reprocessing is cheap, missing is not; run a periodic full reconciliation with difference alerts as the last line of defense; and design for deletes explicitly, preferring soft deletes so sync links only handle status changes.