Milvus
Zilliz
Home

Melhores práticas para armazenamento em camadasCompatible with Milvus 2.6.4+

O Milvus fornece o armazenamento em camadas para ajudá-lo a lidar eficientemente com dados em grande escala enquanto equilibra a latência da consulta, a capacidade e o uso de recursos. Este guia resume as configurações recomendadas para cargas de trabalho típicas e explica o raciocínio por trás de cada estratégia de ajuste.

Antes de começar

  • Milvus v2.6.4 ou posterior

  • Os QueryNodes devem ter recursos locais dedicados (memória e disco). Ambientes compartilhados podem distorcer a estimativa de cache e levar a erros de avaliação de despejo.

Escolha a estratégia certa

O Armazenamento em camadas oferece estratégias flexíveis de carregamento e armazenamento em cache que podem ser combinadas para se adequar à sua carga de trabalho.

Objetivo

Foco recomendado

Mecanismo principal

Minimizar a latência da primeira consulta

Pré-carregar campos críticos

Aquecimento

Lidar com dados em grande escala de forma eficiente

Carregar a pedido

Carga preguiçosa + carga parcial

Manter a estabilidade a longo prazo

Evitar o excesso de cache

Evicção

Equilibrar o desempenho e a capacidade

Combinar pré-carregamento e cache dinâmico

Configuração híbrida

Cenário 1: recuperação em tempo real e de baixa latência

Quando utilizar

  • A latência da consulta é crítica (por exemplo, recomendação em tempo real ou classificação de pesquisa)

  • Os índices vectoriais principais e os filtros escalares são acedidos frequentemente

  • O desempenho consistente é mais importante do que a velocidade de inicialização

Configuração recomendada

# 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

Justificativa

  • O aquecimento elimina a latência de primeiro acesso para índices escalares e vetoriais de alta frequência.

  • O despejo em segundo plano mantém a pressão estável da cache sem bloquear as consultas.

  • A desativação do TTL da cache evita recarregamentos desnecessários para dados quentes.

Cenário 2: análise em lote offline

Quando usar

  • A tolerância à latência da consulta é alta

  • As cargas de trabalho envolvem conjuntos de dados maciços ou muitos segmentos

  • A capacidade e a taxa de transferência são priorizadas em relação à capacidade de resposta

Configuração recomendada

# 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

Justificativa

  • A desativação do warm-up acelera a inicialização ao inicializar muitos segmentos.

  • Marcas d'água mais altas permitem o uso mais denso do cache, melhorando a capacidade total de carga.

  • O TTL do cache limpa automaticamente os dados não utilizados para liberar espaço local.

Cenário 3: implantação híbrida (mista online + offline)

Quando utilizar

  • Um único cluster serve cargas de trabalho online e analíticas

  • Algumas colecções requerem baixa latência, outras dão prioridade à capacidade

Estratégia recomendada

  • Aplicar a configuração em tempo real a colecções sensíveis à latência

  • Aplicar a configuração offline a colecções analíticas ou de arquivo

  • Ajustar os rácios evictableMemoryCacheRatio, cacheTtl e marca de água de forma independente para cada tipo de carga de trabalho

Fundamentação

A combinação de configurações permite um controlo fino da atribuição de recursos.

As coleções críticas mantêm garantias de baixa latência, enquanto as coleções secundárias podem lidar com mais segmentos e volume de dados.

Dicas de ajuste adicionais

Aspeto

Recomendação

Explicação

Escopo de aquecimento

Apenas pré-carregue campos ou índices com elevada frequência de consulta.

O pré-carregamento desnecessário aumenta o tempo de carregamento e a utilização de recursos.

Ajuste de despejo

Comece com marcas d'água padrão (75-80%) e ajuste gradualmente.

Um pequeno intervalo provoca despejos frequentes; um grande intervalo atrasa a libertação de recursos.

TTL da cache

Desativar para conjuntos de dados quentes estáveis; ativar (por exemplo, 1-3 dias) para dados dinâmicos.

Evita o acúmulo de cache obsoleto enquanto equilibra a sobrecarga de limpeza.

Rácio de sobrecompromisso

Evite valores > 0,7 a menos que o espaço de recursos seja grande.

O excesso de comprometimento pode causar travamento do cache e latência instável.

Monitorização

Acompanhe a taxa de acerto da cache, a utilização de recursos e a frequência de despejo.

Cargas frias frequentes podem indicar que o aquecimento ou as marcas d'água precisam de ajustes.