🚀 Prueba Zilliz Cloud, el Milvus completamente gestionado, gratis—¡experimenta un rendimiento 10 veces más rápido! Prueba Ahora>>

milvus-logo
LFAI
  • Home
  • Blog
  • ¿Cómo compactar datos en Milvus?

¿Cómo compactar datos en Milvus?

  • Engineering
February 21, 2022
Bingyi Sun

Binlog Cover Image Imagen de portada de Binlog

Por Bingyi Sun y Angela Ni.

Con el lanzamiento oficial de Milvus 2.0 GA, una lista de nuevas características son soportadas. Entre ellas, la compactación es una de las nuevas características que pueden ayudarle a ahorrar espacio de almacenamiento.

La compactación se refiere al proceso de fusionar segmentos pequeños en segmentos grandes y limpiar datos eliminados lógicamente. En otras palabras, la compactación reduce el uso de espacio en disco purgando las entidades eliminadas o caducadas en los binlogs. Se trata de una tarea en segundo plano desencadenada por la coordinación de datos y ejecutada por el nodo de datos en Milvus.

Este artículo disecciona el concepto y la implementación de la compactación en Milvus.

¿Qué es la compactación?

Antes de profundizar en los detalles de cómo implementar la compactación en Milvus 2.0, es fundamental averiguar qué es la compactación en Milvus.

A menudo, como usuario de Milvus, puede que le haya molestado el uso creciente de espacio en el disco duro. Otro problema es que un segmento con menos de 1.024 filas no se indexa y sólo admite la búsqueda de fuerza bruta para procesar consultas. Los segmentos pequeños causados por el auto-flush o el flush invocado por el usuario pueden dificultar la eficiencia de las consultas.

Por lo tanto, para resolver los dos problemas mencionados anteriormente y ayudar a reducir el uso del disco y mejorar la eficiencia de las consultas, Milvus soporta la compactación.

Bases de datos como LevelDB y RocksDB añaden datos a tablas de cadenas ordenadas (SSTables). La media de lecturas de disco por consulta aumenta con el número de SSTables, lo que da lugar a consultas ineficientes. Para reducir la amplificación de las lecturas y liberar espacio en el disco duro, estas bases de datos compactan las SSTables en una sola. Los procesos de compactación se ejecutan automáticamente en segundo plano.

Del mismo modo, Milvus añade los datos insertados y eliminados a los binlogs. A medida que aumenta el número de binlogs, se utiliza más espacio del disco duro. Para liberar espacio en el disco duro, Milvus compacta los binlogs de datos borrados e insertados. Si se inserta una entidad pero luego se borra, deja de existir en los binlogs que registran la inserción o borrado de datos una vez compactados. Además, Milvus también compacta segmentos - archivos de datos creados automáticamente por Milvus para contener datos insertados.

¿Cómo configurar la compactación?

La configuración de la compactación en Milvus implica principalmente dos parámetros: dataCoord.enableCompaction y common.retentionDuration.

dataCoord.enableCompaction especifica si se activa la compactación. Su valor por defecto es true.

common.retentionDuration especifica un periodo en el que no se ejecuta la compactación. Su unidad es el segundo. Al compactar los datos, todas las entidades eliminadas dejarán de estar disponibles para la búsqueda con Time Travel. Por lo tanto, si planea buscar con Viaje en el Tiempo, tiene que especificar un período de tiempo durante el cual la compactación no se ejecute y no afecte a los datos eliminados. Para garantizar la exactitud de los resultados de las búsquedas con Viaje en el Tiempo, Milvus retiene los datos operados en un período especificado por common.retentionDuration. Es decir, los datos operados en este periodo no se compactarán. Para más detalles, véase Búsqueda con Time Travel.

La compactación está activada en Milvus por defecto. Si desactivó la compactación pero más tarde desea activarla manualmente, puede seguir los pasos que se indican a continuación:

  1. Llame al método collection.compact() para activar manualmente un proceso de compactación global. Sin embargo, tenga en cuenta que esta operación puede llevar mucho tiempo.
  2. Después de llamar al método, se devuelve un ID de compactación. Consulta el estado de la compactación llamando al método collection.get_compaction_state().

Una vez activada la compactación, ésta se ejecuta automáticamente en segundo plano. Dado que el proceso de compactación puede llevar mucho tiempo, las solicitudes de compactación se procesan de forma asíncrona para ahorrar tiempo.

