Visão geral do fluxo de alterações

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

Nesta página, você encontra uma visão geral 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, acesse os links em Próximas etapas.

Objetivo dos fluxo de alterações

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

  • Replicar 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 arquivamento.

Configuração do fluxo de alterações

O Spanner trata fluxo de alterações como objetos de esquema, 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 como outros objetos de esquema gerenciados por DDL.

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

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

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

Observação implícita de tabelas e colunas

Os streams de alterações que observam uma tabela inteira observam implicitamente todas as colunas nessa tabela, mesmo quando essa definição é 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 exigir nenhuma modificação na configuração desse fluxo. Da mesma forma, o fluxo de alterações para automaticamente de monitorar todas as colunas descartadas dessa tabela.

Fluxo de alterações do banco de dados inteiro funcionam da mesma maneira. Eles observam implicitamente cada coluna em cada tabela, monitorando automaticamente todas as 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 depois adicionar colunas a ela, o fluxo não começará a observar essas colunas, a menos que você reconfigure esse fluxo para fazer isso.

O esquema do banco de dados trata os fluxo de alterações como objetos dependentes de qualquer coluna ou tabela 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 observando-o explicitamente.

Tipos de mudanças de dados que fluxo de alterações de exibição

As alterações 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 mudanças de dados somente 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 o esquema de informações ou tabelas de 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 as mudanças de esquema ou quaisquer mudanças de dados que resultam diretamente de mudanças de esquema. Por exemplo, um fluxo de alterações que monitora um banco de dados inteiro não trataria o descarte 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 os 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. Ela faz isso de forma síncrona com essa alteração de dados, dentro da mesma transação. O Spanner coloca as duas gravações em conjunto 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 capturados 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 colunas modificadas ou a linha inteira 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 do conteúdo que eles rastreiam depende 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 mantém os registros de alteração de dados por um período entre um e sete dias. Use DDL para especificar um limite de retenção de dados diferente do padrão de um dia ao criar um fluxo de alterações ou ajustá-lo a qualquer momento. Reduzir o 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 vão ficar indisponíveis para os leitores desse fluxo.

Esse período de armazenamento de dados tem uma desvantagem: um período de armazenamento mais longo carrega maiores demandas de armazenamento no banco de dados do stream.

Tipo de captura de valor

A opção de configuração de 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 os valores antigos e novos das colunas modificadas de uma linha.

  • NEW_VALUES: captura apenas os novos valores das colunas que não são de chave, mas nenhum valor antigo.

  • NEW_ROW: captura todos os novos valores de colunas observadas, modificados e não modificados, sempre que qualquer uma dessas colunas é alterada. 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 no tempo de vida útil

No Spanner, o Time to live (TTL) permite definir políticas para excluir periodicamente 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 o fluxo de alterações e excluir exclusões baseadas em TTL. Quando você define esse filtro para excluir exclusões baseadas em TTL, somente as exclusões futuras baseadas em TTL são excluídas do fluxo de alterações.

O valor padrão desse 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 atual para incluir o filtro.

Tipo de modificação da tabela

Por padrão, os fluxo de alterações incluem todas as modificações de tabela, como inserções, atualizações e exclusões. É possível filtrar uma ou mais dessas modificações da tabela do 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 de 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 de 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 SpannerIO do Apache Beam. 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 substitui a abstração e os recursos dos pipelines do Dataflow para máxima velocidade e flexibilidade.

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

Você pode 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 seu banco de dados. É possível usar a API Spanner para rotear leituras de streams de alteração para um tipo de réplica ou região específico dentro de 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 SpannerIO do Apache Beam para criar pipelines do Dataflow que leem de 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 oferece streaming quase em tempo real ao ler de 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 enviar todas as alterações de dados de um fluxo para um conjunto de dados do BigQuery ou copiá-las 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 um código que usa a API Spanner para ler os registros de um fluxo de alterações diretamente. Isso permite que você leia registros de alteração de dados da mesma maneira que o conector SpannerIO faz, trocando a abstração que ele fornece em troca das latências mais baixas possíveis ao ler os dados do fluxo de alterações.

Para saber mais, consulte Fluxos de alterações de consultas. Para uma discussão mais detalhada sobre como consultar fluxo de alterações e interpretar os registros retornados, consulte Partições, registros e consultas dos streams.

Como usar o conector Kafka

O conector Kafka gera diretamente registros de fluxo de alterações 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 streams que podem assistir a uma única coluna. Para conferir uma lista completa, consulte Limites do fluxo de mudanças.

Permissões

Os fluxos de alterações usam o seguinte:

  • Para criar, atualizar ou descartar fluxo de alterações, é necessário usar spanner.databases.updateDdl.

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

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

A seguir