20 apr 2025·8 min leestijd

Incrementele gegevenssynchronisatie met checkpoints: systemen veilig synchroniseren

Incrementele gegevenssynchronisatie met checkpoints helpt systemen uitgelijnd te houden met cursors, hashes en resume-tokens, zodat je veilig kunt hervatten zonder alles opnieuw te importeren.

Incrementele gegevenssynchronisatie met checkpoints: systemen veilig synchroniseren

Waarom volledige herimports steeds problemen geven

Volledige herimports voelen veilig omdat ze eenvoudig lijken: verwijderen, opnieuw laden, klaar. In de praktijk zijn ze juist een van de makkelijkste manieren om trage syncs, hogere kosten en rommelige data te veroorzaken.

Het eerste probleem is tijd en kosten. Het elke keer ophalen van de hele dataset betekent dat je dezelfde records steeds opnieuw downloadt. Als je bijvoorbeeld 500.000 klanten elke nacht synchroniseert, betaal je voor compute, API-calls en database-schrijfbewerkingen terwijl er misschien maar 200 records veranderden.

Het tweede probleem is correctheid. Volledige herimports veroorzaken vaak duplicaten (omdat matchingregels nooit perfect zijn), of ze overschrijven nieuwere wijzigingen met oudere data uit de export. Veel teams zien ook totalen na verloop van tijd wegdrijven omdat “verwijder en herlaad” halverwege stilzwijgend faalt.

Typische symptomen zien er zo uit:

  • Aantallen komen na een run niet overeen tussen systemen
  • Records verschijnen tweemaal met kleine verschillen (email-hoofdlettergebruik, telefoonformattering)
  • Recent bijgewerkte velden gaan terug naar een oudere waarde
  • De sync “klaar” lijkt te zijn maar een stuk data mist
  • Supporttickets schieten omhoog na elk importvenster

Een checkpoint is simpelweg een klein opgeslagen markeringspunt dat zegt: "Ik heb verwerkt tot hier." De volgende keer ga je verder vanaf dat punt in plaats van opnieuw te beginnen. Die marker kan een timestamp, een record-ID, een versienummer of een token van een API zijn.

Als je echte doel is om twee systemen op lange termijn uitgelijnd te houden, is incrementele gegevenssynchronisatie met checkpoints meestal de betere keuze. Het is vooral nuttig wanneer data vaak verandert, exports groot zijn, API's rate limits hebben, of je wilt dat de sync veilig kan hervatten na een crash (bijvoorbeeld wanneer een job halverwege faalt in een intern hulpmiddel dat je op een platform als AppMaster hebt gebouwd).

Definieer het sync-doel voordat je een methode kiest

Incrementele synchronisatie met checkpoints werkt alleen goed wanneer je duidelijk hebt wat “correct” betekent. Als je dit overslaat en meteen naar cursors of hashes springt, bouw je meestal later de sync opnieuw omdat de regels nooit opgeschreven zijn.

Begin met het benoemen van de systemen en bepaal wie de bron van waarheid is. Bijvoorbeeld: je CRM is de bron van waarheid voor klantnamen en telefoonnummers, terwijl je facturatie-tool de bron van waarheid is voor abonnementsstatus. Als beide systemen hetzelfde veld kunnen bewerken, heb je geen enkele bron van waarheid en moet je conflicten inplannen.

Definieer vervolgens wat “uitgelijnd” betekent. Heb je een exacte match op elk moment nodig, of is het prima als updates binnen een paar minuten zichtbaar zijn? Exacte match vereist vaak strengere ordering, sterkere garanties rond checkpoints en zorgvuldiger omgaan met deletes. Eventual consistency is meestal goedkoper en toleranter voor tijdelijke fouten.

Bepaal ook de richting van synchronisatie. Eenrichtingssync is eenvoudiger: Systeem A voedt Systeem B. Twee-wegsync is moeilijker omdat elke update een conflict kan zijn en je eindeloze lussen moet vermijden waarin elke zijde de ander blijft “corrigeren”.

Vragen om te beantwoorden voordat je bouwt

Schrijf eenvoudige regels op waar iedereen het over eens is:

  • Welk systeem is de bron van waarheid voor elk veld (of elk objecttype)?
  • Welke vertraging is acceptabel (seconden, minuten, uren)?
  • Is dit eenrichtings- of tweerichtingssync, en welke events vloeien in welke richting?
  • Hoe worden deletes afgehandeld (hard delete, soft delete, tombstones)?
  • Wat gebeurt er als beide zijden hetzelfde record hebben aangepast?