¿Cómo implementar la compactación?

En Milvus, puede implementar la compactación manual o automáticamente.

La compactación manual de binlogs o segmentos no requiere el cumplimiento de ninguna condición de activación. Por lo tanto, si invoca la compactación manualmente, los binlogs o segmentos se compactarán pase lo que pase.

Sin embargo, si desea activar la compactación automática, es necesario que se cumplan determinadas condiciones de activación de la compactación para que el sistema compacte sus segmentos o binlogs.

Generalmente hay dos tipos de objetos que pueden ser compactados en Milvus: binlogs y segmentos.

Compactación de binlogs

Un binlog es un registro binario, o una unidad más pequeña en segmento, que registra y gestiona las actualizaciones y cambios realizados en los datos de la base de datos vectorial de Milvus. Los datos de un segmento se conservan en varios binlogs. La compactación de binlogs implica dos tipos de binlogs en Milvus: binlogs de inserción y binlogs delta.

Los binlogs delta se generan cuando se borran datos, mientras que los binlogs de inserción se generan en las tres circunstancias siguientes.

  • Cuando se añaden datos insertados, el segmento alcanza el límite superior de tamaño y se vacía automáticamente en el disco.
  • DataCoord vacía automáticamente los segmentos que permanecen sin sellar durante mucho tiempo.
  • Algunas APIs como collection.num_entities, collection.load(), y más invocan automáticamente a flush para escribir segmentos en el disco.

Por lo tanto, la compactación de binlogs, como su nombre indica, se refiere a la compactación de binlogs dentro de un segmento. Más concretamente, durante la compactación de binlogs, se compactan todos los binlogs delta y los binlogs de inserción que no se conservan.

Binlog compaction Compactación de binlogs

Cuando un segmento se descarga en el disco, o cuando Milvus solicita la compactación global porque la compactación no se ha ejecutado durante mucho tiempo, debe cumplirse al menos una de las dos condiciones siguientes para activar la compactación automática:

  1. Las filas de los binlogs delta son más del 20% del total de filas.
  2. El tamaño de los binlogs delta supera los 10 MB.

Compactación de segmentos

Un segmento es un archivo de datos creado automáticamente por Milvus para contener datos insertados. Hay dos tipos de segmentos en Milvus: segmento creciente y segmento sellado.

Un segmento creciente sigue recibiendo los nuevos datos insertados hasta que se sella. Un segmento sellado deja de recibir nuevos datos y se vacía en el almacenamiento de objetos, dejando nuevos datos que se insertarán en un segmento creciente recién creado.

Por lo tanto, la compactación de segmentos se refiere a la compactación de múltiples segmentos sellados. Más concretamente, durante la compactación de segmentos, los segmentos pequeños se compactan en segmentos más grandes.

Segment compaction Compactación de segmentos

Cada segmento generado tras la compactación no puede superar el límite superior del tamaño de un segmento, que es de 512 MB por defecto. Lea las configuraciones del sistema para saber cómo modificar el límite superior del tamaño de un segmento.

Cuando un segmento se descarga en el disco, o cuando Milvus solicita la compactación global porque la compactación no se ha ejecutado durante mucho tiempo, debe cumplirse la siguiente condición para activar la compactación automática:

  • Segmentos inferiores a 0,5 * MaxSegmentSize es superior a 10.

¿Y ahora qué?

¿Qué sigue después de aprender los fundamentos de la compactación en Milvus? Actualmente, no todos los parámetros para configurar la compactación están en el archivo milvus.yaml, y las estrategias de generación de planes son relativamente básicas. Si estás interesado, ¡contribuye al proyecto de código abierto Milvus!

Además, en el blog de la serie de nuevas funciones 2.0, pretendemos explicar el diseño de las nuevas funciones. ¡Lea más en esta serie de blogs!

Sobre el autor

Bingyi Sun, Ingeniero de Software Senior del proyecto Milvus, obtuvo su Máster en Ingeniería de Software en la Universidad Jiao Tong de Shanghai. Es el principal responsable del desarrollo de componentes relacionados con el almacenamiento en Milvus 2.0. Su área de interés son las bases de datos y los sistemas distribuidos. Es un gran aficionado a los proyectos de código abierto y un sibarita que disfruta jugando a videojuegos y leyendo en su tiempo libre.

Like the article? Spread the word

Sigue Leyendo