milvus-logo
LFAI
Home
  • Guide de l'utilisateur

Compaction de la mise en grappe

Le compactage en grappes est conçu pour améliorer les performances de recherche et réduire les coûts dans les grandes collections. Ce guide vous aidera à comprendre le compactage en grappes et la manière dont cette fonctionnalité peut améliorer les performances de recherche.

Vue d'ensemble

Milvus stocke les entités entrantes dans des segments au sein d'une collection et scelle un segment lorsqu'il est plein. Dans ce cas, un nouveau segment est créé pour accueillir les entités supplémentaires. Par conséquent, les entités sont réparties arbitrairement entre les segments. Cette répartition oblige Milvus à rechercher plusieurs segments pour trouver les voisins les plus proches d'un vecteur de requête donné.

Without clustering Compaction Sans regroupement Compaction

Si Milvus peut répartir les entités entre les segments en fonction des valeurs d'un champ spécifique, l'étendue de la recherche peut être limitée à un segment, ce qui améliore les performances de la recherche.

Lecompactage par regroupement est une fonctionnalité de Milvus qui redistribue les entités entre les segments d'une collection en fonction des valeurs d'un champ scalaire. Pour activer cette fonctionnalité, vous devez d'abord sélectionner un champ scalaire comme clé de clustering. Cela permet à Milvus de redistribuer les entités dans un segment lorsque leurs valeurs de clé de clustering se situent dans une plage spécifique. Lorsque vous déclenchez un compactage de clustering, Milvus génère/met à jour un index global appelé PartitionStats, qui enregistre la relation de mappage entre les segments et les valeurs de clé de clustering.

With Clustering Compaction Avec le compactage de clustering

En utilisant PartitionStats comme référence, Milvus peut élaguer les données non pertinentes lors de la réception d'une requête de recherche qui comporte une valeur de clé de clustering et limiter la portée de la recherche aux segments correspondant à la valeur, ce qui améliore les performances de la recherche. Pour plus de détails sur l'amélioration des performances, reportez-vous à la section Tests de référence.

Utiliser le compactage de clustering

La fonction de compactage en grappes de Milvus est hautement configurable. Vous pouvez choisir de la déclencher manuellement ou de la configurer pour qu'elle soit déclenchée automatiquement à intervalles réguliers par Milvus. Pour activer le compactage de clustering, procédez comme suit :

Configuration globale

Vous devez modifier votre fichier de configuration Milvus comme indiqué ci-dessous.

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

    Configuration ElémentDescription de l'élémentValeur par défaut
    enableSpécifie s'il faut activer le compactage de clustering.
    Définissez cette valeur sur true si vous devez activer cette fonction pour chaque collection ayant une clé de clustering.
    false
    autoEnableSpécifie s'il faut activer le compactage déclenché automatiquement.
    La valeur true indique que Milvus compacte les collections ayant une clé de clustering aux intervalles spécifiés.
    false
    triggerIntervalSpécifie l'intervalle en millisecondes auquel Milvus démarre le compactage en grappes.
    Ce paramètre n'est valide que lorsque autoEnable est défini sur true.
    -
    minIntervalSpécifie l'intervalle minimum en secondes.
    Ce paramètre n'est valide que lorsque autoEnable est défini sur true.
    La définition d'un nombre entier supérieur à triggerInterval permet d'éviter des compactages répétés sur une courte période.
    -
    maxIntervalSpécifie l'intervalle maximal en secondes.
    Ce paramètre n'est valide que lorsque autoEnable est défini sur true.
    Lorsque Milvus détecte qu'une collection n'a pas été compactée par clustering pendant une durée supérieure à cette valeur, il force un compactage par clustering.
    -
    newDataSizeThresholdSpécifie le seuil supérieur de déclenchement du compactage en grappes.
    Ce paramètre n'est valide que si autoEnable est défini sur true.
    Lorsque Milvus détecte que le volume de données d'une collection dépasse cette valeur, il lance un processus de compactage en grappes.
    -
    timeoutSpécifie le délai d'attente pour un compactage en grappe.
    Un compactage en grappe échoue si sa durée d'exécution dépasse cette valeur.
    -
  • queryNode

    Élément de configurationDescription de l'élément de configurationValeur par défaut
    enableSegmentPruneIndique si Milvus élague les données en se référant à PartitionStats lors de la réception de requêtes de recherche.
    La valeur true permet à Milvus d'élaguer les données non pertinentes des segments lors d'une demande de recherche/interrogation.
    false
  • dataNode.clusteringCompaction

    Configuration ÉlémentDescription de l'élémentValeur par défaut
    memoryBufferRatioSpécifie le ratio de mémoire tampon pour les tâches de compactage de clustering.
    Milvus vide les données lorsque la taille des données dépasse la taille de la mémoire tampon allouée calculée à l'aide de ce ratio.
    -
    workPoolSizeSpécifie la taille du pool de travailleurs pour une tâche de compactage en grappe.-
  • common

    Configuration ElémentDescription de l'élément de configurationValeur par défaut
    usePartitionKeyAsClusteringKeySpécifie s'il faut utiliser la clé de partition dans les collections comme clé de regroupement.
    La valeur true indique que la clé de partition est utilisée comme clé de regroupement.
    Vous pouvez toujours remplacer ce paramètre dans une collection en définissant explicitement une clé de regroupement.
    false

