A classe Collection no Milvus é semelhante a uma tabela no MySQL, usada para organizar dados e composta por uma ou mais partições.
Criando uma coleção
Uma coleção é composta por uma ou mais partições. Ao criar uma nova coleção, o Milvus criará uma partição padrão chamada _default
. Para mais informações, consulte a explicação de terminologia - relacionada a coleções.
O exemplo a seguir criará uma coleção chamada book
com duas partições, incluindo um campo de chave primária chamado book_id
, um campo escalar INT64
chamado word_count
e um campo de vetor de ponto flutuante bidimensional denominado book_intro
. Aplicações reais frequentemente usam vetores de dimensões mais elevadas do que o exemplo.
Modo de Preparação
O modo é semelhante à definição da estrutura de uma tabela MYSQL.
A coleção a ser criada deve conter um campo de chave primária e um campo de vetor. O campo de chave primária suporta os tipos de dados INT64 e VarChar.
Primeiro, prepare os parâmetros necessários, incluindo o esquema do campo, esquema da coleção e nome da coleção.
Antes de definir o esquema da coleção, crie um esquema para cada campo na coleção. Para reduzir a complexidade da inserção de dados, o Milvus permite que você especifique um valor padrão para cada campo escalar (exceto o campo de chave primária). Isso significa que se você deixar um campo vazio ao inserir dados, o valor padrão configurado durante a criação do esquema do campo será usado.
from pymilvus import CollectionSchema, FieldSchema, DataType
id_do_livro = FieldSchema(
name="id_do_livro",
dtype=DataType.INT64,
is_primary=True,
)
nome_do_livro = FieldSchema(
name="nome_do_livro",
dtype=DataType.VARCHAR,
max_length=200,
default_value="Desconhecido" # Valor padrão é "Desconhecido"
)
contagem_de_palavras = FieldSchema(
name="contagem_de_palavras",
dtype=DataType.INT64,
default_value=9999 # Valor padrão é 9999
)
introducao_do_livro = FieldSchema(
name="introducao_do_livro",
dtype=DataType.FLOAT_VECTOR,
dim=2
)
esquema = CollectionSchema(
fields=[id_do_livro, nome_do_livro, contagem_de_palavras, introducao_do_livro],
description="Busca de livros de teste", # Descrição é "Busca de livros de teste"
enable_dynamic_field=True # Habilitar esquema dinâmico
)
nome_da_colecao = "livro"
Tipo de Esquema | Parâmetro | Descrição | Opções |
---|---|---|---|
FieldSchema |
name |
O nome do campo a ser criado. | N/A |
dtype |
O tipo de dado do campo a ser criado. | Campo de chave primária: - DataType.INT64 (numpy.int64) - DataType.VARCHAR (VARCHAR) Campos escalares: - DataType.BOOL (Booleano) - DataType.INT8 (numpy.int8) - DataType.INT16 (numpy.int16) - DataType.INT32 (numpy.int32) - DataType.INT64 (numpy.int64) - DataType.FLOAT (numpy.float32) - DataType.DOUBLE (numpy.double) - DataType.VARCHAR (VARCHAR) - DataType.JSON (JSON) Campos de vetor: - BINARY_VECTOR (Vetor binário) - FLOAT_VECTOR (Vetor de ponto flutuante) |
|
is_primary |
Um interruptor que controla se o campo é um campo de chave primária. Este parâmetro precisa ser especificado para campos de chave primária. | True ou False |
|
auto_id |
Um interruptor para habilitar ou desabilitar a atribuição automática de ID (chave primária). Este parâmetro precisa ser especificado para campos de chave primária e o padrão é False . |
True ou False |
|
max_length (Necessário para campos VARCHAR) |
O comprimento máximo da string que pode ser inserida. | [1, 65.535] | |
default_value |
O valor padrão do campo. Este parâmetro só se aplica a campos escalares não array e não JSON. Não é possível especificar um valor padrão para o campo de chave primária. Para mais informações, consulte o parâmetro default_value . |
N/A | |
dim (Necessário para campos de vetor) |
A dimensão do vetor. | [1, 32.768] | |
description (Opcional) |
Descrição do campo. | N/A | |
CollectionSchema |
fields |
Os campos a serem criados para a coleção. | N/A |
description (Opcional) |
Descrição da coleção a ser criada. | N/A | |
enable_dynamic_field |
Se habilita esquema dinâmico. Tipo de dado: Booleano (true ou false ). Opcional, o padrão é False . Para mais informações sobre esquema dinâmico, consulte o guia do usuário sobre gerenciamento dinâmico de esquema e coleção. |
||
collection_name |
O nome da coleção a ser criada. | N/A |
Criação de uma Coleção com Esquema
Em seguida, crie uma coleção com o esquema especificado.
from pymilvus import Collection
collection = Collection(
name=nome_da_colecao,
schema=esquema,
using='default',
shards_num=2
)
Parâmetro | Descrição | Opções |
---|---|---|
using (opcional) |
Especifique o alias do servidor aqui e escolha onde criar a coleção no servidor Milvus. | N/A |
shards_num (opcional) |
O número de shards para a coleção a ser criada. | [1,16] |
num_partitions (opcional) |
O número lógico de partições para a coleção a ser criada. | [1,4096] |
*kwargs: collection.ttl.seconds (opcional) |
O TTL da coleção é o tempo de expiração da coleção. Os dados na coleção expirada serão limpos e não participarão de buscas ou consultas. Especifique o TTL em segundos. | O valor deve ser 0 ou maior. 0 significa desativar o TTL. |
Limitações
Configuração de Recursos
Recurso | Limite Máximo |
---|---|
Comprimento do Nome da Coleção | 255 caracteres |
Número de Partições na Coleção | 4.096 |
Número de Campos na Coleção | 64 |
Número de Shards na Coleção | 16 |
Parâmetro default_value
-
default_value
se aplica apenas a campos escalares não-array e não-JSON. -
default_value
não se aplica à chave primária. - O tipo de dados de
default_value
deve ser o mesmo que o tipo de dados especificado emdtype
. Caso contrário, podem ocorrer erros. - No caso de usar
auto_id
, não é permitido definir todos os campos restantes para usar o valor padrão. Em outras palavras, ao realizar operações de inserção ou atualização, você precisa especificar o valor de pelo menos um campo. Caso contrário, podem ocorrer erros.
Renomeando uma Coleção
Se você deseja renomear uma coleção, pode interagir com o Milvus usando a API de renomeação de coleção. Este guia irá ajudá-lo a entender como usar o SDK escolhido para renomear uma coleção existente.
No trecho de código a seguir, criamos uma coleção e a nomeamos como colecao_antiga
, e depois a renomeamos para colecao_nova
.
from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility
connections.connect(alias="default")
esquema = CollectionSchema(fields=[
... FieldSchema("int64", DataType.INT64, description="int64", is_primary=True),
... FieldSchema("float_vector", DataType.FLOAT_VECTOR, is_primary=False, dim=128),
... ])
colecao = Collection(name="colecao_antiga", schema=esquema)
utility.rename_collection("colecao_antiga", "colecao_nova") # Saída: True
utility.has_collection("colecao_nova") # Saída: False
Modificando uma Coleção
Atualmente, o recurso TTL está disponível apenas em Python.
colecao.set_properties(properties={"collection.ttl.seconds": 1800})
O exemplo acima altera o TTL da coleção para 1800 segundos.
Verificando se uma Coleção Existe
Verifique se a coleção existe no Milvus.
from pymilvus import utility
utility.has_collection("livro")
Verificando Detalhes da Coleção
from pymilvus import Collection
colecao = Collection("livro") # Obtenha uma coleção existente.
colecao.esquema # Retorna o CollectionSchema da coleção.
colecao.descricao # Retorna a descrição da coleção.
colecao.nome # Retorna o nome da coleção.
colecao.esta_vazia # Retorna um booleano indicando se a coleção está vazia.
colecao.num_entidades # Retorna o número de entidades na coleção.
colecao.campo_primario # Retorna o schema.FieldSchema do campo de chave primária.
colecao.particoes # Retorna uma lista de objetos [Partição].
colecao.indices # Retorna uma lista de objetos [Índice].
colecao.propriedades # Retorna o tempo de expiração dos dados na coleção.
Listando todas as coleções
from pymilvus import utility
utility.list_collections()
Excluindo uma coleção
from pymilvus import utility
utility.drop_collection("livro")
Criando um alias para uma coleção
from pymilvus import utility
utility.create_alias(
collection_name = "livro",
alias = "publicacao"
)
Excluindo um alias de coleção
from pymilvus import utility
utility.drop_alias(alias = "publicacao")
Modificar um alias de coleção
Modificar um alias existente para apontar para uma coleção diferente. O exemplo a seguir é baseado no cenário em que o alias publicação
foi originalmente criado para outra coleção.
from pymilvus import utility
utility.alterar_alias(
collection_name = "livro",
alias = "publicação"
)
Carregar uma coleção
Como carregar uma coleção na memória antes de realizar operações de busca ou consulta. No Milvus, todas as operações de busca e consulta são executadas na memória.
O Milvus permite que os usuários carreguem coleções como réplicas múltiplas para utilizar recursos adicionais de CPU e memória dos nós de consulta. Essa funcionalidade melhora o QPS e o throughput geral sem hardware adicional. Antes de carregar uma coleção, certifique-se de ter criado um índice para ela.
from pymilvus import Collection, utility
colecao = Collection("livro")
colecao.carregar(numero_replicas=2)
utility.load_state("livro")
utility.progresso_carregamento("livro")
Liberar uma coleção
Como liberar uma coleção após operações de busca ou consulta para reduzir o uso de memória.
from pymilvus import Collection
collection = Collection("livro")
colecao.liberar()