Inserção de Entidades
Esta seção descreve como inserir dados no Milvus via lado do cliente.
Também é possível usar o MilvusDM para migrar dados para o Milvus. O MilvusDM é uma ferramenta de código aberto projetada especificamente para importar e exportar dados do Milvus.
O Milvus 2.1 suporta o tipo de dados VARCHAR
em campos escalares. Ao construir um índice para um campo escalar do tipo VARCHAR, o tipo de índice padrão é uma árvore.
O exemplo a seguir insere 2.000 linhas de dados gerados aleatoriamente como dados de exemplo (o exemplo do CLI do Milvus usa um arquivo CSV remoto pré-construído contendo dados semelhantes). Aplicações do mundo real frequentemente utilizam vetores de dimensões mais altas do que o exemplo. Você pode preparar seus próprios dados para substituir os dados de exemplo.
Preparação de Dados
Primeiro, prepare os dados a serem inseridos. O tipo de dados a ser inserido deve corresponder ao esquema da coleção, caso contrário o Milvus irá gerar uma exceção.
O Milvus suporta valores padrão para campos escalares, exceto para campos de chave primária. Isso significa que durante a inserção ou atualização de dados, alguns campos podem ser deixados em branco. Para mais informações, consulte a criação de uma coleção.
Após habilitar o esquema dinâmico, você pode anexar campos dinâmicos aos dados. Para informações detalhadas, consulte Esquema Dinâmico.
import random
dados = [
[i for i in range(2000)],
[str(i) for i in range(2000)],
[i for i in range(10000, 12000)],
[[random.random() for _ in range(2)] for _ in range(2000)],
[],
None,
]
dados.append([str("dy"*i) for i in range(2000)])
Inserindo Dados no Milvus
Insira os dados na coleção.
Ao especificar o nome_partição
, você pode escolher em qual partição inserir os dados.
from pymilvus import Collection
colecao = Collection("livro") # Obter uma coleção existente.
resultado = colecao.insert(dados)
Parâmetro | Descrição |
---|---|
dados |
Os dados a serem inseridos no Milvus. |
nome_partição (opcional) |
O nome da partição onde os dados serão inseridos. |
Depois de inserir entidades em uma coleção previamente indexada, não é necessário reindexar a coleção, pois o Milvus automaticamente criará índices para os dados recém-inseridos. Para mais informações, consulte É possível criar índices após inserir vetores?
Atualizando Dados no Milvus
Quando os dados são inseridos no Milvus, eles são inseridos em segmentos. Os segmentos devem atingir um tamanho específico para serem selados e indexados. Segmentos não selados usarão busca de força bruta. Para evitar essa situação, é melhor chamar flush()
para os dados restantes. A chamada flush()
irá selar quaisquer segmentos restantes e enviá-los para o índice. É importante chamar esse método apenas no final de uma sessão de inserção. Chamar com muita frequência pode levar a dados fragmentados que precisarão ser limpos posteriormente.
Limitações
Recurso | Limite Máximo |
---|---|
Dimensão do vetor | 32.768 |
Atualização de Entidades
A atualização por upsert é uma combinação de operações de inserção e exclusão. No contexto do banco de dados de vetores Milvus, a atualização é uma operação de nível de dados. Ele sobrescreve a entidade existente se o campo especificado existir na coleção e insere uma nova entidade se o valor especificado não existir.
O exemplo a seguir atualiza 3.000 linhas de dados gerados aleatoriamente como dados de exemplo. Ao realizar a operação de atualização, é importante observar que essa operação pode afetar o desempenho, pois envolve a exclusão de dados.
Preparação de Dados
Primeiro, prepare os dados a serem atualizados. O tipo de dados a ser atualizado deve corresponder ao esquema da coleção, caso contrário o Milvus irá gerar uma exceção.
O Milvus suporta valores padrão para campos escalares, exceto para campos de chave primária. Isso significa que durante a inserção ou atualização de dados, alguns campos podem ser deixados em branco. Para mais informações, consulte a criação de coleções.
import random
nb = 3000
dim = 8
vetores = [[random.random() for _ in range(dim)] for _ in range(nb)]
dados = [
[i for i in range(nb)],
[str(i) for i in range(nb)],
[i for i in range(10000, 10000+nb)],
vetores,
[str("dy"*i) for i in range(nb)]
]
Atualização de Dados
Atualize os dados na coleção.
from pymilvus import Collection
colecao = Collection("livro") # Obter a coleção existente.
resultado = colecao.upsert(dados)
Exclusão de Entidade
O Milvus suporta a exclusão de entidades usando expressões booleanas através de chaves primárias.
Preparar Expressão Booleana
Prepare uma expressão booleana para filtrar as entidades a serem deletadas.
O Milvus só suporta a exclusão de entidades com chaves primárias explicitamente especificadas, o que pode ser feito usando o operador "in". Outros operadores só podem ser usados em filtragem escalar para consultas ou busca vetorial.
O exemplo a seguir filtra dados usando os valores das chaves primárias 0 e 1.
expr = "book_id in [0,1]"
Semelhante à instrução da cláusula WHERE do SQL
Deletar Entidade
Use a expressão booleana que você criou para excluir entidades. O Milvus retornará a lista de IDs das entidades que foram excluídas.
from pymilvus import Collection
collection = Collection("book") # Obter a coleção existente.
collection.delete(expr)
Compactar Dados
O Milvus suporta compressão automática de dados por padrão. Você pode configurar o Milvus para habilitar ou desabilitar a compressão automática.
Se a compressão automática estiver desabilitada, você ainda pode compactar manualmente os dados.
Compactar Manualmente os Dados
Como a compressão normalmente leva muito tempo, as solicitações de compressão são processadas de forma assíncrona.
from pymilvus import Collection
collection = Collection("book") # Obter a coleção existente.
collection.compact()
Verificar o Estado da Compressão
Você pode usar o ID de compressão retornado ao acionar a compactação manual para verificar o estado da compressão.
collection.get_compaction_state()