Milvus
Zilliz
  • Home
  • Blog
  • Fragmentação JSON em Milvus: filtragem JSON 88,9x mais rápida com flexibilidade

Fragmentação JSON em Milvus: filtragem JSON 88,9x mais rápida com flexibilidade

  • Engineering
December 04, 2025
Jack Zhang

Os sistemas de IA modernos estão a produzir mais dados JSON semiestruturados do que nunca. As informações de clientes e produtos são compactadas em um objeto JSON, os microsserviços emitem logs JSON em cada solicitação, os dispositivos IoT transmitem leituras de sensores em cargas JSON leves e os aplicativos de IA atuais padronizam cada vez mais o JSON para saída estruturada. O resultado é uma enxurrada de dados do tipo JSON fluindo para bancos de dados vetoriais.

Tradicionalmente, há duas maneiras de lidar com documentos JSON:

  • Predefinir cada campo do JSON em um esquema fixo e criar um índice: Essa abordagem oferece um bom desempenho de consulta, mas é rígida. Uma vez que o formato dos dados é alterado, cada campo novo ou modificado aciona outra rodada de atualizações dolorosas da Linguagem de Definição de Dados (DDL) e migrações de esquema.

  • Armazenar todo o objeto JSON como uma única coluna (tanto o tipo JSON como o Dynamic Schema em Milvus utilizam esta abordagem): Esta opção oferece excelente flexibilidade, mas ao custo do desempenho da consulta. Cada solicitação requer a análise JSON em tempo de execução e, muitas vezes, uma varredura completa da tabela, resultando em latência que aumenta à medida que o conjunto de dados cresce.

Costumava ser um dilema de flexibilidade e desempenho.

Não é mais assim com o recurso JSON Shredding recentemente introduzido no Milvus.

Com a introdução do JSON Shredding, o Milvus agora consegue agilidade sem esquema com o desempenho do armazenamento colunar, finalmente tornando os dados semi-estruturados em grande escala flexíveis e fáceis de consultar.

Como funciona a fragmentação de JSON

A fragmentação de JSON acelera as consultas JSON ao transformar documentos JSON baseados em linhas em armazenamento colunar altamente otimizado. O Milvus preserva a flexibilidade do JSON para modelagem de dados enquanto otimiza automaticamente o armazenamento em colunas - melhorando significativamente o acesso aos dados e o desempenho das consultas.

Para lidar com campos JSON esparsos ou raros de forma eficiente, o Milvus também tem um índice invertido para chaves partilhadas. Tudo isto acontece de forma transparente para os utilizadores: pode inserir documentos JSON como habitualmente, e deixar que seja o Milvus a gerir internamente a estratégia de armazenamento e indexação ideal.

Quando o Milvus recebe registos JSON em bruto com formas e estruturas variadas, analisa cada chave JSON quanto à sua taxa de ocorrência e estabilidade de tipo (se o seu tipo de dados é consistente entre documentos). Com base nesta análise, cada chave é classificada numa de três categorias:

  • Chaves digitadas: Chaves que aparecem na maioria dos documentos e têm sempre o mesmo tipo de dados (por exemplo, todos os números inteiros ou todas as cadeias de caracteres).

  • Chaves dinâmicas: Chaves que aparecem frequentemente mas têm tipos de dados mistos (por exemplo, por vezes uma cadeia de caracteres, por vezes um número inteiro).

  • Chaves partilhadas: Chaves que são infrequentes, esparsas ou aninhadas, ficando abaixo de um limite de frequência configurável.

O Milvus lida com cada categoria de forma diferente para maximizar a eficiência:

  • As chaves tipadas são armazenadas em colunas dedicadas e fortemente tipadas.

  • Chaves dinâmicas são colocadas em colunas dinâmicas com base no tipo de valor real observado em tempo de execução.

  • Tanto as colunas tipadas como as dinâmicas são armazenadas em formatos colunares Arrow/Parquet para uma pesquisa rápida e uma execução de consulta altamente optimizada.

  • As chaves partilhadas são consolidadas numa coluna JSON binária compacta, acompanhada por um índice invertido de chave partilhada. Este índice acelera as consultas em campos de baixa frequência, eliminando antecipadamente as linhas irrelevantes e restringindo a pesquisa apenas aos documentos que contêm a chave consultada.

Essa combinação de armazenamento colunar adaptável e indexação invertida forma o núcleo do mecanismo de fragmentação JSON do Milvus, permitindo flexibilidade e alto desempenho em escala.

O fluxo de trabalho geral é ilustrado abaixo:

Agora que cobrimos o básico de como a fragmentação JSON funciona, vamos dar uma olhada mais de perto nos principais recursos que tornam essa abordagem flexível e de alto desempenho.

Fragmentação e colunarização

