Questa pagina descrive come creare, modificare e visualizzare i flussi di modifiche di Spanner per i database con dialetto GoogleSQL e per i database con dialetto PostgreSQL. Per saperne di più sulle modifiche in tempo reale, consulta Informazioni sulle modifiche in tempo reale.
Poiché i flussi di modifiche in tempo reale sono oggetti dello schema, vengono creati e gestiti tramite gli stessi aggiornamenti dello schema guidati da DDL schema updates utilizzati per qualsiasi altro tipo di lavoro di definizione del database, come la creazione di tabelle o l'aggiunta di indici.
Spanner avvia un'operazione a lunga esecuzione dopo l'invio di un'istruzione DDL che modifica lo schema, incluse quelle utilizzate per creare, modificare o eliminare modifiche in tempo reale. Un flusso di modifiche nuovo o modificato inizia a monitorare le colonne o le tabelle specificate dalla sua nuova configurazione al termine di questa operazione a lunga esecuzione.
Crea un flusso di modifiche
Per creare un flusso di modifiche, è necessario specificarne il nome e gli oggetti dello schema che monitora: l'intero database oppure un elenco di tabelle e colonne specifiche. È possibile configurare facoltativamente un flusso di modifiche con una delle seguenti opzioni:
- Specificare il periodo di conservazione dei dati per sovrascrivere il periodo di conservazione predefinito di sette giorni.
- Specifica il tipo di acquisizione valore per sostituire il tipo di acquisizione valore predefinito
OLD_AND_NEW_VALUES. - Applica un filtro di eliminazione basato su TTL per filtrare le eliminazioni basate su TTL dai tuoi modifiche in tempo reale.
- Applica un filtro di modifiche alla tabella per escludere tutte le
INSERT,UPDATEoDELETEmodifiche alla tabella. Abilita l'esclusione di record a livello di transazione per escludere determinate transazioni dai flussi di modifiche in tempo reale.
GoogleSQL
La sintassi DDL per la creazione di un flusso di modifiche tramite Google SQL è la seguente:
CREATE CHANGE STREAM CHANGE_STREAM_NAME
[FOR column_or_table_watching_definition[, ... ] ]
[
OPTIONS (
retention_period = timespan,
value_capture_type = type,
exclude_ttl_deletes = boolean,
exclude_insert = boolean,
exclude_update = boolean,
exclude_delete = boolean,
allow_txn_exclusion = boolean
)
]
PostgreSQL
La sintassi DDL per la creazione di un flusso di modifiche tramite PostgreSQL è la seguente:
CREATE CHANGE STREAM CHANGE_STREAM_NAME
[FOR column_or_table_watching_definition[, ... ] ]
[
WITH (
retention_period = timespan,
value_capture_type = type,
exclude_ttl_deletes = boolean,
exclude_insert = boolean,
exclude_update = boolean,
exclude_delete = boolean,
allow_txn_exclusion = boolean
)
]
Un nuovo flusso di modifiche inizia a monitorare gli oggetti dello schema assegnati non appena l'operazione a lunga esecuzione che lo ha creato viene completata.
I seguenti esempi illustrano la creazione di flussi di modifiche in tempo reale con diverse configurazioni.
Visualizza un intero database
Per creare un flusso di modifiche che monitori ogni modifica dei dati effettuata nelle tabelle di un database, utilizzare la parola chiave ALL:
CREATE CHANGE STREAM EverythingStream
FOR ALL;
La configurazione ALL include implicitamente tutte le future tabelle e colonne di dati del database, non appena vengono create. Essonon include viste, tabelle di schema informativo o altri oggetti diversi dalle normali tabelle di dati.
Guarda tabelle specifiche
Per limitare l'ambito di un flusso di modifiche a tabelle specifiche, anziché all'intero database, specificare un elenco di una o più tabelle:
CREATE CHANGE STREAM SingerAlbumStream
FOR Singers, Albums;
Spanner aggiorna automaticamente i flussi di modifiche che monitorano intere tabelle per riflettere eventuali modifiche allo schema che interessano queste tabelle, ad esempio colonne aggiunte o eliminate.
Osserva colonne specifiche
Utilizza la sintassi table(column_1[, column_2,
...]) per monitorare le modifiche a una o più colonne specifiche non chiave all'interno delle tabelle a cui fornisci un nome:
CREATE CHANGE STREAM NamesAndTitles
FOR Singers(FirstName, LastName), Albums(Title);
Non è possibile specificare le colonne della chiave primaria qui perché ogni flusso di modifiche sempre tiene traccia delle chiavi primarie di ogni tabella che monitora. Ciò consente a ogni record di modifica dei dati di identificare la riga modificata tramite la sua chiave primaria.
Visualizza tabelle e colonne in un unico flusso
È possibile combinare la sintassi di monitoraggio delle tabelle e delle colonne dei due esempi precedenti in un unico flusso di modifiche:
CREATE CHANGE STREAM NamesAndAlbums
FOR Singers(FirstName, LastName), Albums;
Specificare un periodo di conservazione più lungo
Per specificare un periodo di conservazione dei dati del flusso di modifiche superiore al valore predefinito di sette giorni, impostare retention_period su un periodo fino a trenta giorni, espresso in ore (h) o giorni (d).
Due esempi:
GoogleSQL
CREATE CHANGE STREAM LongerDataRetention
FOR ALL
OPTIONS ( retention_period = '36h' );
CREATE CHANGE STREAM MaximumDataRetention
FOR ALL
OPTIONS ( retention_period = '7d' );
PostgreSQL
CREATE CHANGE STREAM LongerDataRetention
FOR ALL
WITH ( retention_period = '36h' );
CREATE CHANGE STREAM MaximumDataRetention
FOR ALL
WITH ( retention_period = '7d' );
Specificare un tipo di acquisizione del valore diverso
Per specificare un tipo di acquisizione del valore del flusso di modifiche diverso da OLD_AND_NEW_VALUES, impostare value_capture_type su NEW_VALUES o NEW_ROW, come mostrato negli esempi seguenti:
GoogleSQL
CREATE CHANGE STREAM NewRowChangeStream
FOR ALL
OPTIONS ( value_capture_type = 'NEW_ROW' );
CREATE CHANGE STREAM NewValuesChangeStream
FOR ALL
OPTIONS ( value_capture_type = 'NEW_VALUES' );
PostgreSQL
CREATE CHANGE STREAM NewRowChangeStream
FOR ALL
WITH ( value_capture_type = 'NEW_ROW' );
CREATE CHANGE STREAM NewValuesChangeStream
FOR ALL
WITH ( value_capture_type = 'NEW_VALUES' );
Filtrare le eliminazioni basate sul TTL
È possibile filtrareEliminazioni basate su TTL dall'ambito del tuo flusso di modifiche utilizzando ilexclude_ttl_deletes filtro.
Per ulteriori informazioni sul funzionamento di questo filtro, consulta Filtro per eliminazioni basate sul TTL.
GoogleSQL
Per creare un flusso di modifiche con il filtro di eliminazione basato su TTL, eseguire il seguente esempio:
CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (exclude_ttl_deletes = true)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: il nome del nuovo stream di modifiche
L'esempio seguente crea un flusso di modifiche chiamato NewFilterChangeStream che esclude tutte le eliminazioni basate su TTL:
CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
OPTIONS (exclude_ttl_deletes = true)
PostgreSQL
Per creare uno stream delle modifiche con il filtro delle eliminazioni basate sul TTL, esegui l'esempio seguente:
CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (exclude_ttl_deletes = true)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: il nome del tuo nuovo flusso di modifiche
L'esempio seguente crea un flusso di modifiche denominato NewFilterChangeStream
che esclude tutte le eliminazioni basate su TTL:
CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
WITH (exclude_ttl_deletes = true)
Per aggiungere o rimuovere il filtro delle eliminazioni basate sul TTL da un flusso di modifiche esistente, consulta Modificare il filtro delle eliminazioni basate sul TTL. È possibile confermare i filtri del flusso di modifiche tramitevisualizzazione delle definizioni del flusso di modifiche come DDL.
Filtra per tipo di modifica della tabella
Filtra 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 modifiche alla tabellaINSERTexclude_update: escludi tutte le modifiche alla tabellaUPDATEexclude_delete: escludi tutte le modifiche alla tabellaDELETE
Per ulteriori informazioni sul funzionamento di questi filtri, vedere Filtri di tipo di modifica della tabella.
GoogleSQL
Per creare uno stream delle modifiche con uno o più filtri per il tipo di modifica della tabella, esegui questo comando:
CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (MOD_TYPE_FILTER_NAME = true)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: il nome del nuovo stream di modifiche
- MOD_TYPE_FILTER_NAME: il filtro che si desidera aggiungere:
exclude_insert,exclude_updateoexclude_delete. Se aggiungi più di un filtro alla volta, separali con una virgola.
L'esempio seguente crea un flusso di modifiche denominato NewFilterChangeStream che esclude i tipi di modifica della tabella INSERT e UPDATE:
CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
OPTIONS (exclude_insert = true, exclude_update = true)
PostgreSQL
Per creare un flusso di modifiche con uno o più filtri di tipo di modifica tabella, eseguire il seguente comando:
CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (MOD_TYPE_FILTER_NAME = true)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: il nome del nuovo stream di modifiche
- MOD_TYPE_FILTER_NAME: il filtro che si desidera aggiungere:
exclude_insert,exclude_updateoexclude_delete. Se aggiungi più di un filtro alla volta, separali con una virgola.
L'esempio seguente crea un flusso di modifiche denominato NewFilterChangeStream
che esclude i tipi di modifica delle tabelle INSERT e UPDATE:
CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
WITH (exclude_insert = true, exclude_update = true)
Per aggiungere o rimuovere un filtro per tipo di modifica tabella da un flusso di modifiche esistente, vedere Filtro di modifica in base al tipo di modifica tabella. Puoi confermare quali filtri del tipo di modifica della tabella esistono per il tuo flusso di modifiche visualizzando le definizioni del flusso di modifiche come DDL.
Abilita l'esclusione dei record a livello di transazione
È possibile abilitare i flussi di modifiche in tempo reale per escludere i record da transazioni di scrittura specifiche impostando l'opzione allow_txn_exclusion quando si crea un flusso di modifiche in tempo reale oppure modificando un flusso di modifiche in tempo reale esistente.
Per ulteriori informazioni sul funzionamento di questa opzione, vedere Esclusione dei record a livello di transazione.
GoogleSQL
Per creare un flusso di modifiche che possa escludere record da transazioni di scrittura specifiche, eseguire il seguente comando:
CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (allow_txn_exclusion = true)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: il nome del nuovo flusso di modifiche
L'esempio seguente crea un flusso di modifiche denominato NewChangeStream che può escludere record da transazioni di scrittura specificate:
CREATE CHANGE STREAM NewChangeStream FOR ALL
OPTIONS (allow_txn_exclusion = true)
PostgreSQL
Per creare un flusso di modifiche che possa escludere record da transazioni di scrittura specifiche, eseguire il seguente comando:
CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (allow_txn_exclusion = true)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: il nome del nuovo flusso di modifiche
L'esempio seguente crea un flusso di modifiche denominato NewChangeStream che può escludere record da transazioni di scrittura specificate:
CREATE CHANGE STREAM NewChangeStream FOR ALL
WITH (allow_txn_exclusion = true)
Per abilitare o disabilitare l'esclusione dei record a livello di transazione da un flusso di modifiche esistente, vedere Modifica l'esclusione dei record a livello di transazione. Per controllare l'impostazione di questa opzione, vedi Visualizzare le definizioni degli modifiche in tempo reale come DDL.
Specifica una transazione di scrittura da escludere dai flussi di modifiche in tempo reale
Per specificare una transazione di scrittura da escludere dalle modifiche in tempo reale, devi
impostare il parametro exclude_txn_from_change_streams su true. I seguenti esempi di codice mostrano come specificare una transazione di scrittura da escludere dalle modifiche in tempo reale utilizzando la libreria client.
Vai
Java
Modificare un flusso di modifiche
Per modificare la configurazione di un flusso di modifiche, utilizzare un'istruzione DDL ALTER CHANGE STREAM. Utilizza una sintassi simile a CREATE CHANGE STREAM. Puoi
modificare le colonne monitorate da uno stream o la durata del periodo di conservazione dei dati. È anche possibile sospendere completamente il monitoraggio, mantenendo però la cronologia delle modifiche.
Modificare gli elementi monitorati da un flusso di modifiche
Questo esempio aggiunge l'interoSongs tavolo alNamesAndAlbums modifica il flusso configurato in precedenza:
ALTER CHANGE STREAM NamesAndAlbums
SET FOR Singers(FirstName, LastName), Albums, Songs;
Spanner sostituisce il comportamento del flusso di modifiche denominato con la nuova configurazione al termine dell'operazione a lunga esecuzione che aggiorna la definizione del flusso di modifiche all'interno dello schema del database.
Modificare il periodo di conservazione dei dati di una modifica in tempo reale
Per modificare il periodo di tempo in cui un flusso di modifiche conserva i propri record interni, imposta retention_period in un'istruzione DDL ALTER CHANGE STREAM.
Questo esempio regola il periodo di conservazione dei dati in base alla modifica in tempo reale NamesAndAlbums
creata in precedenza:
GoogleSQL
ALTER CHANGE STREAM NamesAndAlbums
SET OPTIONS ( retention_period = '36h' );
PostgreSQL
ALTER CHANGE STREAM NamesAndAlbums
SET ( retention_period = '36h' );
Modificare il tipo di acquisizione del valore di una modifica in tempo reale
Per modificare il tipo di acquisizione dei valori di uno stream di modifiche, imposta la clausola
value_capture_type in un'istruzione DDL ALTER CHANGE STREAM.
Questo esempio modifica il tipo di acquisizione del valore in NEW_VALUES.
GoogleSQL
ALTER CHANGE STREAM NamesAndAlbums
SET OPTIONS ( value_capture_type = 'NEW_VALUES' );
PostgreSQL
ALTER CHANGE STREAM NamesAndAlbums
SET ( value_capture_type = 'NEW_VALUES' );
Modificare il filtro delle eliminazioni basate sul TTL
Per modificare il filtro eliminazioni basate sul TTL per un flusso di modifiche, imposta il filtro exclude_ttl_deletes in un'istruzione DDL ALTER CHANGE STREAM. Puoi utilizzarlo per aggiungere o rimuovere il filtro dai flussi di modifiche in tempo reale esistenti.
Per ulteriori informazioni sul funzionamento di questi filtri, vedere Filtro eliminazioni basato sulla durata (TTL).
Aggiungi il filtro di eliminazione basato su TTL a un flusso di modifiche esistente
GoogleSQL
Per aggiungere il filtro di eliminazione basato su TTL a un flusso di modifiche esistente, eseguire il seguente comando per impostare il filtro su true:
ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (exclude_ttl_deletes = true)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: il nome del tuo flusso di modifiche esistente
Nell'esempio seguente, il filtro exclude_ttl_deletes viene aggiunto a un flusso di modifiche esistente chiamato NewFilterChangeStream che esclude tutte le eliminazioni basate su TTL:
ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET OPTIONS (exclude_ttl_deletes = true)
Ciò esclude tutte le future eliminazioni basate su TTL dal flusso delle modifiche.
PostgreSQL
Per aggiungere il filtro delle eliminazioni basate sul TTL a uno stream delle modifiche esistente,
esegui il comando seguente per impostare il filtro su true:
ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (exclude_ttl_deletes = true)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: il nome del tuo flusso di modifiche esistente
Nell'esempio seguente, il filtro exclude_ttl_deletes viene aggiunto a un flusso di modifiche esistente chiamato NewFilterChangeStream che esclude tutte le eliminazioni basate su TTL:
ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET (exclude_ttl_deletes = true)
Ciò esclude tutte le future eliminazioni basate su TTL dal flusso delle modifiche.
Rimuovere il filtro delle eliminazioni basate sul TTL da un flusso di modifiche esistente
GoogleSQL
Per rimuovere il filtro di eliminazione basato su TTL da un flusso di modifiche esistente, eseguire il seguente comando per impostare il filtro su false:
ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (exclude_ttl_deletes = false)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: il nome del tuo nuovo flusso di modifiche
Nell'esempio seguente, il filtro exclude_ttl_deletes viene rimosso da un flusso di modifiche esistente chiamato NewFilterChangeStream:
ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET OPTIONS (exclude_ttl_deletes = false)
Ciò include tutte le future eliminazioni basate su TTL nel flusso di modifiche.
È inoltre possibile impostare il filtro su null per rimuovere il filtro di eliminazione basato su TTL.
PostgreSQL
Per rimuovere il filtro di eliminazione basato su TTL da un flusso di modifiche esistente, eseguire il seguente comando per impostare il filtro su false:
ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (exclude_ttl_deletes = false)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: il nome del tuo nuovo flusso di modifiche
Nell'esempio seguente, il filtro exclude_ttl_deletes viene rimosso da un flusso di modifiche esistente chiamato NewFilterChangeStream:
ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET (exclude_ttl_deletes = false)
Ciò include tutte le future eliminazioni basate su TTL nel flusso di modifiche.
È inoltre possibile impostare il filtro su null per rimuovere il filtro di eliminazione basato su TTL.
Modifica filtro in base al tipo di modifica della tabella
Per modificare i filtri del tipo di modifica della tabella per un flusso di modifiche, impostare il tipo di filtro in un'istruzione DDL ALTER CHANGE STREAM. È possibile utilizzare questa funzione per aggiungere un nuovo filtro o rimuovere un filtro esistente dal flusso di modifiche.
Aggiungi un filtro per il tipo di modifica della tabella a un flusso di modifiche esistente
GoogleSQL
Per aggiungere uno o più nuovi filtri di tipo di modifica tabella a un flusso di modifiche esistente, eseguire il seguente comando per impostare il filtro su true:
ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = true)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: sostituire con il nome del flusso di modifiche esistente
- MOD_TYPE_FILTER_NAME: sostituisci con il filtro che desideri aggiungere:
exclude_insert,exclude_updateoexclude_delete. Se aggiungi più di un filtro alla volta, separali con una virgola.
Nell'esempio seguente, il filtro exclude_delete viene aggiunto a un flusso di modifiche esistente chiamato NewFilterChangeStream:
ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = true)
PostgreSQL
Per aggiungere uno o più nuovi filtri del tipo di modifica della tabella a un flusso di modifiche esistente, esegui il seguente comando per impostare il filtro su true:
ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = true)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: sostituire con il nome del flusso di modifiche esistente
- MOD_TYPE_FILTER_NAME: sostituisci con il filtro che desideri aggiungere:
exclude_insert,exclude_updateoexclude_delete. Se aggiungi più di un filtro alla volta, separali con una virgola.
Nell'esempio seguente, il filtro exclude_delete viene aggiunto a un
flusso di modifiche esistente chiamato NewFilterChangeStream:
ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = true)
Rimuovere un filtro per tipo di modifica della tabella da un flusso di modifiche esistente
GoogleSQL
Per rimuovere uno o più filtri di tipo di modifica tabella esistenti nel flusso di modifiche, eseguire il seguente comando per impostare il filtro su false:
ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = false)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: sostituire con il nome del flusso di modifiche esistente
- MOD_TYPE_FILTER_NAME: sostituisci con il filtro che desideri rimuovere:
exclude_insert,exclude_updateoexclude_delete. Se rimuovi più filtri contemporaneamente, separali con una virgola.
Nell'esempio seguente, il filtro exclude_delete viene rimosso da un
flusso di modifiche esistente chiamato NewFilterChangeStream:
ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = false)
È inoltre possibile rimuovere un filtro di modifica della tabella reimpostandolo al valore predefinito. Per farlo, imposta il valore del filtro su null.
PostgreSQL
Per rimuovere uno o più filtri del tipo di modifica della tabella esistenti nel flusso di modifiche, esegui il comando seguente per impostare il filtro su false:
ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = false)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: sostituire con il nome del flusso di modifiche esistente
- MOD_TYPE_FILTER_NAME: sostituisci con il filtro che desideri rimuovere:
exclude_insert,exclude_updateoexclude_delete. Se rimuovi più filtri contemporaneamente, separali con una virgola.
Nell'esempio seguente, il filtro exclude_delete viene rimosso da un
flusso di modifiche esistente chiamato NewFilterChangeStream:
ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = false)
È inoltre possibile rimuovere un filtro di modifica della tabella reimpostandolo al valore predefinito. Per fare ciò, imposta il valore del filtro su null.
Modifica il flusso di modifiche per consentire l'esclusione dei record a livello di transazione.
È possibile modificare il flusso di modifiche per consentirgli di escludere i record da specifiche transazioni di scrittura. Per fare ciò, impostare ilallow_txn_exclusion opzionetrue in unALTER CHANGE STREAM Dichiarazione DDL. Se non imposti questa opzione, o se la imposti su false, il flusso di modifiche monitora tutte le transazioni di scrittura.
Per ulteriori informazioni sul funzionamento di questa opzione, vedere Esclusione dei record a livello di transazione.
Abilita l'esclusione dei record a livello di transazione per un flusso di modifiche esistente
GoogleSQL
Per abilitare l'esclusione dei record a livello di transazione per un flusso di modifiche esistente, eseguire il seguente comando:
ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (allow_txn_exclusion = true)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: il nome del tuo flusso di modifiche esistente
Nell'esempio seguente, l'opzione allow_txn_exclusion è abilitata su un flusso di modifiche esistente, NewAllowedChangeStream:
ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET OPTIONS (allow_txn_exclusion = true)
Ciò consente al flusso di modifiche di escludere i record da specifiche transazioni di scrittura.
PostgreSQL
Per abilitare l'esclusione dei record a livello di transazione per un flusso di modifiche esistente, eseguire il seguente comando:
ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (allow_txn_exclusion = true)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: il nome del tuo flusso di modifiche esistente
Nell'esempio seguente, l'opzione allow_txn_exclusion è abilitata su un flusso di modifiche esistente, NewAllowedChangeStream:
ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET (allow_txn_exclusion = true)
In questo modo, il flusso di modifiche può escludere i record dalle transazioni di scrittura specificate.
Disabilita l'esclusione dei record a livello di transazione per un flusso di modifiche esistente
GoogleSQL
Per disabilitare l'esclusione dei record a livello di transazione su un flusso di modifiche esistente, eseguire il seguente comando:
ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (allow_txn_exclusion = false)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: il nome dello stream di modifiche
Nell'esempio seguente, l'opzione allow_txn_exclusion è disabilitata su un flusso di modifiche esistente chiamato NewAllowedChangeStream:
ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET OPTIONS (allow_txn_exclusion = false)
Il flusso di modifiche monitora tutte le transazioni di scrittura.
PostgreSQL
Per disattivare l'esclusione dei record a livello di transazione in uno stream di modifiche esistente, esegui il comando seguente:
ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (allow_txn_exclusion = false)
Sostituisci quanto segue:
- CHANGE_STREAM_NAME: il nome dello stream di modifiche
Nell'esempio seguente, l'opzione allow_txn_exclusion è disabilitata su un flusso di modifiche esistente chiamato NewAllowedChangeStream:
ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET (allow_txn_exclusion = false)
Il flusso delle modifiche monitora tutte le transazioni di scrittura.
Sospendi un flusso di modifiche
Se si desidera che un flusso di modifiche interrompa la sua attività ma conservi i suoi record interni, almeno per la durata del periodo di conservazione dei dati, è possibile modificarlo in modo che non monitori nulla.
Per fare ciò, emetti un'istruzione DDL ALTER CHANGE STREAM che sostituisce la definizione del flusso di modifiche con la frase speciale DROP FOR ALL.
Ad esempio:
ALTER CHANGE STREAM MyStream DROP FOR ALL;
Il flusso continua a esistere nel database, ma non monitora alcun oggetto e non genera ulteriori record di modifica dei dati. I registri delle modifiche esistenti rimangono intatti, nel rispetto della politica di conservazione dei dati del flusso.
Per riprendere uno stream sospeso, emetti un'altra istruzione ALTER CHANGE STREAM
con la configurazione precedente.
Eliminare un flusso di modifiche
Per eliminare definitivamente un flusso di modifiche, emettere un'istruzione DROP CHANGE STREAM che includa il nome del flusso:
DROP CHANGE STREAM NamesAndAlbums;
Spanner interrompe immediatamente il flusso, lo rimuove dallo schema del database ed elimina i relativi record di modifica dei dati.
Elenca e visualizza modifiche in tempo reale
La Google Cloud console fornisce un'interfaccia web per elencare e rivedere le definizioni del flusso di modifiche di un database. È inoltre possibile visualizzare la struttura delle modifiche in tempo reale come le relative istruzioni DDL, oppure facendo query sullo schema informativo del database.
Visualizza gli stream di modifiche in tempo reale con la console Google Cloud
Per visualizzare un elenco delle modifiche in tempo reale di un database e rivederne le definizioni:
Visita la pagina delle istanze di Spanner della consoleGoogle Cloud .
Accedere all'istanza e al database appropriati.
Fai clic su Modifiche in tempo reale nel menu di navigazione.
Viene visualizzato un elenco di tutte le modifiche in tempo reale del database e viene riepilogata la configurazione di ciascuno. Facendo clic sul nome di uno stream, vengono visualizzati ulteriori dettagli sulle tabelle e le colonne monitorate.
Visualizzare le definizioni degli stream di modifiche in tempo reale come DDL
La visualizzazione dello schema di un database come DDL include le descrizioni di tutti i relativi
flussi di modifiche in tempo reale, in cui vengono visualizzati come istruzioni CREATE CHANGE STREAM.
Per fare ciò dalla console, fai clic sul collegamento Mostra DDL equivalente nella pagina del database nella Google Cloud console.
Per farlo dalla riga di comando, utilizza il comando
ddl describedi Google Cloud CLI.
Esegui query sullo schema delle informazioni sulle modifiche in tempo reale
Puoi eseguire query direttamente sullo schema delle informazioni di un database sui relativi modifiche in tempo reale. Le seguenti tabelle contengono i metadati che definiscono i nomi delle modifiche in tempo reale, le tabelle e le colonne che monitorano e i relativi periodi di conservazione:
Best practice per i flussi di modifiche
Di seguito sono riportate alcune best practice per la configurazione e la gestione dei flussi di modifiche.
Valuta la possibilità di utilizzare un database di metadati separato
Le modifiche in tempo reale utilizzano un database di metadati per mantenere lo stato interno. Il database dei metadati può essere uguale o diverso dal database che contiene le modifiche in tempo reale. Ti consigliamo di creare un database separato per l'archiviazione dei metadati.
Il connettore Spanner modifiche in tempo reale necessita di autorizzazioni di lettura e scrittura per il database dei metadati. Non devi preparare questo database con uno schema, perché se ne occupa il connettore.
L'utilizzo di un database di metadati separato elimina le complessità che potrebbero derivare dal consentire al connettore di scrivere direttamente nel database dell'applicazione:
Separando il database dei metadati dal database di produzione tramite il flusso di modifiche, il connettore necessita solo di autorizzazioni di lettura per il database di produzione.
Limitando il traffico del connettore a un database di metadati separato, le scritture eseguite dal connettore stesso non vengono incluse nei flussi di modifiche in tempo reale di produzione. Ciò è particolarmente rilevante per i flussi di modifiche in tempo reale che monitorano l'intero database.
Se non viene utilizzato un database separato per archiviare i metadati, si consiglia di monitorare l'impatto sulla CPU del connettore per le modifiche in tempo reale sulle relative istanze.
Esegui il benchmark dei nuovi flussi di modifiche in tempo reale e ridimensionali se necessario
Prima di aggiungere nuovi modifiche in tempo reale all'istanza di produzione, è consigliabile eseguire un benchmark di un carico di lavoro realistico su un'istanza di staging con i modifiche in tempo reale abilitati. Questo permette di determinare se è necessario aggiungere nodi all'istanza per aumentarne le capacità di calcolo e di archiviazione.
Esegui questi test finché le metriche di CPU e spazio di archiviazione non si stabilizzano. Idealmente, l'utilizzo della CPU dell'istanza deve rimanere al di sotto dei valori massimi consigliati e l'utilizzo dello spazio di archiviazione non deve superare il limite di archiviazione dell'istanza.
Utilizzare regioni diverse per bilanciare il carico
Quando si utilizzano flussi di modifiche in tempo reale in una configurazione di istanza multi-regione , è consigliabile eseguire le relative pipeline di elaborazione in una regione diversa dalla regione leader predefinita. Questo contribuisce a distribuire il carico di streaming tra le repliche non leader. Se tuttavia è necessario dare priorità al ritardo di streaming più basso possibile rispetto al bilanciamento del carico, eseguire il carico di streaming nella regione leader.
Passaggi successivi
Utilizza templates per connettere rapidamente un flusso di modifiche a BigQuery, Cloud Storage o Pub/Sub.