Os dadosvetoriais estão no cerne das funcionalidades modernas baseadas em IA: pesquisa semântica, motores de recomendação, pipelines RAG (Retrieval-Augmented Generation) e muito mais. À medida que os campos `4D` e `Vector ` se tornam elementos de primeira classe nas bases de dados 4D, a capacidade de os indexar de forma eficiente é essencial para manter a rapidez das consultas à medida que os conjuntos de dados crescem. Este artigo explica como funciona a indexação vetorial no 4D, quais os algoritmos suportados e como gerir índices vetoriais programaticamente.
Consultar um campo vetorial significa, normalmente, encontrar os registos cujos vetores são os «mais próximos» de um vetor de referência, utilizando uma métrica de similaridade. Sem um índice, o 4D tem de analisar todos os vetores da tabela e calcular a distância um a um, o que é correto, mas lento à medida que a tabela cresce.
Com um índice vetorial, o 4D utiliza um algoritmo especificamente concebido para a pesquisa de semelhança vetorial, reduzindo drasticamente o tempo de consulta, ao mesmo tempo que devolve os mesmos resultados que uma consulta sem índice. Por outras palavras:
- A exatidão é preservada: as consultas indexadas e não indexadas devolvem conjuntos de resultados idênticos.
- O desempenho melhora: as consultas indexadas são aproximadamente 8 vezes mais rápidas do que as não indexadas.
Tipos de índices vetoriais suportados
O 4D introduz três tipos de índice dedicados para campos 4D.Vector, para além do índice «Padrão» já existente:
| Constante | Caso de utilização |
|---|---|
Índice de cosseno vetorial |
Semelhança com base no ângulo entre vetores |
Índice de produto escalar de vetores |
Semelhança baseada no produto escalar |
Índice euclidiano de vetores |
Semelhança baseada na distância em linha reta |
Estes estão disponíveis através de CREATE INDEX e SET INDEX, e cada tipo de índice pode ser selecionado de forma independente, permitindo que um único campo vetorial tenha vários índices simultaneamente (por exemplo, tanto o cosseno como o euclidiano).
Interface do utilizador
Os campos vetoriais e os seus índices estão totalmente integrados no Editor de Estruturas e nas caixas de diálogo relacionadas:
- Os campos do tipo «4D » ( ) e « Vector » ( ) apresentam um ícone vetorial específico
, tanto no Editor de Estrutura como no Inspector.
- A janela da lista de índices apresenta os índices vetoriais juntamente com os índices normais.

- A partir do Inspector, do menu contextual do campo e da janela «Criar/Editar Índice», apenas são oferecidos os índices Coseno, Ponto, Euclidiano e Automático para campos vetoriais, cada um selecionável de forma independente. A seleção de qualquer outro tipo de índice provoca um erro.

Manter os índices consistentes
O 4D encarrega-se de manter os índices vetoriais consistentes com os dados:
- A atualização de um vetor através de `save()` (ou qualquer outro comando) atualiza automaticamente o índice associado.
- A eliminação de um vetor através de `drop()` (ou qualquer outro comando) atualiza automaticamente o índice associado.
Tenha em atenção que:
- Os índices compostos não podem incluir um campo vetorial.
-
As atualizações de índices vetoriais não são atualmente suportadas no âmbito de transações.
Suporte operacional
Os índices vetoriais são tratados como elementos de primeira classe em todas as ferramentas de manutenção e administração da 4D:
- Pausar / Retomar: PAUSE INDEXES e RESUME INDEXES trabalhe com índices vetoriais tal como faria com qualquer outro índice.
- Armazenamento: A 4D cria uma pasta denominada <nome do projeto>.4DVI no diretório DATA para armazenar índices vetoriais.
- Reindexação: Uma reindexação desencadeada no reinício também reindexa os índices vetoriais.
- Verificação e reparação: O Centro de Manutenção e Segurança (MSC) inclui os índices vetoriais tanto nas suas operações de verificação como de reparação.
- Cópia de segurança: Quando um índice é armazenado num ficheiro separado, é incluído na configuração de cópia de segurança predefinida.
Precisão vetorial
4D.Vector.new() aceita agora um parâmetro de precisão, que pode ser de 32 ou 64 bits (constantesmk single precision e mk double precision ). Por predefinição, os novos vetores são criados com precisão de 32 bits (4 bytes por componente). Isto reduz o espaço de armazenamento para metade em comparação com os vetores de 64 bits, mantendo simultaneamente precisão suficiente para cálculos de similaridade e distância, razão pela qual é o valor predefinido recomendado para a maioria dos casos de utilização.
$vector32:=4D.Vector.new([1; 2; 3])
// $vector32.precision=32
$vector64:=4D.Vector.new([1; 2; 3]; mk double precision)
// $vector64.precision=64
Nota de compatibilidade: Esta alteração quebra a compatibilidade com código existente que dependia do valor predefinido anterior de 64 bits. Para preservar a precisão de 64 bits, passe explicitamente ` mk double precision `.
Conclusão
A indexação de vetores no 4D proporciona um desempenho de nível de produção à pesquisa de similaridade diretamente no motor da base de dados, sem sacrificar a consistência nem a facilidade de utilização. Quer esteja a criar um sistema de recomendações, uma funcionalidade de pesquisa semântica ou um pipeline RAG, agora pode:
- Escolher a métrica de similaridade adequada (coseno, ponto ou euclidiana) para o seu caso de utilização.
- Criar e gerir índices vetoriais através de código ou da interface do utilizador.
- Confiar no 4D para manter os índices automaticamente sincronizados à medida que os dados mudam.
- Inspecionar, pausar, verificar e reparar índices vetoriais utilizando as mesmas ferramentas que já utiliza para os índices normais.
Como sempre, as consultas indexadas e não indexadas devolvem resultados idênticos; o índice serve apenas para otimizar o desempenho, nunca para alterar o comportamento.
De momento, não é possível deixar comentários nesta publicação.