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) quase 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 aprender a 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 dados mudanças em outros serviços. Os casos de uso comuns incluem:

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

  • 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 conformidade para fins de arquivamento ou arquivamento.

Configuração do fluxo de alterações

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

Você pode configurar um fluxo de alterações para acompanhar as mudanças nos dados de uma o banco de dados inteiro ou limitar seu escopo a tabelas e colunas específicas. Um banco de dados pode ter vários fluxo de alterações e uma tabela ou coluna pode ter várias transmissões assistindo, dentro limites de desempenho.

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.

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

Observação implícita de tabelas e colunas

Os streams de alteração que observam uma tabela inteira observam implicitamente todos os colunas nessa tabela, mesmo quando a definição da tabela é atualizada. Para Por exemplo, quando você adiciona colunas à tabela, o fluxo de alterações começa a monitorar essas novas colunas automaticamente, sem precisar 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 assistem implicitamente cada coluna em cada tabela, monitorando automaticamente qualquer tabela ou colunas adicionadas após a criação do fluxo de alterações e deixar 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 de alterações não começar a monitorar essas colunas, a menos que você reconfigure essa mudança para fazer isso.

O esquema do banco de dados trata fluxo de alterações como objetos dependentes de qualquer as colunas ou tabelas que eles observam explicitamente. Antes de descartar essa coluna ou tabela, será preciso removê-la manualmente da configuração de qualquer fluxo de alterações que esteja explicitamente observá-lo.

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

As mudanças de dados observadas por um fluxo de alterações incluem todas as inserções, atualizações e exclusões feitas nas tabelas e colunas que ele observa. Esses as 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. Alterar fluxos não observam as colunas geradas, a menos que a coluna faça parte do chave primária. As colunas de chave primária são sempre rastreadas.

Além disso, os fluxo de alterações não observam alterações de esquema nem quaisquer dados que resultam diretamente das mudanças no esquema. Por exemplo, uma mudança assistir a um stream de um banco de dados inteiro não trataria o descarte de uma tabela como mudança de dados, embora essa ação remova todos os dados da 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 observados por um fluxo de alterações, ele grava um registro de alteração de dados no seu armazenamento interno. Ele faz isso de forma síncrona com os dados mudança, na mesma transação. O Spanner é colocado em conjunto ambas as gravações para que sejam processadas pelo mesmo servidor, o que minimiza o processamento de gravação.

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 o informações a seguir sobre a mudança nos 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 capturadas com base na definição do fluxo de alterações.

  • 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. Disponibilidade dos novos valores e o conteúdo que 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 retém os registros de alteração de dados por um período de tempo entre um e sete dias. É possível usar DDL para especifique um limite de retenção de dados diferente do padrão de um dia quando inicialmente criando um fluxo de alterações ou ajustá-lo a qualquer momento 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 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 alterações controla o modo como 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 dos modificações de uma linha colunas.

  • NEW_VALUES: captura apenas os novos valores das colunas sem chave, mas nenhum valor antigo e a distribuição dos valores dos dados.

  • NEW_ROW: captura todos os novos valores das colunas observadas, modificadas e sem modificações, sempre que uma dessas colunas é alterada. Nenhum valor antigo é capturado.

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

Excluir exclusões baseadas 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 fluxo de alterações incluem todas as exclusões baseadas em TTL. Você pode usar exclude_ttl_deletes para definir o fluxo de alterações e excluir exclusões baseadas em TTL. Quando defina esse filtro para excluir exclusões baseadas em TTL, somente exclusões futuras baseadas em TTL são excluídos 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 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 ao mesmo tempo.

Você pode adicionar um filtro para um tipo de modificação da tabela. quando você cria um fluxo de alterações 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 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. 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 alterações diretamente para os 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 rotear mudanças transmite leituras para um tipo de réplica ou região específica dentro de uma multirregião configuração de instância ou uma configuração regional personalizada com opções regiões 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 configure o conector com detalhes sobre um fluxo de alterações específico, ele gera automaticamente novos dados e alterar registros em uma tabela PCollection pronto para ser processado 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 fluxo de alterações, incluindo enviar todas as alterações de dados de um stream a um conjunto de dados do BigQuery ou copiá-los para um do Google 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 que você leia os registros de alteração de dados da mesma maneira que o faz, trocando a abstração que fornece em troca para as menores latências possíveis ao ler o fluxo de alterações dados.

Para saber mais, consulte Fluxos de alterações de consultas. 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 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 fluxos que podem acompanhar uma única coluna. Para acessar uma lista completa, consulte Fluxo de alterações limites de desempenho.

Permissões

Os fluxos de alterações usam o seguinte:

  • Criar, atualizar ou descartar fluxo de alterações exige 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 O job do Dataflow que lê dados de fluxo de alterações exige as 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