Panoramica dei flussi di modifiche

Un flusso di modifiche monitora e trasmette in streaming le modifiche ai dati (inserimenti, aggiornamenti ed eliminazioni) di un database Spanner quasi in tempo reale.

Questa pagina offre una panoramica generale della modifica a Spanner stream: cosa fanno e come funzionano. Per scoprire come creare e gestire gli stream di variazioni nel database e collegarli ad altri servizi, segui i link in Passaggi successivi.

Scopo dei flussi di modifiche

I flussi di modifiche offrono un modo flessibile e scalabile per trasmettere in streaming le modifiche ai dati ad altri servizi. I casi d'uso comuni includono:

  • Replicare le 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 inviate a una coda di messaggi, ad esempio Pub/Sub.

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

Configurazione delle modifiche in tempo reale

Spanner tratta le modifiche in tempo reale come oggetti dello schema, come tabelle e indici. Di conseguenza, crei, modifichi ed elimini le modifiche utilizza istruzioni DDL e puoi visualizzare lo script modifiche in tempo reale proprio come gli altri schemi gestiti da DDL di oggetti strutturati.

Puoi configurare uno stream di modifiche per monitorare le modifiche ai dati in un intero database o limitarne l'ambito a tabelle e colonne specifiche. Un database può avere più stream di variazioni e una determinata tabella o colonna può essere monitorata da più stream, entro i limiti.

Puoi anche configurare uno stream di modifiche per specificare un periodo di conservazione dei dati, tipo di acquisizione dei valori, filtro per le eliminazioni basate su TTL o filtro per le modifiche alla tabella.

L'emissione del comando DDL che crea un flusso di modifiche avvia un'operazione a lunga esecuzione. Al termine, il nuovo flusso di modifiche inizia immediatamente a monitorare le tabelle e le colonne assegnate.

Controllo implicito di tabelle e colonne

I flussi di modifiche che guardano un'intera tabella osservano implicitamente tutti i colonne della tabella, anche quando la definizione della tabella viene aggiornata. Per Ad esempio, quando aggiungi nuove colonne alla tabella, le modifiche inizia automaticamente a osservare le nuove colonne, senza alla configurazione del flusso di modifiche. Analogamente, le modifiche in tempo reale interrompono automaticamente la visualizzazione delle colonne perse dalla tabella.

Le modifiche in tempo reale dell'intero database funzionano allo stesso modo. Guardano implicitamente ogni colonna in ogni tabella, monitorando automaticamente qualsiasi tabella le colonne aggiunte dopo la creazione del flusso di modifiche e la visualizzazione eventuali tabelle o colonne eliminate.

Monitorare esplicitamente tabelle e colonne

Se configuri una modifica in tempo reale per monitorare solo determinate colonne in un tabella e successivamente aggiungi colonne alla tabella, le modifiche in tempo reale iniziare a controllare queste colonne a meno che non riconfiguri la modifica stream per farlo.

Lo schema del database tratta gli stream di modifiche come oggetti dipendenti di qualsiasi colonna o tabella che monitorano esplicitamente. Prima di poter eliminare una colonna o una tabella di questo tipo, devi rimuoverla manualmente dalla configurazione di qualsiasi stream di modifiche che la monitora esplicitamente.

Tipi di modifiche ai dati monitorati dai flussi di modifiche

Le modifiche ai dati monitorate da un flusso di modifiche includono tutti gli inserimenti, aggiorna ed elimina le tabelle e le colonne che controlla. Queste variazioni possono essere dovute a:

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

Inoltre, i modifiche in tempo reale non controllano le modifiche allo schema o alcun dato derivanti direttamente dalle modifiche allo schema. Ad esempio, un flusso di modifiche che monitora un intero database non considererebbe l'eliminazione di una tabella come una modifica dei dati, anche se questa azione rimuove tutti i dati della tabella dal database.

Come Spanner scrive e memorizza i flussi di modifiche

Ogni volta che Spanner rileva una modifica dei dati in una colonna monitorata da un flusso di modifiche, scrive un record di modifica dei dati nel proprio spazio di archiviazione interno. Le modifiche ai dati in scrittura e il record delle modifiche ai dati vengono scritti all'interno dello stesso transazione. Spanner co-posiziona entrambe le scritture in modo che vengano elaborati dallo stesso server, riducendo al minimo l'elaborazione di scrittura. La transazione viene poi replicata nelle repliche del database, con i relativi costi di archiviazione e replica. Per ulteriori informazioni, consulta i prezzi di Spanner.

Contenuti di un record di modifica dei dati

