Visão geral do fluxo de alterações

Um fluxo de alterações observa e transmite um comando do Spanner alterações de dados (inserções, atualizações e exclusões) do banco de dados tempo real.

Nesta página, você encontra uma visão geral das mudanças no Spanner de streaming: o que fazem e como funcionam. Para saber como criar e gerenciar fluxos de mudanças no seu banco de dados e conectá-los a outros serviços, siga os links em O que vem por aí.

Finalidade dos fluxos de alterações

Os fluxos de alterações oferecem uma maneira flexível e escalonável de transmitir mudanças de dados para outros serviços. Os casos de uso comuns incluem:

  • Replique as mudanças de dados do Spanner para um data warehouse, como o BigQuery, para análises.

  • Acionamento da lógica do aplicativo com base em mudanças de dados enviadas para uma mensagem fila, como o Pub/Sub.

  • Armazenar alterações de dados no Cloud Storage para fins de conformidade ou arquivamento.

Mudar a configuração do fluxo

O Spanner trata os fluxos de mudanças como objetos de esquema, assim como tabelas e índices. Dessa forma, você cria, modifica e exclui alterações streams usando instruções DDL. Além disso, é possível visualizar os atributos de alterações, assim como outros esquemas gerenciados por DDL objetos.

É possível configurar um fluxo de mudanças para monitorar alterações de dados em um banco de dados inteiro ou limitar o escopo a tabelas e colunas específicas. Um banco de dados pode ter vários fluxos de mudanças, e uma tabela ou coluna específica pode ter vários fluxos que a monitoram, dentro de limites.

Também é possível configurar um fluxo de alterações para especificar período de armazenamento de dados tipo de captura de valor, filtrar exclusões baseadas em TTL ou filtro de modificações da tabela.

Emitir o DDL que cria um fluxo de mudanças inicia uma operação de longa duração. Quando ele for concluído, o novo fluxo de alterações vai começar a monitorar as tabelas e colunas atribuídas a ele.

Observação implícita de tabelas e colunas

Os fluxos de mudança que monitoram uma tabela inteira monitoram implicitamente todas as colunas dessa tabela, mesmo quando a definição dela é atualizada. Por exemplo, quando você adiciona novas colunas à tabela, o fluxo de alterações começa a monitorar essas novas colunas automaticamente, sem exigir nenhuma modificação na configuração desse fluxo. Da mesma forma, o fluxo de alterações para automaticamente de monitorar as colunas que são descartadas com base na tabela.

Fluxo de alterações do banco de dados inteiro funcionam da mesma maneira. Eles monitoram implicitamente cada coluna em cada tabela, monitorando automaticamente as tabelas ou colunas adicionadas após a criação do fluxo de alterações e deixando de monitorar as tabelas ou colunas descartadas.

Monitorar explicitamente tabelas e colunas

Se você configurar um fluxo de mudanças para monitorar apenas colunas específicas em uma tabela e adicionar colunas a essa tabela mais tarde, o fluxo de mudanças não vai começar a monitorar essas colunas, a menos que você reconfigure esse fluxo de mudanças para fazer isso.

O esquema do banco de dados trata as streams de mudanças como objetos dependentes de qualquer coluna ou tabela que elas monitoram explicitamente. Antes de excluir qualquer coluna ou tabela, remova-a manualmente da configuração de qualquer fluxo de mudanças que a monitora explicitamente.

Tipos de mudanças de dados que os fluxos de alterações monitoram

As mudanças de dados que um fluxo de alterações monitora incluem todas as inserções, atualizações e exclusões feitas nas tabelas e colunas que ele monitora. Essas mudanças podem vir de:

Os streams de alterações podem acompanhar as alterações de dados apenas em fluxos de colunas e tabelas. Eles não monitoram índices, visualizações, outros fluxo de alterações, ou tabelas do sistema, como o esquema de informações ou as tabelas de estatísticas. As transmissões de mudança não observam colunas geradas, a menos que a coluna faça parte da chave primária. As colunas de chave primária são sempre rastreadas.

Além disso, os fluxos de alterações não monitoram mudanças de esquema ou alterações de dados resultantes diretamente de mudanças de esquema. Por exemplo, um fluxo de alterações que monitora um banco de dados inteiro não trata a exclusão de uma tabela como uma mudança de dados, mesmo que essa ação remova todos os dados dessa tabela do banco de dados.

