Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Simular o TTL no nível de célula
No Bigtable, as políticas de coleta de lixo são definidas no
nível do grupo 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.
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 Bigtable exclui todas as células
que têm um carimbo de data/hora que esteja 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á excluída
após as 9:00:01 de 30 de abril. Essa abordagem permite definir
valores de expiração diferentes para células diferentes no mesmo grupo de colunas.
Vantagens da expiração de um segundo
O carimbo de data/hora tem um significado real, o tempo de expiração.
Desvantagens da expiração em um segundo
Todo aplicativo que grava dados nesse grupo de colunas do
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 excluídos 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 excluídos
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 substituirã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 seu grupo de colunas com um limite de idade para a coleta de lixo definida como o TTL padrão. Para os dados que você quer que expirem antes do padrão, defina o carimbo de data/hora como anterior ao horário em que os dados foram 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.
Vantagens da expiração padrão
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.
Desvantagens da expiração padrão
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.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Informações incorretas ou exemplo de código","incorrectInformationOrSampleCode","thumb-down"],["Não contém as informações/amostras de que eu preciso","missingTheInformationSamplesINeed","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-08-27 UTC."],[[["\u003cp\u003eThis page details methods to simulate cell-level time-to-live (TTL) policies in Bigtable, which natively only supports garbage collection at the column family level.\u003c/p\u003e\n"],["\u003cp\u003eThe "one-second expiration" approach involves setting a column family's garbage collection rule to expire data after one second, with the cell's timestamp set to the desired expiration time.\u003c/p\u003e\n"],["\u003cp\u003eThe "default expiration" strategy involves setting a default TTL at the column family level, while allowing for per-cell adjustments by manipulating the cell's timestamp.\u003c/p\u003e\n"],["\u003cp\u003eBoth expiration approaches use timestamps that may not be semantically meaningful for data creation time and require filters when reading data due to asynchronous garbage collection.\u003c/p\u003e\n"],["\u003cp\u003eBoth approaches have some advantages, such as how default expiration can be safely applied to pre-existing table, but also disadvantages such as the data write process needing to be configured correctly in the one-second approach.\u003c/p\u003e\n"]]],[],null,["# Simulate cell-level TTL\n=======================\n\nIn Bigtable, garbage collection policies are set at the\ncolumn family level, and you cannot specify a cell-level garbage collection\npolicy. However, you can simulate a time to live (TTL) policy at the cell level\nby changing your garbage collection settings. This page explains a few different\napproaches that you can use.\n\nBefore you read this page, you should read the [garbage collection overview](/bigtable/docs/garbage-collection). To learn how to send write requests, which\ninclude timestamps, see [Bigtable writes](/bigtable/docs/writes).\n\nOne-second expiration\n---------------------\n\nIn this approach, set your garbage collection rule to let data expire after one\nsecond. Whenever you write data, set the cell's timestamp to the time you want\nthe value to expire. During compaction, Bigtable deletes any cells\nthat have a timestamp that is at least one second in the past. For example, if\nyou set a cell's timestamp to April 30 at 9:00:00 AM, the cell is deleted\nsometime after April 30 at 9:00:01 AM. This approach enables you to set\ndifferent expiration values for different cells in the same column family.\n\n### Advantages of one-second expiration\n\n- The timestamp has a real meaning: the expiration time.\n\n### Disadvantages of one-second expiration\n\n- Every application that writes data to this Bigtable column\n family needs to be configured to follow this rule. If you forget and use a\n default server timestamp on a write, that data expires right away\n and is deleted during the next compaction.\n\n- Because your timestamps aren't \"real\" you cannot use timestamps for any other\n use case, such as determining when a value was written. As a workaround, you can\n write the real timestamp to a separate column, but this will increase the amount\n of data you store.\n\n- **You cannot implement this strategy on a column family that already has data\n with real timestamps.** If existing data has real timestamps, or if you\n accidentally write new data with real timestamps, that data is deleted\n during the next compaction.\n\n- You cannot specify that multiple cells for a given row and column should\n expire at the same time as each other. New data will overwrite old data with the\n same timestamp.\n\n- Because garbage collection can take up to a week, you always need to use\n filters when you read the data.\n\nDefault expiration\n------------------\n\nLet's say you want most of your data to have a default TTL, but you want to set\ndifferent per-cell expiration values for some of your data.\n\nFor example, you might store click events for ten customers in one table. Most\nof the click events should expire after 2 days, but you have one customer whose\nclick events should expire after an hour, and you have another customer whose\nclick events should expire after 3 days.\n\nIn this approach, create your column family with an age limit for garbage\ncollection set to the default TTL. For data you want to expire sooner than the\ndefault, set the timestamp to be earlier than the time the data is actually\nwritten. For data you want to expire later, set the timestamp to be later than\nthe time the data is actually written.\n\n### Advantages of default expiration\n\n- A default TTL is in place for writes that do not have a custom TTL.\n\n- This approach can safely be applied to a pre-existing table.\n\n### Disadvantages of default expiration\n\n- The timestamp is not semantically meaningful because a cell's timestamp\n might be real or artificial. This means you cannot use the cells'\n timestamps for any other use case, such as determining when a value was written.\n As a workaround, you can write the real timestamp to a separate column, but\n this will increase the amount of data you store.\n\n- You can inadvertently write a custom timestamp that clashes with a real\n timestamp in a given column.\n\n- Because garbage collection is asynchronous, you still need to always use\n filters when you read the data when you use this strategy.\n\nWhat's next\n-----------\n\n- Read about garbage collection with [timestamps that are sequential numbers](/bigtable/docs/gc-sequence-numbers).\n- Learn a strategy to [always read the most recent value of a column](/bigtable/docs/keep-only-latest-value).\n- Review code samples showing how to [configure garbage collection](/bigtable/docs/configuring-garbage-collection).\n- Learn more about [storage pricing](/bigtable/pricing#storage)."]]