Milvus
Zilliz
Casa

Migliori pratiche per l'archiviazione a livelliCompatible with Milvus 2.6.4+

Milvus offre il sistema di archiviazione a livelli per aiutarvi a gestire in modo efficiente i dati su larga scala, bilanciando la latenza delle query, la capacità e l'utilizzo delle risorse. Questa guida riassume le configurazioni consigliate per i carichi di lavoro tipici e spiega le ragioni di ciascuna strategia di ottimizzazione.

Prima di iniziare

  • Milvus v2.6.4 o successivo

  • I QueryNode devono avere risorse locali dedicate (memoria e disco). Gli ambienti condivisi possono distorcere la stima della cache e causare errori di valutazione.

Scegliere la strategia giusta

Tiered Storage offre strategie flessibili di caricamento e caching che possono essere combinate per adattarsi al carico di lavoro.

Obiettivo

Obiettivo consigliato

Meccanismo chiave

Ridurre al minimo la latenza della prima richiesta

Precaricare i campi critici

Riscaldare

Gestire in modo efficiente i dati su larga scala

Caricare su richiesta

Carico pigro + carico parziale

Mantenere la stabilità a lungo termine

Prevenire l'overflow della cache

Evacuazione

Bilanciare prestazioni e capacità

Combinare il precarico e la cache dinamica

Configurazione ibrida

Scenario 1: recupero in tempo reale e a bassa latenza

Quando utilizzare

  • La latenza delle query è critica (ad esempio, raccomandazioni in tempo reale o ranking di ricerca)

  • Gli indici vettoriali e i filtri scalari del core vengono acceduti frequentemente

  • Le prestazioni costanti sono più importanti della velocità di avviamento

Configurazione consigliata

# milvus.yaml
queryNode:
  segcore:
    tieredStorage:
      warmup:
        # scalar field/index warm-up to eliminate first-time latency
        scalarField: sync
        scalarIndex: sync
        # warm-up of vector fields is disabled (if the original vector is not required)
        vectorField: disable
        # vector indexes warm-up to elminate first-time latenct
        vectorIndex: sync
      # enable cache eviction, and also turn on background asynchronous eviction
      # to reduce the triggering of synchronous eviction.
      evictionEnabled: true
      backgroundEvictionEnabled: true
      memoryLowWatermarkRatio: 0.75
      memoryHighWatermarkRatio: 0.8
      diskLowWatermarkRatio: 0.75
      diskHighWatermarkRatio: 0.8
      # no expiration time, which avoids frequent reloading
      cacheTtl: 0

Motivazione

  • Il warmup elimina la latenza di primo impatto per gli indici scalari e vettoriali ad alta frequenza.

  • Lo sfratto in background mantiene stabile la pressione della cache senza bloccare le query.

  • La disabilitazione del TTL della cache evita ricariche inutili per i dati caldi.

Scenario 2: analisi offline, in batch

Quando si usa

  • La tolleranza alla latenza delle query è elevata

  • I carichi di lavoro coinvolgono insiemi di dati massicci o molti segmenti.

  • La capacità e il throughput sono prioritari rispetto alla reattività.

Configurazione consigliata

# milvus.yaml
queryNode:
  segcore:
    tieredStorage:
      enabled: true
      warmup:
        # disable scalar field/index warm-up to speed up loading
        scalarField: disable
        scalarIndex: disable
        # disable vector field/index warm-up to speed up loading
        vectorField: disable
        vectorIndex: disable
      # enable cache eviction, and also turn on background asynchronous eviction
      # to reduce the triggering of synchronous eviction.
      evictionEnabled: true
      backgroundEvictionEnabled: true
      memoryLowWatermarkRatio: 0.7
      memoryHighWatermarkRatio: 0.85
      diskLowWatermarkRatio: 0.7
      diskHighWatermarkRatio: 0.85
      # use 1 day expiration to clean unused cache
      cacheTtl: 86400

Motivazione

  • La disabilitazione del warm-up accelera l'avvio quando si inizializzano molti segmenti.

  • Filigrane più alte consentono un uso più denso della cache, migliorando la capacità di carico totale.

  • Il TTL della cache pulisce automaticamente i dati inutilizzati per liberare spazio locale.

Scenario 3: distribuzione ibrida (mista online + offline)

Quando si usa

  • Un singolo cluster serve sia carichi di lavoro online che analitici.

  • Alcune collezioni richiedono una bassa latenza, mentre altre danno priorità alla capacità.

Strategia consigliata

  • Applicare la configurazione in tempo reale alle raccolte sensibili alla latenza.

  • Applicare la configurazione offline alle raccolte analitiche o di archivio.

  • Regolare evictableMemoryCacheRatio, cacheTtl e rapporti di filigrana in modo indipendente per ogni tipo di carico di lavoro.

Motivazione

La combinazione delle configurazioni consente un controllo a grana fine dell'allocazione delle risorse.

Le raccolte critiche mantengono garanzie di bassa latenza, mentre le raccolte secondarie possono gestire più segmenti e volumi di dati.

Ulteriori suggerimenti per la messa a punto

Aspetto

Raccomandazione

Spiegazione

Ambito di riscaldamento

Precaricare solo i campi o gli indici con un'alta frequenza di query.

Il precaricamento non necessario aumenta il tempo di caricamento e l'uso delle risorse.

Regolazione dello svuotamento

Iniziare con le filigrane predefinite (75-80%) e regolare gradualmente.

Uno scarto ridotto provoca uno svuotamento frequente; uno scarto elevato ritarda il rilascio delle risorse.

TTL della cache

Disattivare per i dataset stabili e caldi; attivare (ad esempio, 1-3 giorni) per i dati dinamici.

Impedisce l'accumulo di cache stantie e bilancia i costi di pulizia.

Rapporto di overcommit

Evitare valori > 0,7 a meno che le risorse non siano ampie.

Un overcommit eccessivo può causare il thrashing della cache e una latenza instabile.

Monitoraggio

Tenete traccia del rapporto di hit della cache, dell'utilizzo delle risorse e della frequenza di evasione.

I frequenti carichi a freddo possono indicare che il riscaldamento o i watermark devono essere regolati.