Een praktisch conflictschema kan zo simpel zijn als: “facturatie wint voor abonnementsvelden, CRM wint voor contactvelden, anders geldt 'newest update wins'.” Als je de integratie in een tool als AppMaster bouwt, leg deze regels vast in je Business Process-logica zodat ze zichtbaar en testbaar blijven, en niet in iemands geheugen weggestopt.

Cursors, hashes en resume-tokens: de bouwstenen

Incrementele synchronisatie met checkpoints vertrouwt meestal op één van drie “posities” die je veilig kunt opslaan en hergebruiken. De juiste keuze hangt af van wat het bronsysteem kan garanderen en welke fouten je moet overleven.

Een cursor-checkpoint is het eenvoudigst. Je slaat “het laatste dat ik verwerkt heb” op, zoals een laatste ID, een laatste updated_at timestamp of een sequentienummer. Bij de volgende run vraag je records op na dat punt. Dit werkt goed wanneer de bron consistent sorteert en IDs of timestamps betrouwbaar vooruitgaan. Het faalt wanneer updates laat aankomen, klokken verschillen of records “in het verleden” kunnen worden ingevoegd (bijvoorbeeld backfilled data).

Hashes helpen je veranderingen detecteren wanneer een cursor alleen niet genoeg is. Je kunt elk record hashen (op basis van de velden die je belangrijk vindt) en alleen synchroniseren wanneer de hash verandert. Of je hasht een hele batch om snel drift op te merken en zoomt daarna in. Per-record hashes zijn nauwkeurig maar voegen opslag en rekenwerk toe. Batch-hashes zijn goedkoper maar verbergen welk item veranderde.

Resume-tokens zijn ondoorzichtige waarden die de bron uitgeeft, vaak voor paginatie of event streams. Je interpreteert ze niet, je slaat ze gewoon op en geeft ze terug om door te gaan. Tokens zijn fijn wanneer de API complex is, maar ze kunnen verlopen, ongeldig worden na retentieruimtes of anders werken tussen omgevingen.

Wat te gebruiken, en wat kan misgaan

  • Cursor: snel en simpel, maar let op out-of-order updates.
  • Per-record hash: precieze wijzigingsdetectie, maar hogere kosten.
  • Batch-hash: goedkope drift-signalering, maar niet erg specifiek.
  • Resume-token: veilig voor paginatie, maar kan verlopen of slechts eenmalig bruikbaar zijn.
  • Hybride (cursor + hash): veelvoorkomend wanneer updated_at niet volledig betrouwbaar is.

Als je een sync in AppMaster bouwt, wonen deze checkpoints meestal in een kleine “sync state”-tabel, zodat elke run zonder gissing kan hervatten.

Het ontwerpen van je checkpoint-opslag

Checkpoint-opslag is het kleine onderdeel dat incrementele synchronisatie betrouwbaar maakt. Als het moeilijk te lezen is, gemakkelijk te overschrijven of niet aan een specifieke job gebonden is, ziet je sync er prima uit totdat het één keer faalt en je aan het gokken slaat.

Kies eerst waar checkpoints leven. Een databasetabel is meestal het veiligst omdat die transacties, auditing en eenvoudige queries ondersteunt. Een key-value store kan werken als je die al gebruikt en als die atomische updates ondersteunt. Een configbestand is alleen redelijk voor single-user, laag-risico syncs omdat het moeilijk te locken en makkelijk kwijt te raken is.

Wat je moet opslaan (en waarom)

Een checkpoint is meer dan een cursor. Sla genoeg context op om te debuggen, hervatten en drift te detecteren:

  • Jobidentiteit: jobnaam, tenant- of account-id, objecttype (bijv. customers)
  • Voortgang: cursorwaarde of resume-token, plus een cursor-type (tijd, id, token)
  • Gezondheidsindicatoren: laatste runtijd, status, gelezen en geschreven records
  • Veiligheid: laatste succesvolle cursor (niet alleen laatste poging), en een korte foutmelding voor de meest recente mislukking

Als je wijzigingsdetectie-hashes gebruikt, sla ook de hash-methodeversie op. Anders kun je later de hash veranderen en per ongeluk alles als “gewijzigd” behandelen.

Versionering en veel sync-jobs