Como o Spanner grava e armazena os fluxo de alterações

Sempre que o Spanner detecta uma mudança de dados em uma coluna que está sendo monitorada por um fluxo de alterações, ele grava um registro de alteração de dados no armazenamento interno. A gravação da alteração de dados e o registro da alteração de dados são gravados no mesmo transação. O Spanner colocaliza essas duas gravações para que sejam processadas pelo mesmo servidor, minimizando o processamento de gravação. A transação é replicadas nas réplicas do banco de dados, sujeitas ao armazenamento os custos de replicação do Compute Engine. Para mais informações, consulte Preços do Spanner.

Conteúdo de um registro de alteração de dados

Cada registro de alteração de dados gravado por um fluxo de alterações inclui as seguintes informações sobre a alteração de dados:

  • O nome da tabela afetada

  • Os nomes, valores e tipos de dados das chaves primárias que identificam as linha alterada

  • Os nomes e tipos de dados das colunas da linha alterada que foram capturados com base na definição do fluxo de mudanças.

  • Os valores antigos das colunas da linha. A disponibilidade dos valores antigos e o conteúdo que elas rastreiam, que podem ser apenas colunas modificadas ou toda a linha acompanhada, depende do tipo de captura de valor configurado pelo usuário.

  • Os novos valores das colunas da linha. A disponibilidade dos novos valores e o conteúdo que eles rastreiam dependem do tipo de captura de valor configurado pelo usuário.

  • O tipo da modificação (inserir, atualizar ou excluir)

  • O carimbo de data/hora da confirmação

  • O ID da transação

  • O número de sequência do registro

  • O tipo de captura de valor do registro de alteração de dados.

Para uma visão mais detalhada sobre a estrutura dos registros de alteração de dados, consulte Registros de alteração de dados.

Retenção de dados

Um fluxo de alterações retém os registros de alteração de dados por um período de um a sete dias. É possível usar DDL para especificar um limite de retenção de dados diferente do padrão de um dia ao criar um fluxo de alterações pela primeira vez ou ajustá-lo a qualquer momento no futuro. Reduzir o limite de retenção de dados de um fluxo de alterações fará com que dados de alteração históricos mais antigos que o novo limite imediatamente e fica permanentemente indisponível para os leitores do fluxo.

Esse período de armazenamento de dados apresenta um dilema: uma retenção mais longa de armazenamento tem maiores demandas de armazenamento no banco de dados do stream.

Tipo de captura de valor

A opção de configuração do tipo de captura de valor de um fluxo de mudanças controla a maneira como ele armazena os valores de uma linha alterada. É possível usar DDL para especificar um dos seguintes tipos de captura de valor para um fluxo de alterações:

  • OLD_AND_NEW_VALUES: captura os valores antigos e novos das colunas modificadas de uma linha.

  • NEW_VALUES: captura apenas os novos valores das colunas sem chave, mas nenhum valor antigo valores.

  • NEW_ROW: captura todos os novos valores das colunas observadas, modificadas e não modificadas, sempre que qualquer uma delas mudar. Nenhum valor antigo é capturado.

  • NEW_ROW_AND_OLD_VALUES: captura todos os novos valores de colunas modificadas e não modificadas, além dos valores antigos de colunas modificadas.

Excluir com base no time to live

No Spanner, o Time to live (TTL) permite defina políticas para excluir periodicamente dados das tabelas do Spanner. Por padrão, os fluxos de alterações incluem todas as exclusões com base no TTL. Você pode usar exclude_ttl_deletes para definir o fluxo de alterações e excluir exclusões baseadas em TTL. Quando você define esse filtro para excluir exclusões com base em TTL, apenas as exclusões futuras com base em TTL são excluídas do fluxo de mudanças.

O valor padrão desse filtro é false. Para excluir exclusões com base em TTL, defina o filtro como true. É possível adicionar o filtro ao criar um fluxo de alterações ou modificar um fluxo de alterações para incluir o filtro.

Tipo de modificação da tabela

Por padrão, os fluxo de alterações incluem todas as modificações da tabela, como inserções, atualizações e exclusões. Você pode filtrar uma ou mais dessas modificações de tabela do seu o escopo do fluxo de alterações usando as seguintes opções de filtro disponíveis:

  • exclude_insert: excluir todas as INSERT modificações da tabela
  • exclude_update: excluir todas as UPDATE modificações da tabela
  • exclude_delete: excluir todas as DELETE modificações da tabela

