Panoramica delle modifiche in tempo reale

Un flusso di modifiche controlla ed emette quasi in tempo reale le modifiche ai dati (inserimenti, aggiornamenti ed eliminazioni) di un database Spanner.

Questa pagina offre una panoramica generale dei flussi di modifiche di Spanner: cosa fanno e come funzionano. Per scoprire come creare e gestire le modifiche in tempo reale nel database e connetterle ad altri servizi, segui i link in Passaggi successivi.

Scopo dei modifiche in tempo reale

Le modifiche in tempo reale offrono un modo flessibile e scalabile per trasmettere flussi di modifiche dei dati ad altri servizi. I casi d'uso comuni includono:

  • Replica delle modifiche ai dati di Spanner in un data warehouse, come BigQuery, per l'analisi.

  • Attivazione della logica dell'applicazione in base alle modifiche dei dati inviati a una coda di messaggi, come Pub/Sub.

  • Archiviazione delle modifiche ai dati in Cloud Storage per scopi di conformità o archiviazione.

Configurazione delle modifiche in tempo reale

Spanner considera le modifiche in tempo reale come oggetti dello schema, proprio come tabelle e indici. Pertanto, puoi creare, modificare ed eliminare i flussi di modifiche utilizzando le istruzioni DDL e puoi visualizzare i flussi di modifiche di un database proprio come gli altri oggetti dello schema gestiti da DDL.

Puoi configurare un flusso di modifiche per osservare le modifiche ai dati nell'intero database o limitarne l'ambito a tabelle e colonne specifiche. Un database può avere più modifiche in tempo reale e una determinata tabella o colonna può avere più flussi di dati che la guardano, entro i limiti.

Puoi anche configurare un flusso di modifiche per specificare un periodo di conservazione dei dati, un tipo di acquisizione valore, filtrando eliminazioni basate su TTL o filtro di modifiche delle tabelle.

L'emissione del DDL che crea un flusso di modifiche avvia un'operazione a lunga esecuzione. Una volta completato, il nuovo flusso di modifiche inizia immediatamente a esaminare le tabelle e le colonne assegnate.

Controllo implicito di tabelle e colonne

I flussi di modifiche che controllano un'intera tabella controllano in modo implicito tutte le colonne al suo interno, anche quando la definizione della tabella viene aggiornata. Ad esempio, quando aggiungi nuove colonne alla tabella, il flusso di modifiche inizia automaticamente a esaminare le nuove colonne, senza richiedere alcuna modifica alla configurazione di quel flusso di modifiche. Allo stesso modo, il flusso di modifiche interrompe automaticamente la visualizzazione delle colonne eliminate dalla tabella.

Le modifiche in tempo reale dell'intero database funzionano allo stesso modo. Monitorano implicitamente ogni colonna di ogni tabella, osservano automaticamente tutte le tabelle o colonne aggiunte dopo la creazione della modifica in tempo reale e smettono di controllare le tabelle e le colonne eliminate.

Controllo esplicito di tabelle e colonne

Se configuri una modifica in tempo reale per monitorare solo determinate colonne di una tabella e in seguito aggiungi colonne alla tabella, il flusso di modifiche non inizierà a controllare queste colonne a meno che non riconfiguri il flusso di modifiche in modo da farlo.

Lo schema del database tratta le modifiche in tempo reale come oggetti dipendenti di qualsiasi colonna o tabella che controlla esplicitamente. Prima di poter eliminare una colonna o una tabella di questo tipo, devi rimuoverla manualmente dalla configurazione di qualsiasi flusso di modifiche che la controlla in modo esplicito.

Tipi di modifiche ai dati che cambiano i flussi di dati

Le modifiche ai dati controllate da una modifica in tempo reale includono tutte le operazioni di inserimento, aggiornamento ed eliminazione apportate alle tabelle e alle colonne monitorate. Queste modifiche possono provenire da:

I flussi di modifiche possono osservare le modifiche ai dati solo in colonne e tabelle create dall'utente. Non controllano indici, viste, altri modifiche in tempo reale o tabelle di sistema come le tabelle delle statistiche o dello schema di informazioni. I flussi di modifiche non controllano le colonne generate a meno che la colonna non faccia parte della chiave primaria. Le colonne delle chiavi primarie vengono sempre tracciate.

Inoltre, modifiche in tempo reale non controllano le modifiche allo schema o qualsiasi modifica ai dati derivante direttamente da queste modifiche. Ad esempio, un flusso di modifiche che esamina un intero database non considera l'eliminazione di una tabella come una modifica ai dati, anche se questa azione rimuove tutti i dati della tabella dal database.

In che modo Spanner scrive e archivia le modifiche in tempo reale