Wanneer je datamodel verandert, versioneer je checkpoints. De eenvoudigste aanpak is een schema_version-veld toevoegen en nieuwe rijen maken voor een nieuwe versie in plaats van oude data te muteren. Houd oude rijen een tijdje om te kunnen terugrollen.

Voor meerdere sync-jobs namespace alles. Een goede sleutel is (tenant_id, integration_id, object_name, job_version). Dat voorkomt de klassieke bug waarbij twee jobs één cursor delen en stilletjes data overslaan.

Concreet voorbeeld: als je de sync als intern hulpmiddel in AppMaster bouwt, sla checkpoints op in PostgreSQL met één rij per tenant en object, en werk deze alleen bij na een succesvolle batchcommit.

Stap-voor-stap: implementeer een incrementele sync-loop

Begin met één schone sync
Prototypiseer eerst één dataset, hergebruik dan hetzelfde patroon voor objecten en tenants.
Start project

Een incrementele synchronisatie met checkpoints werkt het beste wanneer je loop saai en voorspelbaar is. Het doel is simpel: lees wijzigingen in een stabiele volgorde, schrijf ze veilig weg, en schuif het checkpoint alleen op wanneer je zeker weet dat de schrijf klaar is.

Een eenvoudige loop waarop je kunt vertrouwen

Kies eerst een ordening die voor hetzelfde record nooit verandert. Timestamps kunnen werken, maar alleen als je ook een tie-breaker opneemt (zoals een ID) zodat twee updates tegelijk niet van volgorde wisselen.

Voer de loop daarna als volgt uit:

  • Bepaal je cursor (bijv. last_updated + id) en paginagrootte.
  • Haal de volgende pagina records op die nieuwer zijn dan het opgeslagen checkpoint.
  • Upsert elk record in het doel (maak aan als het ontbreekt, werk bij als het aanwezig is) en registreer fouten.
  • Commit de succesvolle schrijfbewerkingen, en persist daarna het nieuwe checkpoint van het laatst verwerkte record.
  • Herhaal. Als de pagina leeg is, sleep even en probeer opnieuw.

Houd de checkpoint-update los van het fetchen. Als je het checkpoint te vroeg opslaat, kan een crash stilletjes data overslaan.

Backoff en retries zonder duplicaten

Ga ervan uit dat calls zullen falen. Als een fetch of write faalt, retry met korte backoff (bijv. 1s, 2s, 5s) en een maximum aantal retries. Maak retries veilig door upserts te gebruiken en door je schrijfbewerkingen idempotent te maken (zelfde input, hetzelfde resultaat).

Een klein praktisch voorbeeld: als je klantupdates elke minuut synchroniseert, kan je 200 veranderingen per keer ophalen, die upserten en pas daarna de last klant’s (updated_at, id) als nieuwe cursor opslaan.

Als je dit in AppMaster bouwt, kun je het checkpoint modelleren in een eenvoudige tabel (Data Designer) en de loop uitvoeren in een Business Process die ophalen, upserten en checkpoint-bijwerken in één gecontroleerde flow doet.

Maak hervattingen veilig: idempotentie en atomische checkpoints

Als je sync kan hervatten, gebeurt dat op het slechtst mogelijke moment: na een timeout, crash of gedeeltelijke deployment. Het doel is simpel: hetzelfde batch opnieuw draaien mag geen duplicaten maken of updates kwijtraken.

Idempotentie is het vangnet. Je bereikt het door te schrijven op een manier die herhaalbaar is zonder het eindresultaat te veranderen. In de praktijk betekent dat meestal upserts in plaats van inserts: schrijf het record met een stabiele sleutel (zoals customer_id) en werk bestaande rijen bij wanneer ze al bestaan.

Een goede “write key” is iets dat je over retries heen vertrouwt. Gebruik meestal een natuurlijke ID uit het bronsysteem, of een synthetische sleutel die je de eerste keer vastlegt. Ondersteun het met een unieke constraint zodat de database je regel afdwingt, zelfs wanneer twee workers tegelijk schrijven.

Atomische checkpoints zijn net zo belangrijk. Als je het checkpoint vooruit schuift voordat de data committed is, kan een crash ertoe leiden dat je records voorgoed overslaat. Behandel de checkpoint-update als onderdeel van dezelfde eenheid van werk als je schrijfbewerkingen.

Hier is een simpel patroon voor incrementele synchronisatie met checkpoints:

  • Lees wijzigingen sinds het laatste checkpoint (cursor of token).
  • Upsert elk record met een deduplicatiesleutel.
  • Commit de transactie.
  • Sla pas daarna het nieuwe checkpoint op.

