milvus-logo
LFAI
Home
  • Guía del usuario

Compactación en clústeres

La compactación en clústeres está diseñada para mejorar el rendimiento de la búsqueda y reducir los costes en grandes colecciones. Esta guía le ayudará a comprender la compactación en clústeres y cómo esta función puede mejorar el rendimiento de la búsqueda.

Visión general

Milvus almacena las entidades entrantes en segmentos dentro de una colección y sella un segmento cuando está lleno. Si esto ocurre, se crea un nuevo segmento para acomodar entidades adicionales. Como resultado, las entidades se distribuyen arbitrariamente entre los segmentos. Esta distribución requiere que Milvus busque en múltiples segmentos para encontrar los vecinos más cercanos a un vector de consulta dado.

Without clustering Compaction Compactación sin agrupación

Si Milvus puede distribuir entidades entre segmentos basándose en los valores de un campo específico, el alcance de la búsqueda puede restringirse dentro de un segmento, mejorando así el rendimiento de la búsqueda.

Lacompactación por agrupamiento es una función de Milvus que redistribuye las entidades entre los segmentos de una colección basándose en los valores de un campo escalar. Para activar esta función, primero debe seleccionar un campo escalar como clave de agrupación. Esto permite a Milvus redistribuir entidades en un segmento cuando sus valores de clave de agrupación caen dentro de un rango específico. Cuando usted activa una compactación de clustering, Milvus genera/actualiza un índice global llamado PartitionStats, que registra la relación de mapeo entre segmentos y valores de clave de clustering.

With Clustering Compaction Con la compactación de clustering

Utilizando PartitionStats como referencia, Milvus puede eliminar datos irrelevantes al recibir una solicitud de búsqueda/consulta que contenga un valor de clave de agrupación y restringir el ámbito de búsqueda dentro de los segmentos que corresponden al valor, mejorando así el rendimiento de la búsqueda. Para obtener más información sobre la mejora del rendimiento, consulte Pruebas comparativas.

Utilizar la compactación de clústeres

La función de compactación de agrupaciones en Milvus es altamente configurable. Puede elegir activarla manualmente o configurarla para que Milvus la active automáticamente a intervalos. Para activar la compactación en cluster, haga lo siguiente:

Configuración global

Debe modificar su archivo de configuración de Milvus como se muestra a continuación.

dataCoord:
  compaction:
    clustering:
      enable: true 
      autoEnable: false 
      triggerInterval: 600 
      minInterval: 3600 
      maxInterval: 259200 
      newDataSizeThreshold: 512m 
      timeout: 7200
     
queryNode:
  enableSegmentPrune: true 

datanode:
  clusteringCompaction:
    memoryBufferRatio: 0.1 
    workPoolSize: 8  
common:
  usePartitionKeyAsClusteringKey: true 
  • dataCoord.compaction.clustering

    Elemento de configuraciónDescripciónValor por defecto
    enableEspecifica si se habilita la compactación en clúster.
    Configure esta opción en true si necesita habilitar esta función para cada colección que tenga una clave de agrupación.
    false
    autoEnableEspecifica si se activa la compactación automática.
    Si se establece en true, Milvus compactará las colecciones que tengan una clave de agrupación en los intervalos especificados.
    false
    triggerIntervalEspecifica el intervalo en milisegundos en el que Milvus inicia la compactación de agrupaciones.
    Este parámetro sólo es válido cuando autoEnable se establece en true.
    -
    minIntervalEspecifica el intervalo mínimo en segundos.
    Este parámetro sólo es válido cuando autoEnable está configurado como true.
    Establecerlo en un número entero mayor que triggerInterval ayuda a evitar compactaciones repetidas en un período corto.
    -
    maxIntervalEspecifica el intervalo máximo en segundos.
    Este parámetro sólo es válido cuando autoEnable está configurado como true.
    Una vez que Milvus detecta que una colección no ha sido compactada en clúster durante un periodo superior a este valor, fuerza una compactación en clúster.
    -
    newDataSizeThresholdEspecifica el umbral superior para activar una compactación en clúster.
    Este parámetro sólo es válido cuando autoEnable está configurado como true.
    Una vez que Milvus detecta que el volumen de datos de una colección supera este valor, inicia un proceso de compactación en clúster.
    -
    timeoutEspecifica la duración del tiempo de espera para una compactación en clúster.
    Una compactación en clúster falla si su tiempo de ejecución supera este valor.
    -
  • queryNode

    Configuración ElementoDescripciónValor predeterminado
    enableSegmentPruneEspecifica si Milvus poda los datos consultando PartitionStats al recibir peticiones de búsqueda/consulta.
    Si se establece en true, Milvus puede eliminar los datos irrelevantes de los segmentos durante una solicitud de búsqueda/consulta.
    false
  • dataNode.clusteringCompaction

    Configuración ElementoDescripciónValor por defecto
    memoryBufferRatioEspecifica la proporción de memoria intermedia para las tareas de compactación en clúster.
    Milvus vacía los datos cuando el tamaño de los datos excede el tamaño del búfer asignado calculado utilizando este ratio.
    -
    workPoolSizeEspecifica el tamaño del grupo de trabajadores para una tarea de compactación en clúster.-
  • common

    Configuración ElementoDescripciónValor predeterminado
    usePartitionKeyAsClusteringKeyEspecifica si se utiliza la clave de partición en las colecciones como clave de agrupación.
    El valor true indica que la clave de partición se utiliza como clave de agrupación.
    Siempre puede anular esta configuración en una colección configurando explícitamente una clave de agrupación.
    false

