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 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 un messaggio come Pub/Sub.

  • Archiviazione delle modifiche ai dati in Cloud Storage per la conformità o archivi.

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 un flusso di modifiche per osservare le modifiche ai dati su un l'intero database o limitarne l'ambito a tabelle e colonne specifiche. R un database può avere più modifiche in tempo reale e una determinata tabella o può essere guardato da più stream, all'interno di 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. Quando vengono completati, il nuovo flusso di modifiche inizia immediatamente a osservare 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 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 una modifica in tempo reale per monitorare solo determinate colonne in un tabella e successivamente aggiungi colonne alla tabella, la modifica in tempo reale iniziare a osservare queste colonne a meno che non riconfiguri la modifica stream per farlo.

Lo schema del database tratta le modifiche in tempo reale come oggetti dipendenti di qualsiasi le colonne o le tabelle che controlla 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. Questi le modifiche possono provenire da:

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, una modifica guardare un intero database non considererebbe l'eliminazione di una tabella come 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 guardato da un flusso di modifiche, scrive un record delle modifiche dei dati nel proprio memoria interna. Lo fa in modo sincrono con i dati modifica nell'ambito della stessa transazione. Colloca Spanner entrambe le scritture, quindi vengono elaborate dallo stesso server al minimo l'elaborazione in scrittura.

Contenuto di un record delle modifiche dei dati

Ogni record delle modifiche ai dati scritto da un flusso di modifiche include 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

Un'opzione di configurazione del 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 le modifiche in tempo reale:

  • 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 non vengono 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 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ù 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 modifiche in tempo reale utilizzando legge. 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 regioni 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 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 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 delle modifiche alle 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 usando 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 Modifica stream limiti.

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