Uit-of-volgorde updates en laat binnenkomende data zijn de andere valkuil. Een record kan op 10:01 zijn bijgewerkt maar later binnenkomen dan een record van 10:02, of een API kan oudere wijzigingen bij retries leveren. Bescherm jezelf door een bron-last_modified op te slaan en pas de regel "last write wins" toe: overschrijf alleen als het binnenkomende record nieuwer is dan wat je al hebt.

Als je sterkere bescherming nodig hebt, houd een kleine overlap-window aan (bijv. lees de laatste paar minuten opnieuw) en vertrouw op idempotente upserts om herhalingen te negeren. Dit vergt wat extra werk, maar het maakt hervattingen saai en voorspelbaar — precies wat je wilt.

In AppMaster vertaalt hetzelfde idee zich goed naar een Business Process-flow: voer eerst de upsert-logica uit, commit, en sla als laatste stap de cursor of resume-token op.

Veelgemaakte fouten die incrementele sync breken

Voeg monitoring toe die nuttig blijft
Maak een intern dashboard om cursorbeweging, fouten en drift-signalen te monitoren.
Bouw tool

De meeste sync-bugs gaan niet over code. Ze komen door een paar aannames die veilig lijken totdat echte data verschijnt. Als je wilt dat incrementele synchronisatie met checkpoints betrouwbaar blijft, let dan vroeg op deze valkuilen.

De gebruikelijke falingspunten

Een veelgemaakte fout is te veel vertrouwen op updated_at. Sommige systemen herschrijven timestamps tijdens backfills, timezone-fixes, bulk-edits of zelfs read-repairs. Als je cursor alleen een timestamp is, kun je records missen (timestamp gaat achteruit) of enorme reprocesses veroorzaken (timestamp schiet vooruit).

Een andere valkuil is aannemen dat IDs continu of strikt toenemend zijn. Imports, sharding, UUIDs en verwijderde rijen breken die gedachte. Als je “laatst geziene ID” als checkpoint gebruikt, kunnen gaps en out-of-order writes records overslaan.

De schadelijkste bug is het checkpoint bijwerken bij gedeeltelijk succes. Bijvoorbeeld: je haalt 1.000 records, schrijft er 700, crasht, maar slaat toch de "volgende cursor" van de fetch op. Bij hervatten worden de resterende 300 nooit opnieuw geprobeerd.

Deletes zijn ook makkelijk te negeren. Een bron kan soft-delete (flag), hard-delete (rij verwijderd) of “unpublish” (statusverandering) gebruiken. Als je alleen actieve records upsert, loopt het doel langzaam uit de pas.

Tenslotte kunnen schemawijzigingen oude hashes ongeldig maken. Als je wijzigingsdetectie-hashes op een set velden waren gebaseerd, kan het toevoegen of hernoemen van een veld “geen wijziging” doen lijken alsof er wél een wijziging is (of andersom) tenzij je je hash-logica versioneert.

Hier zijn veiligere standaarden:

  • Geef de voorkeur aan een monotone cursor (event ID, logpositie) boven ruwe timestamps wanneer mogelijk.
  • Behandel checkpoint-writes als hetzelfde succesgrensvlak als je data-writes.
  • Volg deletes expliciet (tombstones, status-transities of periodieke reconciliatie).
  • Versioneer je hash-inputs en houd oude versies leesbaar.
  • Voeg een kleine overlap-window toe (lees de laatste N items opnieuw) als de bron updates kan herschikken.

Als je dit in AppMaster bouwt, modelleer het checkpoint als een eigen tabel in de Data Designer en houd de stap “schrijf data + schrijf checkpoint” samen in één Business Process-run, zodat retries geen werk overslaan.

Monitoring en drift-detectie zonder lawaai

Krijg meldingen voordat gebruikers dat doen
Stuur foutmeldingen naar e-mail, SMS of Telegram voordat gebruikers het merken als een checkpoint vastloopt.
Stel meldingen in

Goede monitoring voor incrementele synchronisatie met checkpoints gaat minder over “meer logs” en meer over een paar getallen waarop je elke run kunt vertrouwen. Als je kunt beantwoorden "wat hebben we verwerkt, hoe lang duurde het, en waar hervatten we?", kun je de meeste problemen in minuten debuggen.