Quando um novo documento JSON é escrito, Milvus o divide e o reorganiza em um armazenamento colunar otimizado:

  • Chaves digitadas e dinâmicas são automaticamente identificadas e armazenadas em colunas dedicadas.

  • Se o JSON contém objectos aninhados, o Milvus gera automaticamente nomes de colunas baseados em caminhos. Por exemplo, um campo name dentro de um objeto user pode ser armazenado com o nome de coluna /user/name.

  • As chaves partilhadas são armazenadas em conjunto numa única coluna JSON binária compacta. Como essas chaves aparecem com pouca frequência, o Milvus cria um índice invertido para elas, permitindo uma filtragem rápida e permitindo que o sistema localize rapidamente as linhas que contêm a chave especificada.

Gestão inteligente de colunas

Para além de fragmentar o JSON em colunas, o Milvus acrescenta uma camada adicional de inteligência através da gestão dinâmica de colunas, assegurando que a fragmentação JSON se mantém flexível à medida que os dados evoluem.

  • Colunas criadas conforme necessário: Quando novas chaves aparecem em documentos JSON de entrada, o Milvus agrupa automaticamente valores com a mesma chave numa coluna dedicada. Isto preserva as vantagens de desempenho do armazenamento em colunas sem exigir que os utilizadores concebam esquemas antecipadamente. O Milvus também infere o tipo de dados dos novos campos (por exemplo, INTEGER, DOUBLE, VARCHAR) e seleciona um formato colunar eficiente para eles.

  • Todas as chaves são tratadas automaticamente: Milvus analisa e processa cada chave no documento JSON. Isto garante uma ampla cobertura de consulta sem forçar os utilizadores a predefinir campos ou construir índices antecipadamente.

Otimização de consultas

Uma vez que os dados são reorganizados nas colunas certas, Milvus seleciona o caminho de execução mais eficiente para cada consulta:

  • Varredura direta de colunas para chaves digitadas e dinâmicas: Se uma consulta visa um campo que já foi dividido na sua própria coluna, o Milvus pode pesquisar essa coluna diretamente. Isso reduz a quantidade total de dados que precisam ser processados e aproveita a computação colunar acelerada por SIMD para uma execução ainda mais rápida.

  • Pesquisa indexada para chaves partilhadas: Se a consulta envolver um campo que não foi promovido para a sua própria coluna - normalmente uma chave rara - o Milvus avalia-a em relação à coluna de chave partilhada. O índice invertido construído nesta coluna permite ao Milvus identificar rapidamente quais as linhas que contêm a chave especificada e saltar as restantes, melhorando significativamente o desempenho dos campos de baixa frequência.

  • Gestão automática de metadados: O Milvus mantém continuamente metadados e dicionários globais para que as consultas permaneçam precisas e eficientes, mesmo quando a estrutura dos documentos JSON de entrada evolui com o tempo.

Referências de desempenho

Concebemos um parâmetro de referência para comparar o desempenho de consulta do armazenamento de todo o documento JSON como um único campo em bruto com a utilização da funcionalidade JSON Shredding recentemente lançada.

Ambiente de teste e metodologia

  • Hardware: cluster de 1 núcleo/8 GB

  • Conjunto de dados: 1 milhão de documentos do JSONBench

  • Metodologia: Medir o QPS e a latência em diferentes padrões de consulta

Resultados: chaves digitadas

Este teste mediu o desempenho ao consultar uma chave presente na maioria dos documentos.

Expressão de consultaQPS (sem fragmentação)QPS (com fragmentação)Aumento de desempenho
json['time_us'] > 08.69287.533x
json['kind'] == 'commit'8.42126.114.9x

Resultados: chaves partilhadas

Este teste concentrou-se na consulta de chaves esparsas e aninhadas que se enquadram na categoria "partilhada".

Expressão da consultaQPS (sem fragmentação)QPS (com fragmentação)Aumento de desempenho
json['identidade']['seq'] > 04.3338588.9x
json['identity']['did'] == 'xxxxx'7.635246.3x

As consultas de chave compartilhada mostram as melhorias mais drásticas (até 89× mais rápidas), enquanto as consultas de chave digitada fornecem acelerações consistentes de 15-30×. No geral, todos os tipos de consulta se beneficiam do JSON Shredding, com ganhos claros de desempenho em toda a linha.

Experimente agora

Quer esteja a trabalhar com registos de API, dados de sensores IoT ou cargas úteis de aplicações em rápida evolução, o JSON Shredding dá-lhe a rara capacidade de ter flexibilidade e elevado desempenho.

O recurso já está disponível e é bem-vindo para experimentá-lo agora. Você também pode consultar este documento para obter mais detalhes.

Tem perguntas ou quer um mergulho profundo em qualquer caraterística do Milvus mais recente? Junte-se ao nosso canal Discord ou arquive problemas no GitHub. Você também pode reservar uma sessão individual de 20 minutos para obter insights, orientações e respostas às suas perguntas através do Milvus Office Hours.

    Try Managed Milvus for Free

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

    Get Started

    Like the article? Spread the word

    Continue Lendo