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 di alto livello degli stream di modifiche di Spanner: cosa fanno e come funzionano. Per scoprire come creare e gestire modifiche in tempo reale nel database e collegarli ad altri servizi, segui i link in Passaggi successivi.
Scopo dei modifiche in tempo reale
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 del flusso di modifiche
Spanner tratta modifiche in tempo reale come oggetti dello schema, come tabelle e indici. Di conseguenza, puoi creare, modificare ed eliminare i flussi di modifiche utilizzando le istruzioni DDL e visualizzare i flussi di modifiche di un database come gli altri oggetti dello schema gestiti da DDL.
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ù modifiche in tempo reale e una determinata tabella o colonna può essere monitorata da più stream, entro i limiti.
Puoi anche configurare uno stream di variazioni per specificare un periodo di conservazione dei dati, un tipo di rilevamento dei valori, filtrare le eliminazioni basate su TTL o filtrare 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.
Monitoraggio implicito di tabelle e colonne
Gli stream di variazioni che monitorano un'intera tabella monitorano implicitamente tutte le colonne della tabella, anche quando la definizione della tabella viene aggiornata. Ad esempio, quando aggiungi nuove colonne alla tabella, il flusso di modifiche inizia automaticamente a monitorarle, senza richiedere alcuna modifica alla configurazione del flusso di modifiche. Analogamente, lo stream delle modifiche interrompe automaticamente la sorveglianza di eventuali colonne eliminate dalla tabella.
Modifiche in tempo reale dell'intero database funzionano allo stesso modo. Monitorano implicitamente ogni colonna di ogni tabella, monitorano automaticamente le tabelle o le colonne aggiunte dopo la creazione del flusso di modifiche e smettono di monitorare le tabelle o le colonne eliminate.
Monitoraggio esplicito di tabelle e colonne
Se configuri un flusso di modifiche per monitorare solo determinate colonne di una tabella e in un secondo momento aggiungi colonne a quella tabella, il flusso di modifiche non inizierà a monitorare queste colonne, a meno che non lo riconfiguri.
Lo schema del database tratta gli modifiche in tempo reale 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 modifiche in tempo reale
Le modifiche ai dati monitorate da un flusso di modifiche includono tutti gli inserimenti, gli aggiornamenti ed eliminazioni apportati alle tabelle e alle colonne monitorate. Queste variazioni possono essere dovute a:
Eliminazioni a cascata nelle tabelle figlie con interfoliazione
Eliminazioni risultanti dalle regole TTL
Gli stream delle modifiche possono monitorare le modifiche ai dati solo nelle colonne e nelle tabelle create dall'utente. Non monitorano indici, viste, altri modifiche in tempo reale o tabelle di sistema come lo schema delle informazioni o le tabelle delle statistiche. Gli stream di modifiche non monitorano le colonne generate, a meno che la colonna non faccia parte della chiave primaria. Le colonne della chiave primaria vengono sempre monitorate.
Inoltre, i modifiche in tempo reale non monitorano le modifiche dello schema o eventuali modifiche ai dati derivanti direttamente dalle modifiche dello schema, ad eccezione dei backfill per i valori predefiniti. Ad esempio, un flusso di modifiche che monitora un intero database non considera e registra l'eliminazione di una tabella come una modifica dei dati, anche se questa azione elimina tutti i dati della tabella dal database.
Come Spanner scrive e memorizza modifiche in tempo reale
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. La scrittura della modifica dei dati e il record della modifica dei dati vengono scritti nella stessa transazione. Spanner colloca entrambe le scritture in modo che vengano elaborate dallo stesso server, riducendo al minimo l'elaborazione delle scritture. La transazione viene poi replicata nelle repliche del database, con i relativi costi di archiviazione e replica. Per ulteriori informazioni, consulta la sezione 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 acquisiti in base alla definizione dello stream 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, dipende dal tipo di acquisizione dei valori configurato dall'utente.
I nuovi valori delle colonne della riga. La disponibilità dei nuovi valori e dei contenuti monitorati dipende dal tipo di acquisizione dei valori configurato dall'utente.
Il tipo di modifica (inserimento, aggiornamento o eliminazione)
Il 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 di variazione dei dati, consulta Record di variazione dei dati.
Conservazione dei dati
Un flusso di modifiche conserva i record delle modifiche ai dati per un periodo di tempo compreso tra uno e sette giorni. Puoi utilizzare DDL per specificare un limite di conservazione dei dati diverso da quello predefinito di un giorno quando crei inizialmente un flusso di modifiche o per modificarlo in qualsiasi momento in futuro. 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 dei valori per un flusso di variazioni:
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 antichi.NEW_ROW
: acquisisce tutti i nuovi valori delle colonne monitorate, 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 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, TTL (Time to Live) ti consente di impostare criteri per eliminare periodicamente i dati dalle tabelle Spanner.
Per impostazione predefinita, i 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 impostate questo filtro per escludere le eliminazioni basate su TTL, solo le eliminazioni future basate su TTL vengono escluse dallo stream delle 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, i 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 tuo stream di variazioni utilizzando le seguenti opzioni di filtro disponibili:
exclude_insert
: escludi tutte le modifiche alla tabellaINSERT
exclude_update
: escludi tutte le modifiche alla tabellaUPDATE
exclude_delete
: escludi tutte le modifiche alla tabellaDELETE
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 modifiche in tempo reale
Spanner offre diversi modi per leggere i dati di uno stream 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, si rinuncia all'astrazione e alle funzionalità delle pipeline Dataflow in cambio di massima velocità e flessibilità.
Tramite l'utilizzo 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 modifiche in tempo reale utilizzando le letture dirette. Le letture dirette possono contribuire a ridurre al minimo l'impatto sui carichi di lavoro transazionali nel tuo database. Puoi utilizzare l'API Spanner per instradare le letture degli stream delle modifiche a un tipo di replica o a una regione specifica all'interno di una configurazione di istanze multi-regione o di una configurazione regionale personalizzata con regioni facoltative di sola lettura. Per ulteriori informazioni, consulta le letture dirette.
Utilizzo di Dataflow
Utilizza il connettore Apache Beam SpannerIO per creare pipeline Dataflow che leggono dalle modifiche in tempo reale. Dopo aver configurato il connettore con i dettagli di un determinato flusso di modifiche, vengono generati automaticamente nuovi record di modifica dei dati in un singolo set di dati PCollection
illimitato, pronto per un'ulteriore elaborazione tramite le trasformazioni successive nella pipeline Dataflow.
Dataflow utilizza le funzioni di applicazione di finestre per suddividere le raccolte illimitate in componenti logici o finestre. Di conseguenza, Dataflow fornisce un flusso in quasi tempo reale quando legge da 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 dei dati di uno stream a un set di dati BigQuery o la loro copia in un bucket Cloud Storage.
Per una panoramica più dettagliata del funzionamento combinato dei modifiche in tempo reale e di Dataflow, consulta Creare connessioni con modifiche in tempo reale con Dataflow.
Utilizzo dell'API
In alternativa all'utilizzo di Dataflow per creare pipeline di stream di modifiche, puoi scrivere codice che utilizzi l'API Spanner per leggere direttamente i record di uno stream di modifiche. In questo modo, puoi leggere i record di modifica dei dati nello stesso modo in cui lo fa il connettore SpannerIO, rinunciando all'astrazione che fornisce in cambio delle latenze più basse possibili durante la lettura dei dati dello stream di modifiche.
Per scoprire di più, consulta Eseguire query sui flussi di modifiche. Per una discussione più dettagliata su come eseguire query sui modifiche in tempo reale 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 del flusso di modifiche in un argomento Kafka. Astrae i dettagli delle query modifiche in tempo reale utilizzando l'API Spanner.
Per scoprire di più sul funzionamento dei modifiche in tempo reale e del connettore Kafka, consulta Creare connessioni con i modifiche in tempo reale tramite il connettore Kafka.
Limiti
Esistono diversi limiti per modifiche in tempo reale, tra cui il numero massimo di modifiche in tempo reale 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 modifiche in tempo reale richiede
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 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
Scopri la sintassi DDL per creare e gestire i flussi di modifiche.
Utilizza modifiche in tempo reale e i modelli per replicare le modifiche da Spanner a BigQuery o a Cloud Storage.
Scopri di più sulla creazione di pipeline Dataflow per l'elaborazione dei dati degli stream di modifiche.
Scopri di più sui dettagli dei flussi di variazioni, inclusi ulteriori dettagli sull'architettura dei flussi di variazioni, su come eseguire query sui modifiche in tempo reale utilizzando l'API e su come interpretare i record restituiti.
Scopri di più sull'utilizzo del connettore Kafka per elaborare i dati del flusso di modifiche.