milvus-logo
LFAI
Casa
  • Guida all'amministrazione
    • Ottimizzazione dello stoccaggio

Compattazione dei cluster

La compattazione del clustering è progettata per migliorare le prestazioni di ricerca e ridurre i costi di collezioni di grandi dimensioni. Questa guida vi aiuterà a capire la compattazione del clustering e come questa funzione può migliorare le prestazioni di ricerca.

Panoramica

Milvus memorizza le entità in arrivo in segmenti all'interno di una raccolta e chiude un segmento quando è pieno. In tal caso, viene creato un nuovo segmento per accogliere altre entità. Di conseguenza, le entità sono distribuite arbitrariamente tra i segmenti. Questa distribuzione richiede che Milvus cerchi in più segmenti per trovare i vicini più vicini a un dato vettore di query.

Without clustering Compaction Senza clustering Compattazione

Se Milvus può distribuire le entità tra i segmenti in base ai valori di un campo specifico, l'ambito di ricerca può essere limitato all'interno di un segmento, migliorando così le prestazioni di ricerca.

Lacompattazione dei cluster è una funzione di Milvus che ridistribuisce le entità tra i segmenti di una raccolta in base ai valori di un campo scalare. Per attivare questa funzione, è necessario selezionare un campo scalare come chiave di raggruppamento. Questo permette a Milvus di ridistribuire le entità in un segmento quando i valori della chiave di clustering rientrano in un intervallo specifico. Quando si attiva una compattazione del clustering, Milvus genera/aggiorna un indice globale chiamato PartitionStats, che registra la relazione di mappatura tra i segmenti e i valori delle chiavi di clustering.

With Clustering Compaction Con la compattazione del clustering

Utilizzando PartitionStats come riferimento, Milvus può sfrondare i dati irrilevanti quando riceve una richiesta di ricerca/query che contiene un valore di chiave di clustering e restringe l'ambito di ricerca all'interno dei segmenti che corrispondono al valore, migliorando così le prestazioni della ricerca. Per maggiori dettagli sul miglioramento delle prestazioni, consultare i test di benchmark.

Utilizzare la compattazione del clustering

La funzione Clustering Compaction di Milvus è altamente configurabile. Si può scegliere di attivarla manualmente o di impostarla in modo che venga attivata automaticamente da Milvus a intervalli. Per abilitare la compattazione del clustering, procedere come segue:

Configurazione globale

È necessario modificare il file di configurazione di Milvus come indicato di seguito.

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

    Configurazione VoceDescrizioneValore predefinito
    enableSpecifica se abilitare la compattazione del clustering.
    Impostare questo valore su true se è necessario abilitare questa funzione per ogni raccolta che ha una chiave di clustering.
    false
    autoEnableSpecifica se abilitare la compattazione automatica.
    L'impostazione di true indica che Milvus compatta le raccolte che hanno una chiave di raggruppamento agli intervalli specificati.
    false
    triggerIntervalSpecifica l'intervallo in millisecondi in cui Milvus avvia la compattazione del cluster.
    Questo parametro è valido solo quando autoEnable è impostato su true.
    -
    minIntervalSpecifica l'intervallo minimo in secondi.
    Questo parametro è valido solo quando autoEnable è impostato su true.
    L'impostazione di un numero intero superiore a triggerInterval consente di evitare compattazioni ripetute in un breve periodo.
    -
    maxIntervalSpecifica l'intervallo massimo in secondi.
    Questo parametro è valido solo quando autoEnable è impostato su true.
    Quando Milvus rileva che una raccolta non è stata compattata con il cluster per un periodo superiore a questo valore, forza una compattazione con il cluster.
    -
    newDataSizeThresholdSpecifica la soglia superiore per attivare la compattazione del clustering.
    Questo parametro è valido solo quando autoEnable è impostato su true.
    Quando Milvus rileva che il volume dei dati in una raccolta supera questo valore, avvia un processo di compattazione del clustering.
    -
    timeoutSpecifica la durata del timeout per la compattazione del clustering.
    Una compattazione di clustering fallisce se il tempo di esecuzione supera questo valore.
    -
  • queryNode

    Voce di configurazioneDescrizioneValore predefinito
    enableSegmentPruneSpecifica se Milvus deve eliminare i dati facendo riferimento a PartitionStats quando riceve richieste di ricerca/query.
    L'impostazione di true consente a Milvus di eliminare i dati irrilevanti dai segmenti durante una richiesta di ricerca/query.
    false
  • dataNode.clusteringCompaction

    Voce di configurazioneDescrizioneValore predefinito
    memoryBufferRatioSpecifica il rapporto del buffer di memoria per le attività di compattazione del cluster.
    Milvus elimina i dati quando la dimensione dei dati supera la dimensione del buffer allocato calcolata con questo rapporto.
    -
    workPoolSizeSpecifica la dimensione del pool di lavoratori per un'attività di compattazione del cluster.-
  • common

    Configurazione VoceDescrizioneValore predefinito
    usePartitionKeyAsClusteringKeySpecifica se utilizzare la chiave di partizione nelle raccolte come chiave di clustering.
    L'impostazione di true indica che la chiave di partizione viene utilizzata come chiave di clustering.
    È sempre possibile annullare questa impostazione in una raccolta impostando esplicitamente una chiave di clustering.
    false

