Información general sobre la recolección de elementos no utilizados

En esta página se describe cómo funciona la recogida de elementos no utilizados en Bigtable y se tratan los siguientes temas:

  • Tipos de recolección de elementos no utilizados
  • Configuración predeterminada de la recolección de elementos no utilizados
  • Cuándo se eliminan los datos
  • Cambios en las políticas de recolección de elementos no utilizados de las tablas replicadas

Información general sobre la recolección de memoria residual

La recolección de elementos no utilizados es el proceso automático y continuo de eliminar datos obsoletos y caducados de las tablas de Bigtable. Una política de recolección de elementos no utilizados es un conjunto de reglas que creas para indicar cuándo ya no se necesitan los datos de una familia de columnas específica.

La recolección de elementos no utilizados es un proceso en segundo plano asíncrono integrado. Los datos aptos para la recogida de elementos no utilizados pueden tardar hasta una semana en eliminarse. La recogida de elementos no utilizados se realiza según una programación fija que no varía en función de la cantidad de datos que se deban eliminar. Hasta que se eliminen los datos, aparecerán en los resultados de lectura. Puedes filtrar tus lecturas para excluir estos datos.

Estas son algunas de las ventajas de las políticas de recogida de elementos no utilizados:

  • Minimizar el tamaño de las filas: siempre debes evitar que las filas crezcan indefinidamente. Las filas grandes afectan negativamente al rendimiento. Lo ideal es que el tamaño de una fila no supere los 100 MB, y el límite es de 256 MB. Si no necesitas conservar datos antiguos o versiones anteriores de tus datos actuales, usar la recogida de elementos no utilizados puede ayudarte a minimizar el tamaño de cada fila.
  • Reduce los costes: la recogida de elementos no utilizados asegura que no pagues por almacenar datos que ya no se necesitan ni se usan. Se te cobra el almacenamiento de datos caducados u obsoletos hasta que se produzca la compactación y se eliminen los datos aptos para la recolección de memoria residual. Este proceso suele tardar unos días, pero puede prolongarse hasta una semana.

Puedes definir políticas de recogida de elementos no utilizados de forma programática o con la cbt CLI . Las políticas de recolección de elementos no utilizados se definen a nivel de familia de columnas.

Cada familia de columnas de una tabla tiene su propia política de recogida de elementos no utilizados. El proceso de recogida de elementos no utilizados busca la política de recogida de elementos no utilizados actual de cada familia de columnas y, a continuación, elimina los datos según las reglas de la política.

Marcas de tiempo

En Bigtable, la intersección de una fila y una columna puede tener varias celdas, que contienen versiones con marca de tiempo del valor de esa intersección. Cada celda tiene una marca de tiempo. Una marca de tiempo es el número de microsegundos transcurridos desde el inicio del registro de tiempo de Unix, 1970-01-01 00:00:00 UTC. Puedes usar marcas de tiempo predeterminadas o definirlas cuando envíes solicitudes de escritura.

La marca de tiempo que envíes a Bigtable debe ser un valor en microsegundos con una precisión de milisegundos como máximo. Se rechaza una marca de tiempo con precisión de microsegundos, como 3023483279876543. En este ejemplo, el valor de marca de tiempo aceptable es 3023483279876000.

La propiedad de marca de tiempo de una celda puede ser una marca de tiempo "real", que refleje la hora real en la que se escribe el valor de la celda, o bien una marca de tiempo "artificial". Las marcas de tiempo artificiales incluyen números secuenciales, ceros o valores con formato de marca de tiempo que no corresponden a la hora real en la que se escribió la celda. Antes de usar marcas de tiempo artificiales, consulta los casos prácticos de las marcas de tiempo artificiales, incluidos los riesgos de usarlas:

Asegúrate de definir una marca de tiempo predeterminada al enviar solicitudes de escritura, a menos que necesites admitir un caso práctico con marcas de tiempo artificiales.

Tipos de recolección de elementos no utilizados

En esta sección se describen los tipos de recogida de elementos no utilizados disponibles en Bigtable. Puedes consultar ejemplos de código de cada tipo de recolección de elementos no utilizados en el artículo Configurar la recolección de elementos no utilizados.

Valores que caducan (basados en la edad)

