Visão geral do fluxo de alterações

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

Esta página oferece uma visão geral de alto nível dos fluxos de alterações do Spanner: o que eles fazem e como funcionam. Para saber como criar e gerenciar fluxo de alterações no banco de dados e conectá-los a outros serviços, siga os links em Próximas etapas.

Finalidade dos fluxo de alterações

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

  • Replicar as alterações de dados do Spanner em um data warehouse, como o BigQuery, para análise.

  • Acionamento da lógica do aplicativo com base em alterações de dados enviadas para uma fila de mensagens, como o Pub/Sub.

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

Configuração do fluxo de alterações

O Spanner trata os fluxo de alterações como objetos de esquema, bem como tabelas e índices. Assim, é possível criar, modificar e excluir fluxos de alterações usando instruções DDL e visualizar os fluxos de alterações de um banco de dados, assim como outros objetos de esquema gerenciados por DDL.

É possível configurar um fluxo de alterações para observar alterações de dados em todo o banco de dados ou limitar o escopo a tabelas e colunas específicas. Um banco de dados pode ter vários fluxo de alterações, e uma determinada tabela ou coluna pode ter vários fluxos assistindo, dentro dos limites.

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

A emissão da DDL que cria um fluxo de alterações inicia uma operação de longa duração. Quando ele é concluído, o novo fluxo de alterações começa imediatamente a observar as tabelas e colunas atribuídas a ele.

Como monitorar tabelas e colunas de forma implícita

Os streams de alteração que observam uma tabela inteira observa implicitamente todas as colunas dela, mesmo quando a definição da tabela é atualizada. Por exemplo, quando você adiciona novas colunas a essa tabela, o fluxo de alterações começa automaticamente a observar essas novas colunas, sem precisar de nenhuma modificação na configuração dele. Da mesma forma, o fluxo de alterações para automaticamente de observar qualquer coluna que seja descartada dessa tabela.

Fluxo de alterações de todo o banco de dados funcionam da mesma forma. Eles implicitamente observam cada coluna em todas as tabelas, monitorando automaticamente quaisquer tabelas ou colunas adicionadas após a criação do fluxo de alterações e parando de observar quaisquer tabelas ou colunas descartadas.

Monitorar explicitamente tabelas e colunas

Se você configurar um fluxo de alterações para observar apenas colunas específicas em uma tabela e, posteriormente, adicionar colunas a essa tabela, o fluxo de alterações não começará a observar essas colunas, a menos que você reconfigure esse fluxo de alterações para fazer isso.

O esquema do banco de dados trata os fluxo de alterações como objetos dependentes de quaisquer colunas ou tabelas que eles observam explicitamente. Antes de descartar qualquer coluna ou tabela, é necessário removê-la manualmente da configuração de qualquer fluxo de alterações que esteja monitorando essa coluna explicitamente.

Tipos de mudanças de dados que fluxo de alterações assistem

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

Os fluxos de alterações só podem observar alterações de dados em colunas e tabelas criadas pelo usuário. Eles não observam índices, visualizações, outros fluxo de alterações ou tabelas do sistema, como tabelas de esquema de informações ou estatísticas. Os fluxos de alterações não observam as 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 fluxo de alterações não observam mudanças de esquema ou qualquer mudança de dados que seja resultado direto de mudanças de esquema. Por exemplo, um fluxo de alterações que monitora um banco de dados inteiro não trata a eliminação de uma tabela como uma alteração de dados, mesmo que essa ação remova todos os dados dessa tabela do banco de dados.

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

Sempre que o Spanner detecta uma alteração de dados em uma coluna monitorada por um fluxo de alterações, ele grava um registro de alteração de dados no armazenamento interno. Isso é feito de forma síncrona com essa mudança de dados, na mesma transação. O Spanner colocaliza as duas gravações para que sejam processadas pelo mesmo servidor, minimizando o processamento de gravação.

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

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

  • O nome da tabela afetada

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

  • Os nomes e tipos de dados das colunas da linha alterada que foram capturadas com base na definição do fluxo de alterações.

  • Os valores antigos das colunas da linha. A disponibilidade dos valores antigos e do conteúdo que eles rastreiam, que podem ser apenas as colunas modificadas ou toda a linha rastreada, 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 de modificação (inserir, atualizar ou excluir)

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

  • O ID da transação

  • O número de sequência do registro

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

