Change data capture (CDC) is een techniek die een database in de gaten houdt en elke toevoeging, wijziging en verwijdering vastlegt op het moment dat die gebeurt, om die daarna door te geven aan andere systemen. In plaats van een hele tabel keer op keer te kopiëren, verplaatst het alleen wat er echt veranderd is.

Stel je een druk magazijn voor met een logboek bij de deur. In plaats van elke avond alles in de schappen te tellen, lees je gewoon het logboek van wat er die dag in en uit ging. CDC leest het eigen wijzigingslogboek van de database op dezelfde manier, en daarom kan het een datawarehouse bijna realtime bijwerken zonder het live systeem te belasten. Het staat vaak aan het begin van een datapijplijn en voert verse wijzigingen naar alles wat erachter ligt.

De meeste tools doen dit door het transactielogboek te volgen, het bestand dat de database toch al bijhoudt om elke wijziging te volgen. Debezium met Postgres of MySQL is een veelgebruikte open-source keuze, en veel beheerde databases bieden zelf een logfeed. Omdat het een bestand leest dat de database sowieso bijhoudt, voegt CDC bijna geen extra querylast toe, en dat is zijn grote voordeel boven het op een timer afvragen van de tabellen.

Dit telt vooral als twee systemen het snel eens moeten zijn, bijvoorbeeld een webshop en zijn voorraaddashboard. Er zit meestal een kleine vertraging voordat elke kopie overeenkomt, een normaal verschijnsel dat eventual consistency heet. Voor de meeste bedrijven is een paar seconden achterstand prima, en veel beter dan wachten op een nachtelijke batch. De afweging is operationeel: een CDC-stroom is een bewegend onderdeel dat bewaking nodig heeft, en een gemiste gebeurtenis kan twee systemen stilletjes uit elkaar laten lopen.

Bij TopDevs grijpen we naar CDC als een klant wil dat zijn rapportage of zoekfunctie laat zien wat een paar minuten geleden gebeurde, niet wat er gisteren was.