Ogni volta che Spanner rileva una modifica ai dati in una colonna controllata da un flusso di modifiche, scrive un record delle modifiche dei dati nella sua archiviazione interna. Lo fa in modo sincrono con la modifica dei dati, all'interno della stessa transazione. Spanner co-posiziona entrambe queste scritture in modo che vengano elaborate dallo stesso server, riducendo al minimo l'elaborazione di scrittura.

Contenuto di un record delle modifiche dei dati

Ogni record delle modifiche ai dati scritto da un flusso di modifiche include le seguenti informazioni sulla modifica dei dati:

  • Il nome della tabella interessata

  • I nomi, i valori e i tipi di dati delle chiavi primarie che identificano la riga modificata

  • I nomi e i tipi di dati delle colonne della riga modificata che sono stati acquisiti in base alla definizione del flusso di modifiche.

  • I vecchi valori delle colonne della riga. La disponibilità dei vecchi valori e dei contenuti monitorati, che possono essere solo le colonne modificate o l'intera riga monitorata, dipendono dal tipo di acquisizione del valore configurato dall'utente.

  • I nuovi valori delle colonne della riga. La disponibilità dei nuovi valori e dei contenuti che monitorano dipendono dal tipo di acquisizione del valore configurato dall'utente.

  • Il tipo di modifica (inserimento, aggiornamento o eliminazione)

  • Timestamp del commit

  • L'ID transazione

  • Il numero di sequenza del record

  • Il tipo di acquisizione del valore del record di modifica dei dati.

Per un'analisi più approfondita della struttura dei record delle modifiche dei dati, consulta Record delle modifiche dei dati.

Conservazione dei dati

Un flusso di modifiche conserva i record delle modifiche dei dati per un periodo di tempo compreso tra uno e sette giorni. Puoi utilizzare DDL per specificare un limite di conservazione dei dati diverso dal valore predefinito di un giorno quando crei inizialmente un flusso di modifiche oppure per modificarlo in qualsiasi momento futuro. Tieni presente che la riduzione del limite di conservazione dei dati di un flusso di modifiche renderà tutti i dati storici delle modifiche precedenti al nuovo limite immediatamente e definitivamente non disponibili per i lettori di quel flusso di modifiche.

Questo periodo di conservazione dei dati presenta un compromesso: un periodo di conservazione più lungo comporta maggiori esigenze di archiviazione nel database del flusso.

Tipo di acquisizione valore

L'opzione di configurazione tipo di acquisizione del valore di una modifica in tempo reale controlla il modo in cui vengono archiviati i valori di una riga modificata. Puoi utilizzare DDL per specificare uno dei seguenti tipi di acquisizione valori per una modifica in tempo reale:

  • OLD_AND_NEW_VALUES: acquisisce i valori vecchi e nuovi delle colonne modificate di una riga.

  • NEW_VALUES: acquisisce solo i nuovi valori delle colonne non chiave, ma nessun valore precedente.

  • NEW_ROW: acquisisce tutti i nuovi valori delle colonne controllate, sia modificate che non modificate, ogni volta che una di queste colonne cambia. Non vengono acquisiti valori precedenti.

  • NEW_ROW_AND_OLD_VALUES: acquisisce tutti i nuovi valori per le colonne modificate e non modificate e i valori precedenti per le colonne modificate.

Escludi eliminazioni basate sulla durata (TTL)

In Spanner, Durata (TTL) ti consente di impostare criteri per eliminare periodicamente i dati dalle tabelle Spanner. Per impostazione predefinita, le modifiche in tempo reale includono tutte le eliminazioni basate su TTL. Puoi utilizzare exclude_ttl_deletes per impostare il flusso di modifiche in modo da escludere le eliminazioni basate su TTL. Quando imposti questo filtro in modo da escludere le eliminazioni basate su TTL, solo le eliminazioni future basate su TTL vengono escluse dal flusso di modifiche.

Il valore predefinito di questo filtro è false. Per escludere le eliminazioni basate su TTL, imposta il filtro su true. Puoi aggiungere il filtro quando crei un flusso di modifiche o modificare un flusso di modifiche esistente per includere il filtro.

Tipo di modifica della tabella

Per impostazione predefinita, le modifiche in tempo reale includono tutte le modifiche alle tabelle, come inserimenti, aggiornamenti ed eliminazioni. Puoi filtrare una o più di queste modifiche alla tabella dall'ambito del flusso di modifiche utilizzando le seguenti opzioni di filtro disponibili:

  • exclude_insert: escludi tutte le INSERT modifiche alla tabella
  • exclude_update: escludi tutte le UPDATE modifiche alla tabella
  • exclude_delete: escludi tutte le DELETE modifiche alla tabella