Begin met het schrijven van één compact run-record elke keer dat de sync draait. Houd het consistent zodat je runs kunt vergelijken en trends kunt zien.

  • Start-cursor (of resume-token) en end-cursor
  • Records opgehaald, records geschreven, records overgeslagen
  • Run-duur en gemiddelde tijd per record (of per pagina)
  • Aantal fouten met de belangrijkste foutreden
  • Checkpoint-write status (succes/fout)

Drift-detectie is de volgende laag: het vertelt je wanneer systemen "allebei werken" maar langzaam uit elkaar drijven. Totalen alleen kunnen misleidend zijn, dus combineer een lichte total-check met kleine steekproeven. Bijvoorbeeld: vergelijk eenmaal per dag het aantal actieve klanten in beide systemen en controleer vervolgens willekeurig 20 klant-ID's op een paar velden (status, updated_at, email). Als totalen verschillen maar steekproeven overeenkomen, mis je waarschijnlijk deletes of filters. Als steekproeven verschillen, is je wijzigingsdetectie-hash of veldmapping waarschijnlijk fout.

Alerts moeten zeldzaam en actiegericht zijn. Een eenvoudige regel: alleen alarmeren wanneer een mens nu moet ingrijpen.

  • Cursor vast (end-cursor beweegt niet voor N runs)
  • Foutenpercentage stijgt (bijv. 1% -> 5% over een uur)
  • Runs worden langzamer (duur boven je normale limiet)
  • Achterstand groeit (nieuwe wijzigingen komen sneller binnen dan je synct)
  • Drift bevestigd (totalen mismatch twee keer achter elkaar)

Na een fout kun je opnieuw draaien zonder handmatige schoonmaak door veilig te replayen. De makkelijkste aanpak is hervatten vanaf het laatst gecommitte checkpoint, niet het laatst “gezien” record. Als je een kleine overlap-window gebruikt (lees de laatste pagina opnieuw), maak je schrijfbewerkingen idempotent: upsert op stabiele ID en schuif het checkpoint alleen op nadat de schrijf slaagt. In AppMaster implementeren teams deze checks vaak in een Business Process-flow en sturen alerts via e-mail/SMS of Telegram-modules zodat fouten zichtbaar zijn zonder constant dashboard-kijken.

Snelle checklist voordat je live gaat

Voordat je een incrementele synchronisatie met checkpoints in productie zet, loop kort deze details na die meestal voor late verrassingen zorgen. Deze checks kosten minuten maar voorkomen dagen van “waarom hebben we records gemist?” debuggen.

Hier is een praktische pre-ship checklist:

  • Zorg dat het veld dat je voor ordering gebruikt (timestamp, sequence, ID) echt stabiel is en een index heeft aan de bronzijde. Als het achteraf kan veranderen, zal je cursor afdwalen.
  • Bevestig dat je upsert-sleutel gegarandeerd uniek is en dat beide systemen het hetzelfde behandelen (hoofdlettergevoeligheid, trimmen, formattering). Als het ene systeem "ABC" opslaat en het andere "abc", krijg je duplicaten.
  • Sla checkpoints apart op voor elke job en elke dataset. Een "globale laatste cursor" klinkt simpel, maar faalt zodra je twee tabellen, twee tenants of twee filters sync't.
  • Als de bron eventual consistent is, voeg een kleine overlap-window toe. Bijvoorbeeld: wanneer je hervat vanaf "last_updated = 10:00:00", begin opnieuw vanaf 09:59:30 en vertrouw op idempotente upserts om herhalingen te negeren.
  • Plan een lichte reconciliatie: voer periodiek een steekproef (bijv. 100 willekeurige records) uit en vergelijk sleutelvelden om stille drift op te sporen.

Een realiteitstest: pauzeer de sync halverwege een run, start opnieuw en controleer of je met dezelfde resultaten eindigt. Als herstarten aantallen verandert of extra rijen maakt, los dat op voordat je live gaat.

Als je de sync in AppMaster bouwt, koppel checkpoint-data aan het specifieke proces en dataset van de integratiestroom, niet gedeeld over ongerelateerde automatiseringen.

Voorbeeld: klantrecords synchroniseren tussen twee apps

Stop met volledige herimports
Bouw een incrementele sync met een checkpoint-tabel en hervat veilig na fouten.
Probeer nu

Stel je een eenvoudige opzet voor: je CRM is de bron van waarheid voor contacten en je wilt dezelfde personen in een supporttool (zodat tickets aan echte klanten gekoppeld zijn) of in een klantenportal (zodat gebruikers kunnen inloggen en hun account zien).

