Panoramica delle modifiche in tempo reale

Un flusso di modifiche controlla e trasmette il flusso di dati di uno Spanner le modifiche ai dati (inserimenti, aggiornamenti ed eliminazioni) del database quasi in tempo reale.

Questa pagina offre una panoramica generale della modifica a Spanner stream: cosa fanno e come funzionano. Per scoprire come creare gestire le modifiche in tempo reale nel database e connetterle ad altre 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 i dati in modalità flusso modifiche ad altri servizi. I casi d'uso più comuni includono:

  • Replica delle modifiche ai dati di Spanner in un data warehouse, ad esempio 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 la conformità o archivi.

Configurazione delle modifiche in tempo reale

Spanner tratta gli stream di modifiche 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 un flusso di modifiche per osservare le modifiche ai dati su un l'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 un flusso di modifiche per specificare periodo di conservazione dei dati, il tipo di acquisizione del valore, filtrare le eliminazioni basate su TTL oppure filtro delle modifiche della tabella.

L'emissione del DDL che crea un flusso di modifiche avvia una operativa. 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, lo stream delle modifiche interrompe automaticamente la sorveglianza di eventuali colonne eliminate dalla tabella.

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

Controllo 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 stream di modifiche come oggetti dipendenti di qualsiasi colonna o tabella che monitorano esplicitamente. Prima di poter rilasciare qualsiasi colonna o tabella, devi rimuoverla manualmente dalla configurazione di qualsiasi flusso di modifiche che li guardi esplicitamente.

Tipi di modifiche ai dati che cambiano i flussi di dati

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 lo schema di informazioni o le tabelle delle statistiche. Cambia gli stream non guardano le colonne generate a meno che la colonna non faccia parte del e la chiave primaria. Le colonne delle chiavi primarie 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.

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

Ogni volta che Spanner rileva una modifica ai dati in una colonna guardato da un flusso di modifiche, scrive un record delle modifiche dei dati nel proprio memoria interna. Lo fa in modo sincrono con la variazione dei dati, all'interno della stessa transazione. Spanner colloca entrambe queste scritture in modo che vengano elaborate dallo stesso server, riducendo al minimo l'elaborazione delle scritture.

Contenuto di un record delle modifiche 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 primarie che identificano 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 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 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, se riduci il limite di conservazione dei dati di un flusso di modifiche, i dati storici delle modifiche precedenti al nuovo limite immediatamente definitivamente non disponibile per i lettori di quel flusso di modifiche.

Questo periodo di conservazione dei dati presenta un compromesso: per una conservazione più lunga comporta maggiori esigenze di archiviazione al database del flusso.

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 modifiche apportate a una riga colonne.

  • NEW_VALUES: acquisisce solo i nuovi valori delle colonne non chiave, ma non i vecchi valori e i relativi valori.

  • 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 quelli modificati che per quelli modificati le colonne non modificate e i vecchi valori per le colonne modificate.

Escludi eliminazioni basate sulla durata (TTL)

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 le 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 si crea una modifica in tempo reale 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 apportate alle tabelle, come inserimenti, aggiornamenti ed eliminazioni. Puoi filtrare una o più di queste modifiche alla tabella dal dell'ambito di modifiche in tempo reale 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 di questi filtri è false. Per escludere un tipo specifico di modifica della tabella, imposta il filtro su true. Puoi impostare uno o più contemporaneamente.

Puoi aggiungere un filtro per un tipo di modifica della tabella. quando crei un flusso di modifiche modificare 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. 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 invia i flussi di modifiche ai record direttamente negli argomenti Kafka.

Puoi fornire l'isolamento parziale per le letture dei flussi di modifiche utilizzando legge. 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 maggiori informazioni, consulta la sezione 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 utilizza le funzioni di applicazione di finestre per suddividere le raccolte illimitate in componenti logici o finestre. Di conseguenza, Dataflow fornisce lo streaming quasi in tempo reale leggendo le modifiche in tempo reale.

Google offre modelli che consentono di creare rapidamente pipeline Dataflow per casi d'uso comuni di modifiche in tempo reale, compreso l'invio di tutte le modifiche ai dati di uno stream a un BigQuery o copiarlo 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 panoramica discussione su come eseguire query sui modifiche in tempo reale e interpretare i record consulta Modificare le partizioni, i record e le query dei flussi.

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.

Scopri di più su come funzionano 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, incluso il numero massimo di modifiche in tempo reale che un database può avere e il numero massimo di flussi che può osservare una singola colonna. Per un elenco completo, consulta Modificare i limiti dei 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 dell'elemento Il job Dataflow che legge i dati delle modifiche in tempo reale richiede Autorizzazioni IAM, sul database dell'applicazione o su un un database di metadati; consulta Creare un database di metadati.

Passaggi successivi