Il valore predefinito di questi filtri è false. Per escludere un tipo specifico di modifica della tabella, imposta il filtro su true. Puoi impostare uno o più filtri contemporaneamente.

Puoi aggiungere un filtro per un tipo di modifica della tabella quando crei un flusso di modifiche o modifica il filtro per un tipo di modifica della tabella per un flusso di modifiche esistente.

Lettura delle modifiche in tempo reale

Spanner offre diversi modi per leggere i dati di un flusso di modifiche:

  • Tramite Dataflow, utilizzando il connettore Apache Beam SpannerIO. Questa è la soluzione consigliata per la maggior parte delle applicazioni di modifiche in tempo reale. Google fornisce anche modelli Dataflow per casi d'uso comuni.

  • Direttamente, utilizzando l'API Spanner. Questo consente di tralasciare l'astrazione e le funzionalità delle pipeline Dataflow per ottenere la massima velocità e flessibilità.

  • Tramite l'uso del connettore Kafka basato su Debezium per le modifiche in tempo reale di Spanner. Questo connettore invia i flussi di modifiche ai record direttamente negli argomenti Kafka.

Puoi fornire l'isolamento parziale per le letture modifiche in tempo reale utilizzando le letture dirette. Le letture dirette possono aiutare a ridurre al minimo l'impatto sui carichi di lavoro transazionali nel tuo database. Puoi utilizzare l'API Spanner per instradare le letture dei flussi di modifiche a una regione o a un tipo di replica specifico all'interno di una configurazione di istanze multiregionali o una configurazione regionale personalizzata con regioni facoltative di sola lettura. Per maggiori informazioni, consulta la sezione Letture dirette.

Utilizzo di Dataflow

Utilizza il connettore SpannerIO Apache Beam per creare pipeline Dataflow che leggono dalle modifiche in tempo reale. Dopo aver configurato il connettore con i dettagli relativi a un determinato flusso di modifiche, genera automaticamente nuovi record delle modifiche ai dati in un singolo set di dati illimitato di PCollection, pronto per l'ulteriore elaborazione mediante trasformazioni successive nella pipeline di Dataflow.

Dataflow usa le funzioni di windowing per suddividere le raccolte illimitate in componenti logici, o finestre. Di conseguenza, Dataflow fornisce flussi di dati quasi in tempo reale per la lettura dai modifiche in tempo reale.

Google fornisce modelli che consentono di creare rapidamente pipeline di Dataflow per casi d'uso comuni di modifiche in tempo reale, tra cui l'invio di tutte le modifiche ai dati di un flusso a un set di dati BigQuery o la copia in un bucket Cloud Storage.

Per una panoramica più dettagliata sull'interazione tra modifiche in tempo reale e Dataflow, consulta Creare connessioni di modifiche in tempo reale con Dataflow.

Utilizzo dell'API

In alternativa all'utilizzo di Dataflow per creare pipeline di modifiche in tempo reale, puoi scrivere codice che utilizza l'API Spanner per leggere direttamente i record di un flusso di modifiche. Ciò consente di leggere i record delle modifiche ai dati nello stesso modo del connettore SpannerIO, scambiando l'astrazione che fornisce in cambio delle latenze più basse possibili durante la lettura dei dati delle modifiche in tempo reale.

Per saperne di più, consulta Stream delle modifiche alle query. Per una discussione più dettagliata su come eseguire query sui modifiche in tempo reale e interpretare i record restituiti, consulta Modifica di partizioni, record e query di flussi di dati.

Utilizzo del connettore Kafka

Il connettore Kafka restituisce direttamente i record di modifiche in tempo reale in un argomento Kafka. Astrae i dettagli dell'esecuzione di query sui modifiche in tempo reale utilizzando l'API Spanner.

Per saperne di più su come funzionano insieme le modifiche in tempo reale e il connettore Kafka, vedi Creare connessioni di modifiche in tempo reale con il connettore Kafka.

Limiti

Esistono diversi limiti per le modifiche in tempo reale, tra cui il numero massimo di flussi di modifiche che un database può avere e il numero massimo di flussi che possono controllare una singola colonna. Per un elenco completo, vedi Modificare i limiti degli stream.

Autorizzazioni

Le modifiche in tempo reale utilizzano quanto segue:

  • Per creare, aggiornare o eliminare le modifiche in tempo reale è necessario spanner.databases.updateDdl.

  • La lettura dei dati di un flusso di modifiche richiede spanner.databases.select.

Se utilizzi il connettore SpannerIO, il proprietario del job Dataflow che legge i dati delle modifiche in tempo reale richiede autorizzazioni IAM aggiuntive, sul database delle applicazioni o su un database di metadati separato. Vedi Creare un database di metadati.

Passaggi successivi