Para uma visão mais aprofundada da 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 entre um e sete dias. É possível usar DDL para especificar um limite de retenção de dados diferente do padrão de um dia ao criar inicialmente um fluxo de alterações ou ajustá-lo a qualquer momento no futuro. Observe que a redução do limite de retenção de dados de um fluxo de alterações tornará todos os dados de alterações históricos mais antigos que o novo limite imediatamente e permanentemente indisponíveis para os leitores desse fluxo de alterações.

Esse período de armazenamento de dados apresenta uma compensação: um período de armazenamento mais longo exige 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 alterações 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 valores antigos e novos das colunas modificadas de uma linha.

  • NEW_VALUES: captura apenas os novos valores das colunas que não são chave, mas não os valores antigos.

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

  • NEW_ROW_AND_OLD_VALUES: captura todos os novos valores para colunas modificadas e não modificadas e valores antigos para colunas modificadas.

Excluir exclusões baseadas em time to live (TTL)

No Spanner, o Time to Live (TTL) permite definir políticas para excluir periodicamente os dados das tabelas do Spanner. Por padrão, os fluxo de alterações incluem todas as exclusões baseadas em TTL. É possível usar exclude_ttl_deletes para definir seu fluxo de alterações para excluir exclusões baseadas em TTL. Quando você define esse filtro para excluir exclusões baseadas em TTL, apenas exclusões futuras baseadas em TTL são excluídas do seu fluxo de alterações.

O valor padrão para esse filtro é false. Para excluir exclusões baseadas 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 existente para incluí-lo.

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. É possível filtrar uma ou mais dessas modificações de tabela do escopo do fluxo de alterações usando as seguintes opções de filtro disponíveis:

  • exclude_insert: exclui todas as INSERT modificações da tabela
  • exclude_update: exclui todas as UPDATE modificações da tabela
  • exclude_delete: exclui 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. Você pode 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 alterações ou modificar o filtro para um tipo de modificação de tabela de um fluxo de alterações atual.

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 do 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. Isso evita a abstração e os recursos dos pipelines do Dataflow para máxima velocidade e flexibilidade.

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

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

Como usar o Dataflow

Use o conector do Apache Beam SpannerIO para criar pipelines do Dataflow que leiam os fluxo de alterações. Depois de configurar o conector com detalhes sobre um fluxo de alterações específico, ele gera automaticamente novos registros de alteração de dados em um único conjunto de dados PCollection ilimitado, 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, com aproximadamente seis segundos de latência ao ler os fluxo de alterações.

O Google fornece modelos que permitem criar rapidamente pipelines do Dataflow para casos de uso comuns de fluxo de alterações, incluindo o envio de todas as alterações de dados de um stream 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 os 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 pipelines de fluxo de alterações, é possível escrever o código que usa a API Spanner para ler os registros de um fluxo de alterações diretamente. Assim, é possível ler os registros de alteração de dados da mesma forma que o conector do SpannerIO, trocando a abstração que ele fornece em troca das menores latências possíveis ao ler os dados do fluxo de alterações.

Para saber mais, acesse Consultar fluxos de alterações. Para ver uma discussão mais detalhada 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 do Kafka

O conector do Kafka gera diretamente registros de fluxo de alterações em 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 do Kafka funcionam juntos, consulte Criar conexões de fluxo de alterações com o conector do Kafka.

Limites

Existem vários limites nos 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 assistir a uma única coluna. Para ver uma lista completa, consulte Limites do fluxo de alterações.

Permissões

Os fluxos de alterações usam o seguinte:

  • A criação, atualização ou descarte fluxo de alterações requer spanner.databases.updateDdl.

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

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

A seguir