O que é o Milvus?
O Milvus é uma ave de rapina do género Milvus da família dos falcões Accipaitridae, famosa pela sua velocidade de voo, visão aguçada e notável adaptabilidade.
A Zilliz adopta o nome Milvus para a sua base de dados vetorial de código aberto, de elevado desempenho e altamente escalável, que funciona eficientemente numa vasta gama de ambientes, desde um computador portátil a sistemas distribuídos de grande escala. Está disponível como software de código aberto e como um serviço na nuvem.
Desenvolvido por Zilliz e rapidamente doado à LF AI & Data Foundation no âmbito da Linux Foundation, o Milvus tornou-se um dos principais projectos de bases de dados vectoriais de código aberto do mundo. É distribuído ao abrigo da licença Apache 2.0 e a maioria dos colaboradores são especialistas da comunidade de computação de alto desempenho (HPC), especializados na criação de sistemas de grande escala e na otimização de código sensível ao hardware. Os principais colaboradores incluem profissionais da Zilliz, ARM, NVIDIA, AMD, Intel, Meta, IBM, Salesforce, Alibaba e Microsoft.
Curiosamente, cada projeto de código aberto Zilliz tem o nome de um pássaro, uma convenção de nomes que simboliza a liberdade, a previsão e a evolução ágil da tecnologia.
Dados não estruturados, Embeddings e Milvus
Os dados não estruturados, tais como texto, imagens e áudio, variam em formato e transportam uma semântica subjacente rica, o que torna a sua análise difícil. Para gerir esta complexidade, os embeddings são utilizados para converter dados não estruturados em vectores numéricos que captam as suas caraterísticas essenciais. Estes vectores são então armazenados numa base de dados vetorial, permitindo pesquisas e análises rápidas e escaláveis.
Milvus oferece capacidades robustas de modelação de dados, permitindo-lhe organizar os seus dados não estruturados ou multimodais em colecções estruturadas. Suporta uma vasta gama de tipos de dados para diferentes modelações de atributos, incluindo tipos numéricos e de caracteres comuns, vários tipos de vectores, matrizes, conjuntos e JSON, poupando-lhe o esforço de manter vários sistemas de bases de dados.
Dados não estruturados, embeddings e Milvus
O Milvus oferece três modos de implantação, cobrindo uma ampla gama de escalas de dados - desde a prototipagem local em Jupyter Notebooks até clusters Kubernetes massivos que gerenciam dezenas de bilhões de vetores:
- O Milvus Lite é uma biblioteca Python que pode ser facilmente integrada nas suas aplicações. Como uma versão leve do Milvus, é ideal para prototipagem rápida em Jupyter Notebooks ou execução em dispositivos de borda com recursos limitados. Saiba mais.
- O Milvus Standalone é uma implantação de servidor de máquina única, com todos os componentes agrupados em uma única imagem Docker para uma implantação conveniente. Saiba mais.
- O Milvus Distributed pode ser implementado em clusters Kubernetes, apresentando uma arquitetura nativa da cloud concebida para cenários à escala de mil milhões ou ainda maiores. Essa arquitetura garante redundância em componentes críticos. Saiba mais.
O que torna o Milvus tão rápido?
Milvus foi concebido desde o primeiro dia para ser um sistema de base de dados vetorial altamente eficiente. Na maioria dos casos, Milvus supera outros bancos de dados vetoriais em 2-5x (veja os resultados do VectorDBBench). Esse alto desempenho é o resultado de várias decisões importantes de projeto:
Otimização sensível ao hardware: Para acomodar o Milvus em vários ambientes de hardware, optimizámos o seu desempenho especificamente para muitas arquitecturas e plataformas de hardware, incluindo AVX512, SIMD, GPUs e SSD NVMe.
Algoritmos de pesquisa avançados: O Milvus suporta uma vasta gama de algoritmos de indexação/pesquisa na memória e no disco, incluindo IVF, HNSW, DiskANN, entre outros, todos profundamente optimizados. Em comparação com implementações populares como FAISS e HNSWLib, Milvus oferece desempenho 30%-70% melhor.
Mecanismo de pesquisa em C++: Mais de 80% do desempenho de uma base de dados vetorial é determinado pelo seu motor de pesquisa. O Milvus utiliza C++ para este componente crítico devido ao elevado desempenho da linguagem, à otimização de baixo nível e à gestão eficiente dos recursos. Mais importante ainda, Milvus integra numerosas optimizações de código sensíveis ao hardware, que vão desde a vectorização ao nível da montagem até à paralelização e programação multi-thread, para tirar o máximo partido das capacidades do hardware.
Orientado a colunas: Milvus é um sistema de banco de dados vetorial orientado a colunas. As principais vantagens vêm dos padrões de acesso aos dados. Ao efetuar consultas, uma base de dados orientada por colunas lê apenas os campos específicos envolvidos na consulta, em vez de linhas inteiras, o que reduz consideravelmente a quantidade de dados acedidos. Além disso, as operações em dados baseados em colunas podem ser facilmente vectorizadas, permitindo que as operações sejam aplicadas em todas as colunas de uma só vez, melhorando ainda mais o desempenho.
O que torna o Milvus tão escalável
Em 2022, Milvus suportou vetores de escala de bilhões e, em 2023, escalou até dezenas de bilhões com estabilidade consistente, alimentando cenários de grande escala para mais de 300 grandes empresas, incluindo Salesforce, PayPal, Shopee, Airbnb, eBay, NVIDIA, IBM, AT&T, LINE, ROBLOX, Inflection, etc.
A arquitetura de sistema nativa da nuvem e altamente desacoplada de Milvus garante que o sistema pode expandir-se continuamente à medida que os dados crescem:
Arquitetura de sistema altamente dissociada de Milvus
O próprio Milvus é totalmente sem estado, pelo que pode ser facilmente escalado com a ajuda de Kubernetes ou nuvens públicas. Além disso, os componentes do Milvus são bem desacoplados, com as três tarefas mais críticas - pesquisa, inserção de dados e indexação/compactação - projetadas como processos facilmente paralelizados, com lógica complexa separada. Isto assegura que o nó de consulta correspondente, o nó de dados e o nó de índice podem ser escalados independentemente, optimizando o desempenho e a eficiência de custos.
Tipos de pesquisas suportadas pelo Milvus
Milvus suporta vários tipos de funções de pesquisa para satisfazer as exigências de diferentes casos de utilização:
- Pesquisa ANN: Encontra os K vectores de topo mais próximos do seu vetor de consulta.
- Pesquisa de filtragem: Executa a pesquisa ANN sob condições de filtragem especificadas.
- Pesquisa de intervalo: Encontra vetores dentro de um raio especificado a partir do vetor de consulta.
- Pesquisa híbrida: Realiza a pesquisa ANN com base em vários campos vetoriais.
- Pesquisa de texto completo: Pesquisa de texto completo com base no BM25.
- Reranking: Ajusta a ordem dos resultados da pesquisa com base em critérios adicionais ou num algoritmo secundário, refinando os resultados iniciais da pesquisa ANN.
- Buscar: Recupera dados pelas suas chaves primárias.
- Consulta: Recupera dados utilizando expressões específicas.
Conjunto abrangente de funcionalidades
Para além das principais funcionalidades de pesquisa mencionadas acima, o Milvus também fornece um conjunto de funcionalidades implementadas em torno das pesquisas ANN para que possa utilizar plenamente as suas capacidades.
API e SDK
- API RESTful (oficial)
- PyMilvus (Python SDK) (oficial)
- Go SDK (oficial)
- Java SDK (oficial)
- Node.js (JavaScript) SDK (oficial)
- C# (contribuição da Microsoft)
- C++ SDK (oficial)
- Rust SDK (em desenvolvimento)
Tipos de dados avançados
Para além dos tipos de dados primitivos, o Milvus suporta vários tipos de dados avançados e as respectivas métricas de distância aplicáveis.
- Vectores esparsos
- Vectores binários
- Suporte a JSON
- Suporte a matrizes
- Texto (em desenvolvimento)
- Geolocalização (em desenvolvimento)
Porquê Milvus?
Alto desempenho em escala e alta disponibilidade
Milvus apresenta uma arquitetura distribuída que separa a computação do armazenamento. O Milvus pode escalar horizontalmente e adaptar-se a diversos padrões de tráfego, alcançando um desempenho ótimo ao aumentar independentemente os nós de consulta para cargas de trabalho de leitura intensiva e os nós de dados para cargas de trabalho de escrita intensiva. Os microsserviços sem estado no K8s permitem uma rápida recuperação de falhas, garantindo uma elevada disponibilidade. O suporte para réplicas aumenta ainda mais a tolerância a falhas e a taxa de transferência ao carregar segmentos de dados em vários nós de consulta. Veja o benchmark para comparação de desempenho.
Suporte para vários tipos de índices vectoriais e aceleração de hardware
O Milvus separa o sistema e o motor de pesquisa vetorial principal, permitindo-lhe suportar todos os principais tipos de índices vectoriais optimizados para diferentes cenários, incluindo HNSW, IVF, FLAT (força bruta), SCANN e DiskANN, com variações baseadas na quantização e mmap. O Milvus optimiza a pesquisa vetorial para funcionalidades avançadas, como a filtragem de metadados e a pesquisa por intervalos. Além disso, o Milvus implementa a aceleração de hardware para melhorar o desempenho da pesquisa vetorial e oferece suporte à indexação de GPU, como o CAGRA da NVIDIA.
Multitenancy flexível e armazenamento Hot/Cold
O Milvus suporta multi-tenancy através do isolamento ao nível da base de dados, coleção, partição ou chave de partição. As estratégias flexíveis permitem que um único cluster lide com centenas a milhões de inquilinos, garantindo também um desempenho de pesquisa optimizado e um controlo de acesso flexível. O Milvus melhora a relação custo-benefício com o armazenamento quente/frio. Os dados quentes acedidos com frequência podem ser armazenados na memória ou em SSDs para um melhor desempenho, enquanto os dados frios menos acedidos são mantidos num armazenamento mais lento e económico. Este mecanismo pode reduzir significativamente os custos, mantendo um elevado desempenho para tarefas críticas.
Vetor esparso para pesquisa de texto integral e pesquisa híbrida
Para além da pesquisa semântica através de vetor denso, o Milvus também suporta nativamente a pesquisa de texto completo com BM25, bem como a incorporação esparsa aprendida, como SPLADE e BGE-M3. Os utilizadores podem armazenar o vetor esparso e o vetor denso na mesma coleção e definir funções para classificar os resultados de vários pedidos de pesquisa. Ver exemplos de pesquisa híbrida com pesquisa semântica + pesquisa de texto integral.
Segurança dos dados e controlo de acesso de grão fino
Milvus garante a segurança dos dados através da implementação de autenticação obrigatória do utilizador, encriptação TLS e controlo de acesso baseado em funções (RBAC). A autenticação do utilizador garante que apenas os utilizadores autorizados com credenciais válidas podem aceder à base de dados, enquanto a encriptação TLS protege todas as comunicações dentro da rede. Adicionalmente, o RBAC permite um controlo de acesso mais fino, atribuindo permissões específicas aos utilizadores com base nas suas funções. Estas caraterísticas fazem do Milvus uma escolha robusta e segura para aplicações empresariais, protegendo os dados sensíveis de acessos não autorizados e potenciais violações.
Integrações de IA
Integrações de modelos de incorporação Os modelos de incorporação convertem dados não estruturados para a sua representação numérica no espaço de dados de alta dimensão, para que os possa armazenar em Milvus. Atualmente, o PyMilvus, o SDK Python, integra vários modelos de incorporação para que possa preparar rapidamente os seus dados em incorporação de vectores. Para obter detalhes, consulte Visão geral da incorporação.
Integrações de modelos de ranqueamento No domínio da recuperação de informações e da IA generativa, um ranqueador é uma ferramenta essencial que otimiza a ordem dos resultados das pesquisas iniciais. O PyMilvus também integra vários modelos de reranking para otimizar a ordem dos resultados retornados das pesquisas iniciais. Para obter detalhes, consulte Visão geral dos ranqueadores.
LangChain e outras integrações de ferramentas de IA Na era da GenAI, as ferramentas, como a LangChain, ganham muita atenção dos programadores de aplicações. Como componente central, o Milvus serve normalmente como armazém de vectores nessas ferramentas. Para saber como integrar o Milvus nas suas ferramentas de IA favoritas, consulte as nossas Integrações e Tutoriais.
Ferramentas e Ecossistema
Attu Attu é um GUI tudo-em-um intuitivo que o ajuda a gerir Milvus e os dados que armazena. Para mais informações, consulte o repositório Attu.
Birdwatcher O Birdwatcher é uma ferramenta de depuração para o Milvus. Usando-o para se conectar ao etcd, você pode verificar o estado do seu sistema Milvus ou configurá-lo em tempo real. Para obter detalhes, consulte BirdWatcher.
Integrações do Promethus e do Grafana O Prometheus é um kit de ferramentas de monitoramento e alerta de sistema de código aberto para o Kubernetes. Grafana é uma pilha de visualização de código aberto que pode se conectar a todas as fontes de dados. Você pode usar o Promethus e o Grafana como provedor de serviços de monitoramento para monitorar visualmente o desempenho do Milvus distribuído. Para obter detalhes, consulte Implantação de serviços de monitoramento.
Milvus Backup O Milvus Backup é uma ferramenta que permite aos utilizadores fazer cópias de segurança e restaurar dados do Milvus. Ele fornece tanto CLI e API para se encaixar em diferentes cenários de aplicação. Para mais informações, consulte Milvus Backup.
Milvus Capture Data Change (CDC) Milvus-CDC pode capturar e sincronizar dados incrementais em instâncias Milvus e garante a fiabilidade dos dados de negócios, transferindo-os perfeitamente entre instâncias de origem e de destino, permitindo fácil backup incremental e recuperação de desastres. Para mais informações, consulte Milvus CDC.
Conectores do Milvus O Milvus planeou um conjunto de conectores para que possa integrar o Milvus com ferramentas de terceiros, como o Apache Spark. Atualmente, pode utilizar o nosso Conector Spark para alimentar os dados do Milvus com o Apache Spark para processamento de aprendizagem automática. Para obter detalhes, consulte o Conector Spark-Milvus.
Vetor Transmission Services (VTS) O Milvus fornece um conjunto de ferramentas para transferir os seus dados entre uma instância Milvus e um conjunto de fontes de dados, incluindo clusters Zilliz, Elasticsearch, Postgres (PgVector) e outra instância Milvus. Para mais informações, consulte VTS.