Como simular o TTL no nível de célula

No Cloud Bigtable, as políticas de coleta de lixo são definidas no nível da família de colunas e não é possível especificar essa política no nível da célula. No entanto, é possível simular uma política de time to live (TTL, na sigla em inglês) no nível da célula, alterando as configurações de coleta de lixo. Esta página explica algumas abordagens diferentes que podem ser usadas.

Antes de ler esta página, leia a visão geral da coleta de lixo.

Expiração de um segundo

Nessa abordagem, defina a regra de coleta de lixo para permitir que os dados expirem após um segundo. Sempre que gravar dados, defina o carimbo de data/hora da célula para o horário em que o valor deverá expirar. Durante a compactação, o coletor de lixo removerá todas as células com um carimbo de data/hora que tenha pelo menos um segundo no passado. Por exemplo, se você definir o carimbo de data/hora de uma célula para 30 de abril às 9:00:00, a célula será coletada após as 9:00:01 de 30 de abril. Essa abordagem permite definir valores de expiração diferentes para células diferentes na mesma família de colunas.

Prós

  • O carimbo de data/hora tem um significado real, o tempo de expiração.

Contras

  • Todo aplicativo que grava dados nessa família de colunas do Cloud Bigtable precisa ser configurado para seguir essa regra. Se você esquecer e usar um carimbo de data/hora do servidor padrão em uma gravação, esses dados expirarão imediatamente e serão removidos durante a próxima compactação.

  • Como os carimbos de data/hora não são "reais", não é possível usá-los para nenhum outro caso de uso, como determinar quando um valor foi gravado. Como solução alternativa, é possível gravar o carimbo de data/hora real em uma coluna separada, mas isso aumentará a quantidade de dados armazenados.

  • Não é possível implementar essa estratégia em uma família de colunas que já tenha dados com carimbos de data/hora reais. Se os dados atuais tiverem carimbos de data/hora reais, ou se você acidentalmente gravar novos dados com carimbos de data/hora reais, esses dados serão removidos durante a próxima compactação.

  • Não é possível especificar que várias células de uma determinada linha e coluna devem expirar ao mesmo tempo. Novos dados sobrescreverão dados antigos com o mesmo carimbo de data/hora.

  • Como a coleta de lixo pode levar até uma semana, será sempre necessário usar filtros ao ler os dados.

Expiração padrão

Digamos que você queira que a maioria dos dados tenha um TTL padrão, mas quer definir diferentes valores de expiração por célula para alguns destes dados.

Por exemplo, é possível armazenar eventos de clique para dez clientes em uma tabela. A maioria dos eventos de cliques deve expirar após dois dias, mas os eventos de clique de um dos clientes devem expirar após uma hora e os de outro cliente devem expirar após três dias.

Nessa abordagem, crie a família de colunas com um limite de idade para a coleta de lixo definida como o TTL padrão. Para os dados que devem expirar antes do padrão, defina o carimbo de data/hora para antes do horário em que os dados são realmente gravados. Para os dados que você quer que expirem mais tarde, configure o carimbo de data/hora para depois do horário em que os dados são realmente gravados.

Prós

  • Um TTL padrão está em vigor para gravações que não têm um TTL personalizado.

  • Essa abordagem pode ser aplicada com segurança a uma tabela pré-existente.

Contras

  • O carimbo de data/hora não é semanticamente significativo porque, para cada célula, ele pode ser real ou artificial. Isso significa que não é possível usar os carimbos de data/hora das células para nenhum outro caso de uso, como determinar quando um valor foi gravado. Como solução alternativa, é possível gravar o carimbo de data/hora real em uma coluna separada, mas isso aumentará a quantidade de dados armazenados.

  • É possível gravar, inadvertidamente, um carimbo de data/hora personalizado que entre em conflito com um carimbo de data/hora real em uma determinada coluna.

  • Como a coleta de lixo é assíncrona, ainda será necessário usar filtros ao ler os dados usando essa estratégia.

Próximas etapas

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud Bigtable