Descripción general de la recolección de elementos no utilizados
En esta página, se describe cómo funciona la recolección de elementos no utilizados en Bigtable y se analizan los siguientes temas:
- Tipos de recolección de elementos no utilizados
- Configuración predeterminada de recolección de elementos no utilizados
- Cuando se borran los datos
- Cambios en las políticas de recolección de elementos no utilizados para tablas replicadas
Recolección de elementos no utilizados
La recolección de elementos no utilizados es el proceso automático y continuo que consiste en quitar datos caducos y obsoletos de las tablas de Bigtable. Una política de recolección de elementos no utilizados es un conjunto de reglas que creas y que indican cuándo los datos de una familia de columnas específica ya no son necesarios.
La recolección de elementos no utilizados es un proceso en segundo plano, integrado y asíncrono. Puede tardar hasta una semana en borrar los datos aptos para la recolección de elementos no utilizados. La recolección de elementos no utilizados se realiza en un horario fijo que no varía según la cantidad de datos que se deben borrar. Hasta que los datos se borren, aparecerán en los resultados de lectura. Puedes filtrar las lecturas para excluir estos datos.
Los beneficios de las políticas de recolección de elementos no utilizados incluyen lo siguiente:
- Minimizar el tamaño de las filas: siempre querrás evitar que las filas crezcan de forma indefinida. Las filas grandes afectan el rendimiento de forma negativa. Lo ideal sería que nunca permitas que una fila crezca más de 100 MB de tamaño, y el límite sea de 256 MB. Si no necesitas conservar datos antiguos o versiones antiguas de tus datos actuales, el uso de la recolección de elementos no utilizados puede ayudarte a minimizar el tamaño de cada fila.
- Mantener los costos bajos: la recolección de elementos no utilizados garantiza que no pagues por almacenar datos que ya no se requieren ni se usan. Se te cobra el almacenamiento de datos obsoletos o vencidos hasta que se realice la compactación y se borren los datos aptos para la recolección de elementos no utilizados. Este proceso suele durar unos días, pero puede llevar hasta una semana.
Puedes establecer políticas de recolección de elementos no utilizados de manera programática o con la
CLI de cbt
. Las políticas de recolección de elementos no utilizados se establecen a nivel de la familia de columnas.
Cada familia de columnas en una tabla tiene su propia política de recolección de elementos no utilizados. El proceso de recolección de elementos no utilizados busca la política actual de recolección de elementos no utilizados para cada familia de columnas, y luego quita los datos de acuerdo con 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 marcas de tiempo del valor de esa intersección.
Cada celda tiene una marca de tiempo. Una marca de tiempo es la cantidad de microsegundos desde la época de Unix, 1970-01-01 00:00:00 UTC
. Puedes usar marcas de tiempo predeterminadas o configurarlas cuando envías solicitudes de escritura.
La marca de tiempo que envíes a Bigtable debe ser un valor de 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 refleja el tiempo real en que se escribe el valor de la celda, o puede ser 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 son la hora real en que se escribió la celda. Antes de usar marcas de tiempo artificiales, revisa los casos prácticos de las marcas de tiempo artificiales, incluidos los riesgos de usarlas:
Asegúrate de establecer una marca de tiempo predeterminada cuando envíes solicitudes de escritura, a menos que necesites admitir un caso de uso con marcas de tiempo artificiales.
Tipos de recolección de elementos no utilizados
En esta sección, se describen los tipos de recolección de elementos no utilizados disponibles en Bigtable. Las muestras de código para cada tipo de recolección de elementos no utilizados se encuentran en la configuración de recolección de elementos no utilizados.
Valores vencidos (basados en la antigüedad)
Puedes establecer una regla de recolección de elementos no utilizados en función de la marca de tiempo de cada celda. Por ejemplo, es posible que no desees mantener ninguna celda con marcas de tiempo que sean de más de 30 días antes de la fecha y hora actuales. Con este tipo de regla de recolección de elementos no utilizados, estableces el tiempo de actividad (TTL) para los datos. Bigtable examina cada familia de columnas durante la recolección de elementos no utilizados y quita las celdas que caducaron.
Número de versiones
Puedes establecer una regla de recolección de elementos no utilizados que indique de forma explícita el número máximo de celdas que se mantendrán para todas las columnas de una familia de columnas.
Por ejemplo, si deseas conservar solo el nombre de usuario y la dirección de correo electrónico más recientes de un cliente, puedes crear una familia de columnas que contenga esas dos columnas y establecer el número máximo de valores en 1
para esa familia de columnas.
En otro caso, es posible que desees mantener las últimas cinco versiones del hash de contraseña de un usuario para asegurarte de que no vuelvan a utilizar la contraseña. En este caso, deberías configurar como 5
el número máximo de versiones para la familia de columnas que contiene la columna de contraseña. Cuando Bigtable analiza la familia de columnas durante la recolección de elementos no utilizados, si se escribió una sexta celda en la columna de contraseña, la celda más antigua se borra para mantener la cantidad de celdas en cinco.
Combinaciones de reglas de números de versiones y vencimiento
Puedes usar una combinación de reglas de número de versión y vencimiento para la recolección de elementos no utilizados. Los tipos de combinaciones son intersección, unión y anidada. Para ver ejemplos de configuración, consulta Recolección de elementos no utilizados según varios criterios.
Intersección
Una política de recolección de elementos no utilizados de intersección marca los datos para su eliminación cuando cumplen con todos los criterios de un conjunto de reglas determinado. Por ejemplo, es posible que desees quitar los perfiles de más de 30 días, pero siempre mantener al menos uno para cada usuario. En este caso, tu política de intersección de la familia de columnas que contiene la columna del perfil consistirá de una regla para un valor vencido y una para la cantidad de versiones.
Unión
Una política de recolección de elementos no utilizados de unión marca los datos para su eliminación cuando cumplen con cualquier elemento de un conjunto de reglas determinado. Por ejemplo, es posible que desees asegurarte de conservar 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 establece para un valor vencido o una cantidad de versiones.
Nested
Una política de recolección de elementos no utilizados anidada tiene una combinación de reglas de intersección y unión.
Configuración predeterminada para la recolección de elementos no utilizados
No hay un TTL predeterminado para una familia de columnas. El número de celdas retenidas para una columna depende de cómo crees la familia de columnas en la que se encuentra 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, con la shell de HBase, o con cualquier otra herramienta que utiliza el cliente HBase para Java, Bigtable retiene solo la celda más reciente de cada columna en la familia de columnas, a menos que cambies la regla. Esta configuración predeterminada es coherente con HBase.
Todas las demás bibliotecas cliente o herramientas
Si creas la familia de columnas con cualquier otra biblioteca cliente o herramienta, Bigtable conserva una cantidad infinita de celdas en cada columna de la familia de columnas. Esto incluye las familias de columnas que se crearon con gcloud
y la CLI de cbt
. Debes cambiar la política de recolección de elementos no utilizados para la familia de columnas si deseas limitar la cantidad de versiones.
Cuando se borran 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 quita los datos caducos y obsoletos correspondientes. En general, la eliminación real de los datos puede tomar hasta una semana a partir del momento en que estos coinciden con los criterios de las reglas. No puedes cambiar el tiempo de la recolección de elementos no utilizados.
Debido a que la recolección de datos puede llevar hasta una semana, nunca debes confiar únicamente en las políticas de recolección de elementos no utilizados para asegurarte de que las solicitudes de lectura muestren los datos deseados. Siempre aplica un filtro a tus solicitudes de lectura que excluya los mismos valores que tus reglas de recolección de elementos no utilizados. Puedes filtrar si limitas la cantidad de celdas por columna o si especificas un rango de marca de tiempo.
Por ejemplo, supongamos que una regla de recolección de elementos no utilizados de una familia de columnas está configurada para mantener solo las cinco versiones más recientes de un perfil y ya hay cinco versiones almacenadas. Después de que se escriba una nueva versión del perfil, la celda más antigua puede demorar hasta una semana en borrarse. Por lo tanto, para evitar leer el sexto valor, siempre debes filtrar todo, excepto las cinco versiones más recientes.
Se te cobra el almacenamiento de los datos vencidos hasta que se realiza la compactación y se borran.
La recolección de elementos no utilizados es retroactiva: cuando se establece una nueva política de recolección de elementos no utilizados, en los días siguientes se aplica a todos los datos de la tabla. Si la nueva política es más restrictiva que la política anterior, los datos antiguos se borran a medida que se realiza el trabajo en segundo plano, incluidos los datos que se escribieron antes del cambio de la política.
Si deseas asegurarte de que los datos marcados para la recolección de elementos no utilizados se borren, puedes consultar tu tabla y comparar los datos con los resultados esperados. También puedes supervisar el tamaño de la tabla en la consola de Google Cloud. Una tabla cuyo tamaño nunca disminuye puede reflejar una política de recolección de elementos no utilizados que no funciona como se espera. Sin embargo, ten en cuenta que la recolección de elementos no utilizados se ejecuta con un retraso.
Replicación y recolección de elementos no utilizados
La replicación puede afectar la recolección de elementos no utilizados de varias maneras.
Recolección de elementos no utilizados basados en la versión y uso de CPU
En una instancia que usa la replicación, las eliminaciones de la recolección de elementos no utilizados basada en versiones se replican en todos los clústeres de la instancia de la misma manera que se replican las solicitudes de la aplicación. Si escribes rápidamente celdas nuevas que hacen que las celdas más antiguas se marquen para su eliminación, es posible que veas un aumento en el uso de CPU cuando Bigtable borra las celdas inactivas y las replica en otros clústeres en la instancia. Prepárate para este aumento en el uso de CPU si agregas un clúster a una instancia que contiene tablas que usan recolección de elementos no utilizados basada en versión.
Recolección de elementos no utilizados basada en la antigüedad. Por otro lado, no aumenta el uso de CPU en instancias replicadas.
Cómo cambiar las políticas de recolección de elementos no utilizados basadas en la versión
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, podría tardar hasta una semana que todos los clústeres replicados reflejen el nuevo número más bajo. Por lo tanto, siempre debes usar filtros cuando lees los datos.
Cómo cambiar las políticas de recolección de elementos no utilizados basadas en la antigüedad
Puedes aumentar o disminuir el tiempo de retención especificado en las políticas de recolección de elementos no utilizados, independientemente de si la instancia usa la replicación. También puedes borrar una política de recolección de elementos no utilizados basada en la antigüedad.
Disminución del tiempo de retención
Si disminuyes el tiempo de retención en una política basada en la edad, puede tardar hasta una semana en que todos los clústeres se sincronicen y usen la política nueva.
Aumenta el tiempo de retención
En una tabla replicada, puedes aumentar el tiempo de retención de una política de recolección de elementos no utilizados en un máximo de 90 días.
Si aumentas el período de retención de una familia de columnas, ten en cuenta que es posible que tus clústeres no estén sincronizados durante más de una semana. Para entender por qué, considera un caso hipotético en el que tienes una tabla en una instancia de dos clústeres y cambias el período de retención de una familia de columnas de 30 a 50 días:
- Se envía una solicitud de escritura para la clave de fila
ip#685
al clúster A con un valor de2023-01-02
para la columnaclick-through
en la familia de columnasprofile
. Los datos se replican en el clúster B. - Treinta y un días después, se produce la recolección de elementos no utilizados en el clúster A, y el valor de la columna
click-through
se reconoce como vencido y se borra. - Cambias la política de recolección de elementos no utilizados para la familia de columnas
profile
y aumentas el TTL de 30 a 50 días. - Un día después, se ejecuta la recolección de elementos no utilizados en el clúster B. Debido a que el TTL es de 50 días, se retiene el valor
2023-01-02
. - Los clústeres ahora están desincronizados y permanecen así durante casi 20 días hasta que se borra el valor que existe en el clúster B, pero no en el clúster A.
¿Qué sigue?
- Descubre estrategias para simular el TTL a nivel de la celda.
- Lee información acerca de cómo las marcas de tiempo que son números secuenciales afectan la recolección de elementos no utilizados.
- Obtén más información sobre los precios de almacenamiento.
- Mira las muestras de código de recolección de elementos no utilizados en tu lenguaje de programación preferido.