Puedes definir una regla de recogida de elementos no utilizados basada en la marca de tiempo de cada celda. Por ejemplo, puede que no quieras conservar las celdas con marcas de tiempo de más de 30 días anteriores a la fecha y hora actuales. Con este tipo de regla de recogida de elementos no utilizados, se define el tiempo de vida (TTL) de los datos. Bigtable examina cada familia de columnas durante la recogida de elementos no utilizados y elimina las celdas que han caducado.

Número de versiones

Puedes definir una regla de recogida de elementos no utilizados que indique explícitamente el número máximo de celdas que se deben conservar de todas las columnas de una familia de columnas.

Por ejemplo, si solo quiere conservar el nombre de usuario y la dirección de correo más recientes de un cliente, puede crear una familia de columnas que contenga esas dos columnas y definir el número máximo de valores en 1 para esa familia de columnas.

En otro caso, puede que quieras conservar las cinco últimas versiones del hash de la contraseña de un usuario para asegurarte de que no reutiliza la contraseña, por lo que definirías el número máximo de versiones de la familia de columnas que contiene la columna de la contraseña en 5. Cuando Bigtable examina la familia de columnas durante la recolección de memoria residual, si se ha escrito una sexta celda en la columna de contraseñas, se elimina la celda más antigua para que el número de celdas sea cinco.

Combinaciones de reglas de caducidad y número de versión

Puedes usar una combinación de reglas de vencimiento y número de versión para la recogida de elementos no utilizados. Los tipos de combinaciones son intersección, unión y anidada. Para ver ejemplos de configuración, consulta Recogida de elementos no utilizados basada en varios criterios.

Intersección

Una política de recogida de elementos no utilizados de intersección marca los datos para su eliminación cuando se cumplen todos los criterios de un conjunto de reglas determinado. Por ejemplo, puede que quieras eliminar los perfiles que tengan más de 30 días, pero siempre conservar al menos uno por usuario. En este caso, la política de intersección de la familia de columnas que contiene la columna de perfil constaría de una regla para un valor que caduca y una regla para el número de versiones.

Union

Una política de recogida de elementos no utilizados de unión marca los datos para que se eliminen cuando cumplan cualquier elemento de un conjunto de reglas determinado. Por ejemplo, puede que quieras asegurarte de que se conserven un máximo de dos registros de vistas de página por usuario, pero solo si tienen menos de 30 días. En este caso, tu política de unión se ha definido para un valor que va a caducar o un número de versiones.

Anidados

Una política de recolección de memoria residual anidada tiene una combinación de reglas de unión e intersección.

Configuración predeterminada de la recolección de elementos no utilizados

No hay ningún TTL predeterminado para una familia de columnas. El número de celdas conservadas de una columna depende de cómo cree la familia de columnas a la que pertenece la columna, tal como se explica en las siguientes secciones.

Política de HBase

Si creas la familia de columnas con el cliente de HBase para Java, la shell de HBase u otra herramienta que use el cliente de HBase para Java, Bigtable solo conservará la celda más reciente de cada columna de la familia de columnas, a menos que cambies la regla. Este ajuste predeterminado es coherente con HBase.

Todas las demás bibliotecas o herramientas de cliente

Si creas la familia de columnas con cualquier otra biblioteca o herramienta de cliente, Bigtable conservará un número infinito de celdas en cada columna de la familia de columnas. Esto incluye las familias de columnas creadas con gcloud y la CLI cbt. Si quieres limitar el número de versiones, debes cambiar la política de recolección de elementos no utilizados de la familia de columnas.

Cuándo se eliminan los datos

La recolección de elementos no utilizados es un proceso continuo en el que Bigtable comprueba las reglas de cada familia de columnas y elimina los datos obsoletos y caducados según corresponda. Por lo general, los datos pueden tardar hasta una semana en eliminarse desde el momento en que cumplen los criterios de las reglas. No puedes cambiar el momento en el que se realiza la recogida de elementos no utilizados.

Como los datos caducados pueden tardar hasta una semana en eliminarse, no debes depender únicamente de las políticas de recogida de elementos no utilizados para asegurarte de que las solicitudes de lectura devuelvan los datos seleccionados. Aplica siempre un filtro a tus solicitudes de lectura que excluya los mismos valores que tus reglas de recogida de elementos no utilizados. Puedes filtrar por limitar el número de celdas por columna o por especificar un intervalo de marcas de tiempo.