O valor padrão desses filtros é false. Para excluir um tipo específico de modificação da tabela, defina o filtro como true. É possível definir um ou mais filtros ao mesmo tempo.

É possível adicionar um filtro para um tipo de modificação de tabela ao criar um fluxo de mudanças ou modificar o filtro para um tipo de modificação de tabela em um fluxo de mudanças existente.

Como ler fluxo de alterações

O Spanner oferece várias maneiras de ler os dados de um fluxo de alterações:

  • Pelo Dataflow, usando o conector Apache Beam SpannerIO. Essa é a solução recomendada para a maioria dos aplicativos de fluxo de alterações. O Google também fornece modelos do Dataflow para casos de uso comuns.

  • Diretamente, usando a API Spanner. Com isso, e recursos dos pipelines do Dataflow para garantir o máximo velocidade e flexibilidade.

  • Usando o conector Kafka baseado em Debezium para fluxo de alterações do Spanner. Esse conector transmite registros de mudança diretamente para tópicos do Kafka.

É possível fornecer isolamento parcial para leituras de fluxo de alterações usando lê. As leituras direcionadas podem ajudar a minimizar o impacto nas cargas de trabalho transacionais em seu banco de dados. É possível usar a API Spanner para encaminhar as leituras de fluxos de mudança para um tipo ou região de réplica específica em uma configuração de instância multirregional ou uma configuração regional personalizada com regiões opcionais somente leitura. Para mais informações, consulte Leituras direcionadas.

Como usar o Dataflow

usar o conector SpannerIO do Apache Beam; para criar pipelines do Dataflow que leem fluxo de alterações. Depois de configurar o conector com detalhes sobre um fluxo de alterações específico, ele vai gerar automaticamente novos registros de alteração de dados em um único conjunto de dados PCollection sem limites, pronto para processamento adicional por transformações subsequentes no pipeline do Dataflow.

O Dataflow usa funções de janelamento para dividir coleções ilimitadas em componentes lógicos ou janelas. Como resultado, o Dataflow fornece streaming quase em tempo real quando lendo os fluxo de alterações.

O Google fornece modelos que permitem criar rapidamente pipelines do Dataflow para casos de uso comuns de fluxos de alterações, incluindo o envio de todas as alterações de dados de um fluxo para um conjunto de dados do BigQuery ou a cópia delas para um bucket do Cloud Storage.

Para uma visão geral mais detalhada de como fluxo de alterações e o Dataflow funcionam juntos, consulte Criar conexões de fluxo de alterações com o Dataflow.

Como usar a API

Como alternativa ao uso do Dataflow para criar o fluxo de alterações pipelines, é possível escrever código que usa A API Spanner para ler diretamente os registros de um fluxo de alterações. Isso permite ler registros de alterações de dados da mesma forma que o conector SpannerIO, trocando a abstração fornecida por latíneas o menor possível ao ler dados do fluxo de mudanças.

Para saber mais, consulte Consultar streams de alterações. Para uma visão mais detalhada discussão sobre como consultar fluxo de alterações e interpretar os registros retornados, consulte Alterar partições, registros e consultas de streams.

Como usar o conector Kafka

O conector do Kafka envia diretamente os registros de mudança de stream para um tópico do Kafka. Ele abstrai os detalhes da consulta de fluxo de alterações usando a API Spanner.

Para saber mais sobre como fluxo de alterações e o conector Kafka funcionam juntos, consulte Criar conexões de fluxo de alterações com o conector Kafka.

Limites

Há vários limites para os fluxo de alterações, incluindo o número máximo de fluxo de alterações que um banco de dados pode ter e o número máximo de fluxos que podem acompanhar uma única coluna. Para conferir uma lista completa, consulte Limites do fluxo de mudanças.

Permissões

As transmissões de mudança usam o seguinte:

  • A criação, atualização ou exclusão de fluxos de mudanças requer spanner.databases.updateDdl.

  • A leitura dos dados de um fluxo de alterações exige spanner.databases.select.

Se estiver usando o conector SpannerIO, o proprietário do O job do Dataflow que lê dados de fluxo de alterações exige permissões do IAM no banco de dados do aplicativo ou em um banco banco de dados de metadados consulte Criar um banco de dados de metadados.

A seguir