Para aplicar los cambios anteriores a su cluster Milvus, por favor siga los pasos en Configurar Milvus con Helm y Configurar Milvus con Milvus Operators.

Configuración de la colección

Para la compactación en cluster en una colección específica, debe seleccionar un campo escalar de la colección como clave de cluster.

default_fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
    FieldSchema(name="key", dtype=DataType.INT64, is_clustering_key=True),
    FieldSchema(name="var", dtype=DataType.VARCHAR, max_length=1000, is_primary=False),
    FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=dim)
]

default_schema = CollectionSchema(
    fields=default_fields, 
    description="test clustering-key collection"
)

coll1 = Collection(name="clustering_test", schema=default_schema)

Puede utilizar los campos escalares de los siguientes tipos de datos como clave de agrupación: Int8, Int16, Int32, Int64, Float, Double y VarChar.

Activar la compactación en clúster

Si ha activado la compactación automática de clustering, Milvus activa automáticamente la compactación en el intervalo especificado. Alternativamente, puede activar manualmente la compactación como se indica a continuación:

coll1.compact(is_clustering=True)
coll1.get_compaction_state(is_clustering=True)
coll1.wait_for_compaction_completed(is_clustering=True)

Prueba comparativa

El volumen de datos y los patrones de consulta combinados determinan la mejora del rendimiento que puede aportar la compactación en clúster. Una prueba comparativa interna demuestra que la compactación en clústeres mejora hasta 25 veces las consultas por segundo (QPS).

La prueba de referencia se realiza en una colección que contiene entidades de un conjunto de datos LAION de 20 millones y 768 dimensiones, con el campo clave designado como clave de agrupación. Una vez activada la compactación por clustering en la colección, se envían búsquedas concurrentes hasta que el uso de la CPU alcanza un nivel alto de agua.

Filtro de búsqueda Ratio de poda Latencia (ms) QPS (reqs/s)
Avg Mín Max Mediana TP99
Ninguno 0% 1685 672 2294 1710 2291 17.75
clave > 200 y clave < 800 40.2% 1045 47 1828 1085 1617 28.38
clave > 200 y clave < 600 59.8% 829 45 1483 882 1303 35.78
clave > 200 y clave < 400 79.5% 550 100 985 584 898 54.00
clave == 1000 99% 68 24 1273 70 246 431.41

A medida que se reduce el ámbito de búsqueda en los filtros de búsqueda, aumenta el porcentaje de exclusión. Esto significa que se omiten más entidades durante el proceso de búsqueda. Si se comparan las estadísticas de la primera y la última fila, se observa que las búsquedas sin compactación por agrupación requieren escanear toda la colección. Por otro lado, las búsquedas con compactación de agrupación mediante una clave específica pueden lograr una mejora de hasta 25 veces.

Buenas prácticas

A continuación le ofrecemos algunos consejos para que utilice la compactación en clústeres de forma eficiente:

  • Habilítela para colecciones con grandes volúmenes de datos. El rendimiento de la búsqueda mejora con mayores volúmenes de datos en una colección. Es una buena opción activar esta función para colecciones con más de 1 millón de entidades.

  • Elija una clave de agrupación adecuada: puede utilizar campos escalares empleados habitualmente como condiciones de filtrado como clave de agrupación. Para una colección que contiene datos de varios inquilinos, puede utilizar el campo que distingue a un inquilino de otro como clave de agrupación.

  • Utilice la clave de partición como clave de agrupación. Puede establecer common.usePartitionKeyAsClusteringKey en true si desea habilitar esta función para todas las colecciones de su instancia de Milvus o si todavía tiene problemas de rendimiento en una colección grande con una clave de partición. Al hacerlo, tendrá una clave de agrupación y una clave de partición cuando elija un campo escalar en una colección como clave de partición.

    Tenga en cuenta que esta configuración no le impide elegir otro campo escalar como clave de agrupación. La clave de agrupación designada explícitamente siempre tiene prioridad.

Traducido porDeepLogo

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

¿Fue útil esta página?