Il change data capture aggiorna un indice locale della conoscenza convertendo le modifiche confermate alla fonte in eventi che i worker di indicizzazione a valle possono elaborare in modo incrementale.
Questo è importante quando una knowledge base domestica si basa su un database applicativo strutturato anziché soltanto su un watcher di cartelle. Note, record di inventario, metadati multimediali, segnalibri, cronologia della domotica o righe di cataloghi documentali possono cambiare continuamente. Rileggere l'intero database per individuare un solo record modificato spreca I/O e crea lunghi intervalli di obsolescenza. Il CDC segue invece il flusso di modifiche del database e fornisce all'indicizzatore una sequenza di mutazioni specifiche.
Il CDC legge un flusso di modifiche alla fonte invece di scansionare nuovamente ogni riga
Molti database registrano già le mutazioni confermate nei log delle transazioni, nei flussi di replica o in registri di modifiche ordinati equivalenti. I sistemi CDC si sottoscrivono a tale flusso e traducono le informazioni a basso livello del log in eventi di inserimento, aggiornamento ed eliminazione utilizzabili.
Il CDC basato sui log acquisisce direttamente le modifiche del database a livello di riga dal flusso di modifiche alla fonte, evitando il polling ripetuto dell'intera tabella solo per individuare un numero ridotto di mutazioni.
Questo è diverso da un watcher del filesystem. Un watcher osserva gli eventi del sistema operativo a livello di percorso, mentre il CDC osserva le mutazioni logiche della fonte all'interno di un database e può preservare l'ordine delle transazioni e l'identità dei record.
L'indice della conoscenza riceve una coda di lavoro molto più piccola: “il record 184 è cambiato” è più economico da elaborare rispetto a “scansiona 900.000 righe e confrontale di nuovo tutte”.
Ogni evento contiene l'identità necessaria per trovare i record derivati dell'indice
Un evento di aggiornamento è utile solo quando l'indicizzatore può collegare la riga sorgente modificata ai blocchi, ai campi di testo, ai record dei metadati o ai vettori precedentemente derivati da essa.
Una identità della replica determina quali informazioni identificative della riga sono disponibili per gli aggiornamenti e le eliminazioni replicate, offrendo ai consumer a valle un modo stabile per indirizzare i record derivati dell'indice.
Una pipeline di indicizzazione locale dovrebbe conservare una chiave sorgente stabile in ogni record derivato. In questo modo un `UPDATE` può recuperare e ricostruire solo la famiglia di documenti interessata, mentre un `DELETE` può individuare ogni vettore che deve diventare non idoneo. Senza un'identità stabile, il flusso di eventi può informare il sistema che qualcosa è cambiato, ma costringerlo comunque a eseguire una ricerca costosa per scoprire quali elementi indicizzati appartengono a quella fonte.
L'indicizzatore traduce le mutazioni del database in azioni per il livello di ricerca
Un evento CDC non contiene un embedding e non conosce la strategia di suddivisione in blocchi. È una notifica proveniente dal livello della fonte autorevole, non un'operazione vettoriale già pronta.
I record strutturati degli eventi di modifica separano la mutazione della fonte dalla logica di indicizzazione a valle, consentendo al consumer di decidere se un inserimento, un aggiornamento o un'eliminazione richieda analisi, generazione di embedding o dismissione.
Il worker di indicizzazione può associare un inserimento all'azione analizza-e-aggiungi, un aggiornamento all'azione confronta-e-ricostruisci e un'eliminazione all'azione contrassegna o rimuovi tutti i record di ricerca derivati dalla chiave sorgente.
L'hashing dei contenuti può essere inserito nel flusso di aggiornamento. Il CDC indica quale record sorgente è cambiato; il controllo dell'hash può quindi determinare se il testo utilizzato dal modello di embedding è effettivamente cambiato.
Offset e checkpoint consentono al consumer di riprendere dopo un riavvio
Un home server si riavvierà, i container verranno aggiornati e i worker di indicizzazione subiranno occasionalmente dei guasti. Se il consumer perde la propria posizione, può perdere alcune modifiche oppure ripetere una grande quantità di lavoro.
Gli offset persistenti della fonte consentono a un processo di acquisizione di riprendere da una posizione nota dopo un riavvio, invece di saltare silenziosamente le modifiche o ricominciare dall'inizio.
Il consumer dell'indice della conoscenza dovrebbe confermare il proprio checkpoint solo dopo che la mutazione dell'indice associata ha raggiunto uno stato duraturo. In caso contrario, un evento potrebbe essere riconosciuto prima che i relativi vettori o metadati siano stati effettivamente scritti. Anche la riproduzione di un evento dovrebbe essere sicura. Upsert basati su ID stabili, controlli di versione e gestione idempotente delle eliminazioni impediscono alla consegna duplicata di creare blocchi duplicati.
Il CDC riduce il ritardo di aggiornamento, ma non sostituisce la riconciliazione
Lo streaming basato sui log è efficace per le modifiche ordinate del database, ma errori di configurazione, limiti di conservazione, interruzioni dei connettori, modifiche allo schema o bug del consumer possono comunque creare lacune tra la fonte e l'indice.
Il rischio di eventi di modifica persi dimostra perché un flusso incrementale rapido dovrebbe essere comunque affiancato da una riconciliazione più lenta con lo stato autorevole della fonte.
La riconciliazione periodica può confrontare il numero di righe della fonte, le versioni, gli hash dei contenuti, i marcatori di eliminazione e gli ID indicizzati per riparare ciò che il flusso live ha perso.
Questo fornisce al sistema due scale temporali: il CDC mantiene aggiornate le modifiche ordinarie nel giro di secondi o minuti, mentre la riconciliazione offre una garanzia di completezza più lenta.
Elevati tassi di aggiornamento creano pressione a monte e a valle tra fonte e indice
Un database può confermare le modifiche più rapidamente di quanto OCR, suddivisione in blocchi, generazione di embedding o manutenzione dell'indice vettoriale riescano a elaborarle. La coda CDC diventa quindi un buffer tra l'attività della fonte e l'aggiornamento della ricerca.
Un log binario persistente degli eventi che modificano i dati fornisce una cronologia ordinata che un indicizzatore a valle più lento può elaborare dopo un'interruzione temporanea, entro i limiti del periodo di conservazione del sistema sorgente.
Raggruppa gli aggiornamenti ravvicinati allo stesso ID sorgente, assegna priorità alle eliminazioni e alle modifiche delle autorizzazioni e monitora il ritardo, non soltanto la lunghezza della coda. Mille eventi possono rappresentare mille documenti indipendenti oppure modifiche ripetute a un solo record. L'indice è aggiornato solo quando il consumer ha applicato gli eventi fino a una posizione nota della fonte e ha completato qualsiasi attività successiva di embedding o compattazione richiesta per quei record.
FAQ
Il change data capture è solo per i database SQL?
No. Il CDC è un modello generale per utilizzare le mutazioni della fonte. I log delle transazioni SQL sono comuni, ma altri sistemi espongono flussi di modifiche, log di commit, feed di eventi o record append-only con semantiche simili.
Le modifiche vengono perse ogni volta che il consumer dell'indicizzazione è offline?
Non necessariamente. Se la fonte conserva il log delle modifiche e il connettore mantiene il proprio offset, il consumer può riprendere e riprodurre gli arretrati. I limiti di conservazione restano importanti durante le interruzioni prolungate.
Il CDC può sostituire la riconciliazione completa periodica?
Di solito no. La riconciliazione resta utile per individuare eventi persi, bug di mappatura, record derivati obsoleti e modifiche alla fonte avvenute al di fuori del percorso di acquisizione.
Hub Tecnologico e AI
Altro da leggere

Stato di runtime vs stato persistente in Home Assistant: cosa deve sopravvivere al riavvio?
Home Assistant non conserva ogni valore in tempo reale; la configurazione, i registri, gli stati selezionati ripristinati, la cronologia e i dati di distribuzione...

Come autentica Home Assistant le sessioni locali e remote?
Le sessioni Home Assistant locali e remote utilizzano lo stesso modello di identità lato server; l'accesso remoto modifica il percorso e il confine TLS,...

Perché le query della cronologia di Home Assistant possono rallentare man mano che crescono i dati del Recorder?
La crescita del registratore può aumentare il costo delle query della cronologia quando l’intervallo richiesto coinvolge più righe, aumentano i cache miss o le...