Por ejemplo, supongamos que la regla de recogida de elementos no utilizados de una familia de columnas se ha definido para conservar solo las cinco versiones más recientes de un perfil y que ya se han almacenado cinco versiones. Una vez que se haya escrito una nueva versión del perfil, la celda más antigua puede tardar hasta una semana en eliminarse. Por lo tanto, para evitar leer el sexto valor, siempre debe excluir todo excepto las cinco versiones más recientes.

Se te cobra el almacenamiento de los datos caducados hasta que se produce la compactación y se eliminan los datos.

La recogida de elementos no utilizados es retroactiva: cuando se define una nueva política de recogida de elementos no utilizados, se aplica a todos los datos de la tabla en los próximos días. Si la nueva política es más restrictiva que la anterior, los datos antiguos se eliminarán a medida que se realice el trabajo en segundo plano, incluidos los datos que se escribieron antes del cambio de política.

Si quieres asegurarte de que los datos marcados para la recogida de elementos no utilizados se eliminan, puedes consultar tu tabla y comparar los datos con los resultados esperados. También puedes monitorizar el tamaño de las tablas en la Google Cloud consola. Una tabla que nunca se reduce puede reflejar una política de recogida de elementos no utilizados que no funciona como se espera, pero recuerda que la recogida de elementos no utilizados se ejecuta con un retraso.

Replicación y recolección de elementos no utilizados

La replicación puede afectar a la recolección de elementos no utilizados de varias formas.

Recolección de elementos no utilizados basada en versiones y uso de CPU

En una instancia que usa la replicación, las eliminaciones de la recogida de elementos no utilizados basada en versiones se replican en todos los clústeres de la instancia de la misma forma que se replican las solicitudes de aplicación. Si escribes rápidamente en celdas nuevas que provocan que las celdas más antiguas se marquen para su eliminación, es posible que observes un aumento del uso de la CPU cuando Bigtable elimine las celdas obsoletas y replique esas eliminaciones en otros clústeres de la instancia. Prepárate para este aumento del uso de CPU si añades un clúster a una instancia que contenga tablas que usen la recogida de elementos no utilizados basada en versiones.

Por otro lado, la recogida de elementos no utilizados basada en la antigüedad no aumenta el uso de la CPU en las instancias replicadas.

Cambiar las políticas de recolección de elementos no utilizados basadas en versiones

Puedes modificar el número máximo de versiones de una familia de columnas en una tabla replicada. Sin embargo, si reduces el número de versiones de una familia de columnas, puede tardar hasta una semana en que todos los clústeres replicados reflejen el nuevo número inferior. Por lo tanto, siempre debe usar filtros al leer los datos.

Cambiar las políticas de recolección de elementos no utilizados basadas en la antigüedad

Puede aumentar o reducir el tiempo de conservación especificado en las políticas de recogida de elementos no utilizados independientemente de si la instancia usa la replicación. Si la instancia no usa la replicación, también puedes eliminar una política de recogida de elementos no utilizados basada en la antigüedad.

Reducir el tiempo de conservación

Si reduces el tiempo de conservación de una política basada en la antigüedad, pueden pasar hasta una semana para que todos los clústeres se sincronicen y usen la nueva política.

Aumentar el tiempo de conservación

En una tabla replicada, puedes aumentar el tiempo de conservación de una política de recogida de elementos no utilizados en un máximo de 90 días.

Si aumenta el periodo de conservación de una familia de columnas, tenga en cuenta que es posible que sus clústeres no estén sincronizados durante más de una semana. Para entender por qué, veamos un caso hipotético en el que tienes una tabla en una instancia de dos clústeres y cambias el periodo de conservación de una familia de columnas de 30 a 50 días:

  1. Se envía una solicitud de escritura para la clave de fila ip#685 al clúster A con el valor 2023-01-02 para la columna click-through de la familia de columnas profile. Los datos se replican en el clúster B.
  2. Treinta y un días después, se realiza la recogida de elementos no utilizados en el clúster A y el valor de la columna click-through se reconoce como caducado y se elimina.
  3. Cambias la política de recolección de elementos no utilizados de la familia de columnas profile y aumentas el TTL de 30 a 50 días.
  4. Un día después, la recogida de elementos no utilizados se ejecuta en el clúster B. Como el TTL es de 50 días, se conserva el valor 2023-01-02.
  5. Los clústeres ya no están sincronizados y seguirán así durante casi 20 días, hasta que se elimine el valor que existe en el clúster B, pero no en el clúster A.

Siguientes pasos