Ogni record di modifica dei 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 principali che identificano la riga modificata

  • I nomi e i tipi di dati delle colonne della riga modificata che sono state acquisite in base alla definizione delle modifiche in tempo reale.

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

  • I nuovi valori delle colonne della riga. La disponibilità dei nuovi valori e i 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 variazione 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 determinato periodo di tempo tra uno e sette giorni. Puoi utilizzare DDL per: specificare un limite di conservazione dei dati diverso dal valore predefinito di un giorno quando creare inizialmente un flusso di modifiche o modificarlo in qualsiasi momento. Tieni presente che la riduzione del limite di conservazione dei dati di un flusso di modifiche rende immediatamente e definitivamente non disponibili per i lettori del flusso tutti i dati delle modifiche storici precedenti al nuovo limite.

Questo periodo di conservazione dei dati presenta un compromesso: un periodo di conservazione più lungo comporta maggiori richieste di spazio di archiviazione per il database dello stream.

Tipo di acquisizione valore

L'opzione di configurazione del tipo di acquisizione dei valori di uno stream di modifiche controlla il modo in cui vengono memorizzati i valori di una riga modificata. Puoi utilizzare DDL per specificare uno dei seguenti tipi di acquisizione valori per le modifiche 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 non i valori vecchi.

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

  • NEW_ROW_AND_OLD_VALUES: acquisisce tutti i nuovi valori sia per le colonne modificate sia per quelle non modificate, nonché i valori precedenti per le colonne modificate.

Escludere le eliminazioni in base alla durata

In Spanner, Durata (TTL) ti consente di e 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 sono 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 variazioni o modificare un flusso di variazioni esistente in modo da includere il filtro.

Tipo di modifica della tabella

Per impostazione predefinita, le modifiche in tempo reale includono tutte le modifiche apportate alle tabelle, come inserimenti, aggiornamenti ed eliminazioni. Puoi filtrare una o più di queste modifiche alla tabella dall'ambito del tuo stream di variazioni 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 modifiche alla tabella DELETE

Il valore predefinito per 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 variazioni o modificare il filtro per un tipo di modifica della tabella per un flusso di variazioni esistente.

Lettura dei flussi di modifiche

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 stream di modifiche. Google fornisce anche modelli Dataflow per i casi d'uso più comuni.

  • Direttamente, utilizzando l'API Spanner. In questo modo, l'astrazione e le funzionalità delle pipeline Dataflow per velocità e flessibilità.

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

Puoi fornire un isolamento parziale per le letture dei flussi di variazioni utilizzando le letture dirette. Le letture dirette possono aiutare a ridurre al minimo l'impatto sui carichi di lavoro transazionali in del database. Puoi utilizzare l'API Spanner per eseguire la modifica del routing trasmette i flussi di letture a un tipo di replica o a una regione specifici all'interno di più regioni configurazione dell'istanza o una configurazione regionale personalizzata con regioni di sola lettura. Per ulteriori informazioni, consulta le letture dirette.

Utilizzo di Dataflow

Utilizza il connettore SpannerIO Apache Beam per creare pipeline Dataflow che leggono dai modifiche in tempo reale. Dopo il giorno devi configurare il connettore con dettagli per un determinato flusso di modifiche, genera automaticamente nuovi dati modifica i record in un'unica PCollection pronto per un'ulteriore elaborazione mediante trasformazioni successive nel Dataflow.

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

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

Per una panoramica più dettagliata su come modifiche in tempo reale e Dataflow lavorare insieme, vedi Creare connessioni di modifiche in tempo reale con Dataflow.

Utilizzo dell'API

In alternativa all'utilizzo di Dataflow per creare un flusso di modifiche pipeline, puoi scrivere codice che utilizza l'API Spanner per leggere direttamente i record di un flusso di modifiche. In questo modo puoi leggere i record delle modifiche ai dati nello stesso modo in cui il connettore SpannerIO, scambiando l'astrazione che fornisce con le latenze più basse possibili durante la lettura delle modifiche in tempo reale e i dati di Google Cloud.

Per saperne di più, consulta Stream di modifiche delle query. Per una discussione più dettagliata su come eseguire query sui flussi di modifiche e interpretare i record restituiti, consulta Partizioni, record e query dei flussi di modifiche.

Utilizzo del connettore Kafka

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

Per scoprire di più sul funzionamento dei flussi di modifiche e del connettore Kafka, consulta Creare connessioni con i flussi di modifiche tramite il connettore Kafka.

Limiti

Esistono diversi limiti per i flussi di modifiche, tra cui il numero massimo di flussi di modifiche che un database può avere e il numero massimo di stream che possono monitorare una singola colonna. Per un elenco completo, consulta Modificare i limiti dei stream.

Autorizzazioni

Gli stream di variazioni utilizzano quanto segue:

  • La creazione, l'aggiornamento o l'eliminazione degli stream di variazioni richiedespanner.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 dello stream di modifiche richiede autorizzazioni IAM aggiuntive sul database dell'applicazione o su un database di metadati separato. Consulta Creare un database di metadati.

Passaggi successivi