Pour appliquer les modifications ci-dessus à votre cluster Milvus, veuillez suivre les étapes des sections Configurer Milvus avec Helm et Configurer Milvus avec Milvus Operators.

Configuration de la collecte

Pour compacter le clustering dans une collection spécifique, vous devez sélectionner un champ scalaire de la collection comme clé de clustering.

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)

Vous pouvez utiliser les champs scalaires des types de données suivants comme clé de clustering : Int8, Int16, Int32, Int64, Float, Double, et VarChar.

Déclencher le compactage de la mise en grappe

Si vous avez activé le compactage automatique du clustering, Milvus déclenche automatiquement le compactage à l'intervalle spécifié. Vous pouvez également déclencher manuellement le compactage comme suit :

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

Test de référence

Le volume de données et les modèles de requêtes combinés déterminent l'amélioration des performances que le compactage de clustering peut apporter. Un test de référence interne démontre que le compactage en grappe permet de multiplier par 25 le nombre de requêtes par seconde (QPS).

Le test de référence porte sur une collection d'entités provenant d'un ensemble de données LAION de 20 millions d'unités et de 768 dimensions, le champ clé étant désigné comme clé de clustering. Après le déclenchement du compactage de la collection, des recherches simultanées sont envoyées jusqu'à ce que l'utilisation de l'unité centrale atteigne un niveau élevé.

Filtre de recherche Ratio d'élagage Latence (ms) QPS (reqs/s)
Moyenne Min Max Médiane TP99
Aucun 0% 1685 672 2294 1710 2291 17.75
clé > 200 et clé < 800 40.2% 1045 47 1828 1085 1617 28.38
clé > 200 et clé < 600 59.8% 829 45 1483 882 1303 35.78
clé > 200 et clé < 400 79.5% 550 100 985 584 898 54.00
clé == 1000 99% 68 24 1273 70 246 431.41

Au fur et à mesure que la plage de recherche se réduit dans les filtres de recherche, le taux d'élagage augmente. Cela signifie que davantage d'entités sont ignorées au cours du processus de recherche. Si l'on compare les statistiques de la première et de la dernière ligne, on constate que les recherches sans compactage de grappes nécessitent l'analyse de l'ensemble de la collection. En revanche, les recherches avec compactage de grappes à l'aide d'une clé spécifique peuvent être multipliées par 25.

Meilleures pratiques

Voici quelques conseils pour vous aider à utiliser efficacement le compactage en grappes :

  • Activez cette option pour les collections contenant de gros volumes de données : les performances de recherche s'améliorent lorsque les volumes de données d'une collection sont plus importants. Il est conseillé d'activer cette fonctionnalité pour les collections comportant plus d'un million d'entités.

  • Choisissez une clé de clustering appropriée : vous pouvez utiliser des champs scalaires couramment employés comme conditions de filtrage en tant que clé de clustering. Pour une collection contenant des données provenant de plusieurs locataires, vous pouvez utiliser le champ qui distingue un locataire d'un autre comme clé de regroupement.

  • Utiliser la clé de partition comme clé de regroupement Vous pouvez définir common.usePartitionKeyAsClusteringKey sur true si vous souhaitez activer cette fonctionnalité pour toutes les collections de votre instance Milvus ou si vous rencontrez toujours des problèmes de performances dans une grande collection avec une clé de partition. Ainsi, vous disposerez d'une clé de regroupement et d'une clé de partition lorsque vous choisirez un champ scalaire dans une collection comme clé de partition.

    Notez que ce paramètre ne vous empêche pas de choisir un autre champ scalaire comme clé de clustering. La clé de regroupement explicitement désignée est toujours prioritaire.

Traduit parDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

Cette page a-t - elle été utile ?