Limites de carimbo de data/hora

Introdução

Ao ler dados no Spanner em uma transação somente leitura ou em uma chamada de leitura única, é possível definir um limite de carimbo de data/hora, que informa ao Spanner como escolher um carimbo de data/hora para ler os dados.

Por que configurar um limite do carimbo de data/hora? Se o banco de dados for distribuído geograficamente (ou seja, você criou sua instância do Spanner usando uma configuração de instância multirregional) e o aplicativo puder tolerar alguma inatividade ao ler dados, será possível ter benefícios de latência ao executar uma leitura desatualizada em vez de uma leitura forte. Saiba mais sobre esses tipos de leitura em Leituras.

Tipos de limites do carimbo de data/hora

Os tipos de limite do carimbo de data/hora são:

  • Forte (o padrão): lê os dados mais recentes.
  • Inatividade limitada: lê uma versão dos dados que não é mais inativa do que um limite.
  • Inatividade exata: lê a versão dos dados em um carimbo de data/hora exato, por exemplo, como um ponto no tempo no passado, mas é possível especificar um carimbo de data/hora para um momento que ainda não passou. Se você especificar um carimbo de data/hora no futuro, o Spanner aguardará esse carimbo de data/hora antes de atender à leitura.

Observações:

  • As leituras que usam esses modos de limite de carimbo de data/hora não fazem parte de uma transação de leitura e gravação, mas elas podem bloquear a espera de transações de leitura e gravação simultâneas para efetivação. As leituras de inatividade limitada tentam escolher um carimbo de data/hora para evitar o bloqueio, mas ainda assim é possível que o bloqueio ocorra.

  • As leituras desatualizadas (ou seja, que usam os tipos de inatividade exata ou limitada) têm o benefício de desempenho máximo em intervalos de inatividade mais longos. Use um mínimo de inatividade de 10 segundos para que seja vantajoso.

  • O Spanner monitora o earliest_version_time de um banco de dados, que especifica o primeiro momento em que as versões anteriores dos dados podem ser lidas. Não é possível ler em um carimbo de data/hora anterior ao horário da primeira versão.

Os tipos de limite de carimbo de data/hora do Spanner são explicados em mais detalhes abaixo.

Fornecedores

O Spanner oferece um tipo de limite para leituras fortes. As leituras fortes têm garantia de visualização dos efeitos de todas as transações que tenham sido confirmadas antes do início da leitura. Além disso, todas as linhas produzidas por uma única leitura são consistentes entre si. Se qualquer parte da leitura observa uma transação, todas as partes da leitura também a veem.

Leituras fortes não são repetitivas: duas transações fortes somente leitura consecutivas podem retornar resultados inconsistentes se houver gravações simultâneas. Se for necessária consistência entre as leituras, execute-as dentro da mesma transação ou em um carimbo de data/hora de leitura exato.

Inatividade limitada

O Spanner oferece um tipo de limite para inatividade limitada. Os modos de inatividade limitada permitem que o Spanner escolha o carimbo de data/hora de leitura, sujeito a um limite de inatividade fornecido pelo usuário. O Spanner escolhe o carimbo de data/hora mais recente dentro do limite de inatividade que permite a execução das leituras na réplica disponível mais próxima sem bloqueio.

Todas as linhas produzidas são consistentes entre si. Se alguma parte da leitura observa uma transação, todas as partes da leitura também a veem. As leituras desatualizadas limitadas não são repetíveis: duas leituras desatualizadas, por mais que usem o mesmo limite de inatividade, podem ser executadas com carimbo de data/hora diferentes e, assim, retornar resultados inconsistentes.

As leituras inativas limitadas são geralmente um pouco mais lentas do que as leituras inativas exatas comparáveis.

Inatividade exata

O Spanner oferece um tipo de limite para a inatividade exata. Esses limites de carimbo de data/hora realizam leituras em um carimbo de data/hora especificado pelo usuário. As leituras no carimbo de data/hora garantem a consulta de um prefixo consistente do histórico de transações globais: elas observam modificações feitas por todas as transações com um carimbo de data/hora de confirmação menor ou igual ao carimbo de data/hora de leitura e observam que nenhuma das modificações foi feita por transações com um carimbo de data/hora de confirmação maior. Elas bloquearão até que todas as transações conflitantes que possam ser atribuídas ao carimbo de data/hora de confirmação menor ou igual ao carimbo de data/hora de leitura tenham terminado.

O carimbo de data/hora pode ser expresso como um carimbo de data/hora de confirmação absoluto do Spanner ou uma inatividade relativa ao horário atual.

Esses modos não exigem uma "fase de negociação" para escolher um carimbo de data/hora. Como resultado, eles são executados um pouco mais rapidamente que os modos simultâneos desatualizados limitados equivalentes. Por outro lado, as leituras desatualizadas limitadas geralmente retornam resultados mais recentes.

Inatividade máxima do carimbo de data/hora

O Spanner coleta continuamente os dados excluídos e substituídos em segundo plano para liberar espaço de armazenamento. Esse processo é conhecido como GC de versão. O GC de versões recupera versões depois da expiração do version_retention_period de um banco de dados, que é o padrão para uma hora, mas pode ser configurado para até uma semana. Essa restrição também se aplica a leituras em andamento e/ou consultas SQL em que o carimbo de data/hora se torna muito antigo durante a execução. As consultas SQL e as leituras com carimbo de data/hora de leitura muito antigo apresentam falha com o erro FAILED_PRECONDITION. A única exceção é Leitura/consulta de partição com tokens de partição, que evitarão a coleta de lixo de dados expirados enquanto a sessão permanecer ativa.