Per applicare le modifiche di cui sopra al vostro cluster Milvus, seguite i passaggi in Configurazione di Milvus con Helm e Configurazione di Milvus con Milvus Operators.

Configurazione della raccolta

Per la compattazione del cluster in una raccolta specifica, è necessario selezionare un campo scalare della raccolta come chiave di 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)

È possibile utilizzare i campi scalari dei seguenti tipi di dati come chiave di clustering: Int8, Int16, Int32, Int64, Float, Double, e VarChar.

Attivare la compattazione del clustering

Se si è abilitata la compattazione automatica del clustering, Milvus attiva automaticamente la compattazione all'intervallo specificato. In alternativa, è possibile attivare manualmente la compattazione come segue:

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

Test di benchmark

Il volume dei dati e i modelli di query determinano il miglioramento delle prestazioni della compattazione del clustering. Un test di benchmark interno dimostra che la compattazione del clustering produce un miglioramento fino a 25 volte delle query al secondo (QPS).

Il test di benchmark è stato eseguito su una raccolta contenente entità di un dataset LAION da 20 milioni e 768 dimensioni, con il campo chiave designato come chiave di clustering. Dopo l'attivazione della compattazione del clustering nella raccolta, vengono inviate ricerche simultanee fino a quando l'utilizzo della CPU raggiunge un livello elevato.

Filtro di ricerca Rapporto di eliminazione Latenza (ms) QPS (richieste/s)
Media Min Massimo Mediana TP99
Nessuno 0% 1685 672 2294 1710 2291 17.75
chiave > 200 e chiave < 800 40.2% 1045 47 1828 1085 1617 28.38
chiave > 200 e chiave < 600 59.8% 829 45 1483 882 1303 35.78
chiave > 200 e chiave < 400 79.5% 550 100 985 584 898 54.00
chiave == 1000 99% 68 24 1273 70 246 431.41

Man mano che l'intervallo di ricerca si restringe nei filtri di ricerca, il rapporto di eliminazione aumenta. Ciò significa che un maggior numero di entità viene saltato durante il processo di ricerca. Confrontando le statistiche della prima e dell'ultima riga, si può notare che le ricerche senza compattazione del clustering richiedono la scansione dell'intera collezione. D'altra parte, le ricerche con la compattazione del clustering utilizzando una chiave specifica possono ottenere un miglioramento fino a 25 volte.

Le migliori pratiche

Ecco alcuni suggerimenti per utilizzare la compattazione del clustering in modo efficiente:

  • Abilitare questa funzione per le raccolte con grandi volumi di dati. Le prestazioni di ricerca migliorano con volumi di dati più grandi in una raccolta. È una buona scelta abilitare questa funzione per le raccolte con oltre 1 milione di entità.

  • Scegliere una chiave di raggruppamento appropriata: come chiave di raggruppamento si possono usare campi scalari comunemente usati come condizioni di filtraggio. Per una raccolta che contiene dati di più tenant, è possibile utilizzare come chiave di clustering il campo che distingue un tenant dall'altro.

  • Usare la chiave di partizione come chiave di clustering. È possibile impostare common.usePartitionKeyAsClusteringKey su true se si desidera attivare questa funzione per tutte le raccolte nell'istanza Milvus o se si riscontrano ancora problemi di prestazioni in una raccolta di grandi dimensioni con una chiave di partizione. In questo modo, si avrà una chiave di clustering e una chiave di partizione quando si sceglie un campo scalare in una raccolta come chiave di partizione.

    Questa impostazione non impedisce di scegliere un altro campo scalare come chiave di clustering. La chiave di raggruppamento esplicitamente designata ha sempre la precedenza.

Tradotto daDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

Questa pagina è stata utile?