Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Simular TTL a nivel de la celda
En Bigtable, las políticas de recolección de elementos no utilizados se establecen a nivel de familia de columnas, y no puedes especificar una política de este tipo a nivel de celda. Sin embargo, puedes simular una política de tiempo de actividad (TTL) a nivel de la celda cambiando la configuración de recolección de elementos no utilizados. En esta página, se explican algunos enfoques diferentes que puedes usar.
En este enfoque, configura tu regla de recolección de elementos no utilizados para que los datos caduquen después de un segundo. Cuando escribas datos, establece la marca de tiempo de la celda en el momento en que deseas que caduque el valor. Durante la compactación, Bigtable borra las celdas que tienen una marca de tiempo de al menos un segundo en el pasado. Por ejemplo, si configuras la marca de tiempo de una celda para el 30 de abril a las 9:00:00 a.m., la celda se borrará en algún momento después del 30 de abril a las 9:00:01 a.m. Este enfoque te permite establecer diferentes valores de vencimiento para distintas celdas en la misma familia de columnas.
Ventajas de la caducidad de un segundo
La marca de tiempo tiene un significado real: el tiempo de caducidad.
Desventajas de la caducidad de un segundo
Todas las aplicaciones que escriben datos en esta familia de columnas de Bigtable deben configurarse para seguir esta regla. Si te olvidas y usas una marca de tiempo predeterminada del servidor en una escritura, los datos caducan de inmediato y se borran durante la siguiente compactación.
Debido a que tus marcas de tiempo no son “reales”, no puedes usar marcas de tiempo para ningún otro caso práctico, como determinar cuándo se escribió un valor. Como solución alternativa, puedes escribir la marca de tiempo real en una columna separada, pero esto aumentará la cantidad de datos que almacenas.
No puedes implementar esta estrategia en una familia de columnas que ya tiene datos con marcas de tiempo reales. Si los datos existentes tienen marcas de tiempo reales, o si accidentalmente escribes datos nuevos con marcas de tiempo reales, estos se borran durante la siguiente compactación.
No puedes especificar que varias celdas de una fila y columna dadas caduquen al mismo tiempo que otras. Los datos nuevos reemplazarán los datos antiguos con la misma marca de tiempo.
Debido a que la recolección de elementos no utilizados puede demorar hasta una semana, siempre debes usar filtros cuando leas los datos.
Vencimiento predeterminado
Supongamos que deseas que la mayoría de tus datos tengan un TTL predeterminado, pero quieres establecer diferentes valores de vencimiento por celda para algunos de tus datos.
Por ejemplo, puedes almacenar eventos de clic para diez clientes en una tabla. La mayoría de los eventos de clic deben vencer después de 2 días, pero tienes un cliente cuyos eventos de clic deben vencer después de una hora, y otro cuyos eventos de clic deben vencer después de 3 días.
En este enfoque, crea la familia de columnas con un límite de antigüedad para la recolección de elementos no utilizados, establecido en el TTL predeterminado. Si quieres que algunos datos venzan antes del tiempo predeterminado, configura una marca de tiempo anterior a la hora en que estos se escribieron. Con los datos que deseas que venzan más adelante, configura una marca de tiempo posterior a la hora en que se escribieron los datos.
Ventajas del vencimiento predeterminado
Existe un TTL predeterminado para escrituras que no tienen un TTL personalizado.
Este enfoque puede aplicarse con seguridad a una tabla preexistente.
Desventajas del vencimiento predeterminado
La marca de tiempo no es semánticamente significativa porque la marca de tiempo de una celda puede ser real o artificial. Esto significa que no puedes usar las marcas de tiempo de las celdas para ningún otro caso práctico, como determinar cuándo se escribió un valor.
Como solución alternativa, puedes escribir la marca de tiempo real en una columna separada, pero esto aumentará la cantidad de datos que almacenas.
Puedes escribir, sin darte cuenta, una marca de tiempo personalizada que entre en conflicto con una marca de tiempo real en una columna determinada.
Debido a que la recolección de elementos no utilizados es asíncrona, siempre debes usar filtros cuando leas los datos si usas esta estrategia.
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-09-04 (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\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\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\nAdvantages of one-second expiration\n\n- The timestamp has a real meaning: the expiration time.\n\nDisadvantages 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\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\nAdvantages 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\nDisadvantages 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- 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)."]]