Comparisons
Pairs that get conflated in real conversations. Neither column wins — what decides is the requirement, and each record leads with the confusion, because the confusion is the reason the record exists at all.
OLTP vs OLAPBatch vs StreamingETL vs ELTParquet vs AvroLake vs Warehouse vs LakehouseCDC vs PollingEvent modelling vs Snapshot modellingFull refresh vs IncrementalLambda vs KappaOrder grain vs Order-line grain
CDC vs Polling
What people get wrong about this pair
Polling is treated as the simple version of the same thing. It is a weaker guarantee: it cannot see deletes, it cannot see intermediate states, and its predicate depends on a clock that is not monotonic under concurrency.
Change data capture
Use it when
You need every change including deletes, you must not load the source table, and you control the database enough to read its log.
Polling on a timestamp
Use it when
The source is a system you do not control, you have no log access, and missing intermediate states is acceptable.
| Dimension | Change data capture | Polling on a timestamp |
|---|---|---|
| Deletes | Captured | Structurally invisible — the row is gone |
| Intermediate states | Every committed change | Only the last state before the poll |
| Load on the source | Reads a log the database already writes | A repeated query against the table |
| Correctness risk | Retention expiry, ordering across tables | Rows committing after their timestamp was assigned, and clock skew |
| Access required | Replication or log-read privileges | Ordinary SELECT |
| Failure mode | Permanent loss past retention | Silent, unbounded gaps nobody notices |