Bij de eerste run doe je een eenmalige import. Haal contacten op in een stabiele volgorde, bijvoorbeeld per updated_at plus id als tiebreaker. Nadat je elke batch naar de bestemming hebt geschreven, sla je een checkpoint op zoals: last_updated_at en last_id. Dat checkpoint is je startlijn voor alle toekomstige runs.

Voor lopende runs haal je alleen records op die nieuwer zijn dan het checkpoint. Updates zijn rechttoe rechtaan: als de CRM-contact al bestaat, werk je het doelrecord bij; zo niet, maak je het aan. Merges zijn lastiger. CRM's mergen vaak duplicaten en houden één “winnende” contact over. Behandel dat als een update die ook het verliezende contact "retireert" door het inactief te markeren (of te wijzen naar de winnaar) zodat je niet twee portalgebruikers voor dezelfde persoon krijgt.

Deletes verschijnen zelden in normale "updated since" queries, dus plan er rekening mee. Gebruik een soft-delete-flag in de bron, een aparte "verwijderde contacten" feed, of een periodieke lichte reconciliatie die ontbrekende IDs controleert.

Het uitvalsscenario: de sync crasht halverwege. Als je alleen een checkpoint aan het einde opslaat, verwerk je bij herstart een groot deel opnieuw. Gebruik in plaats daarvan een resume-token per batch.

  • Start een run en genereer een run_id (je resume-token)
  • Verwerk een batch, schrijf de wijzigingen naar de bestemming en sla dan atomair het checkpoint op gekoppeld aan run_id
  • Bij herstart detecteer je het laatst opgeslagen checkpoint voor dat run_id en ga je daar verder

Succes ziet er saai uit: aantallen blijven stabiel dag na dag, runtimes zijn voorspelbaar en het opnieuw draaien van hetzelfde venster levert geen onverwachte veranderingen op.

Volgende stappen: kies een patroon en bouw met minder herkansingen

Als je eerste incrementele loop werkt, is de snelste manier om herkansingen te vermijden het opschrijven van de regels van de sync. Hou het kort: welke records vallen binnen scope, welke velden winnen bij conflicten en wat betekent "klaar" na elke run.

Begin klein. Kies één dataset (zoals customers) en draai die end-to-end: initial import, incrementele updates, deletes en hervatting na een opzettelijke fout. Het is makkelijker aannames nu te corrigeren dan nadat je vijf tabellen extra hebt toegevoegd.

Een volledige herbouw is soms nog steeds de juiste keuze. Doe het wanneer de checkpoint-state corrupt is, wanneer je identifiers verandert, of wanneer een schemawijziging je wijzigingsdetectie kapotmaakt (bijv. je gebruikte een hash en de betekenis van velden veranderde). Als je herbouwt, behandel het als een gecontroleerde operatie, niet als een noodknop.

Een veilige manier om te reimporteren zonder downtime:

  • Importeer in een shadow-tabel of parallelle dataset en laat de huidige live
  • Valideer aantallen en steekproeven, inclusief randgevallen (nulls, gemergde records)
  • Backfill relaties en schakel vervolgens in één geplande cutover de lezers naar de nieuwe dataset
  • Bewaar de oude dataset voor een korte rollback-periode en ruim daarna op

Als je dit zonder code wilt bouwen, kan AppMaster je helpen alles op één plek te houden: modelleer de data in PostgreSQL met de Data Designer, definieer de sync-regels in de Business Process Editor, en draai geplande jobs die records ophalen, transformeren en upserten. Omdat AppMaster schone code regenereert wanneer eisen veranderen, maakt dat ook het toevoegen van één extra veld minder risicovol.

Voordat je naar meer datasets uitbreidt, documenteer je sync-contract, kies één patroon (cursor, resume-token of hash) en zorg dat één sync volledig betrouwbaar is. Herhaal vervolgens dezelfde structuur voor de volgende dataset. Als je het snel wilt proberen, maak een applicatie in AppMaster en draai eerst een kleine geplande sync-job.

Gemakkelijk te starten
Maak iets geweldigs

Experimenteer met AppMaster met gratis abonnement.
Als je er klaar voor bent, kun je het juiste abonnement kiezen.

Aan de slag
Incrementele gegevenssynchronisatie met checkpoints: systemen veilig synchroniseren | AppMaster