Gerir o esquema
Este tópico introduz o esquema no Milvus. O esquema é utilizado para definir as propriedades de uma coleção e os campos que a compõem.
Esquema de campo
Um esquema de campo é a definição lógica de um campo. É a primeira coisa a definir antes de definir um esquema de coleção e gerir colecções.
O Milvus suporta apenas um campo de chave primária numa coleção.
Propriedades do esquema de campo
Propriedades | Descrição do campo | Nota |
---|---|---|
name |
Nome do campo na coleção a criar | Tipo de dados: String. Obrigatório |
dtype |
Tipo de dados do campo | Obrigatório |
description |
Descrição do campo | Tipo de dados: String. Facultativo |
is_primary |
Definir ou não o campo como campo de chave primária | Tipo de dados: Booleano (true ou false ).Obrigatório para o campo de chave primária |
auto_id (Obrigatório para o campo de chave primária) |
Comutador para ativar ou desativar a atribuição automática de ID (chave primária). | True ou False |
max_length (Obrigatório para o campo VARCHAR) |
Comprimento máximo de bytes para cadeias que podem ser inseridas. Note que os caracteres multibyte (por exemplo, caracteres Unicode) podem ocupar mais do que um byte cada, por isso certifique-se de que o comprimento em bytes das cadeias inseridas não excede o limite especificado. | [1, 65,535] |
dim |
Dimensão do vetor | Tipo de dados: Integer ∈[1, 32768]. Obrigatório para um campo de vetor denso. Omitir para um campo vetorial esparso. |
is_partition_key |
Se este campo é um campo de chave de partição. | Tipo de dados: Booleano (true ou false ). |
Criar um esquema de campo
Para reduzir a complexidade das inserções de dados, o Milvus permite-lhe especificar um valor por defeito para cada campo escalar durante a criação do esquema de campo, excluindo o campo da chave primária. Isto indica que se deixar um campo vazio ao inserir dados, aplica-se o valor por defeito especificado para este campo.
Criar um esquema de campos normal:
from pymilvus import FieldSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
# The following creates a field and use it as the partition key
position_field = FieldSchema(name="position", dtype=DataType.VARCHAR, max_length=256, is_partition_key=True)
Cria um esquema de campo com valores de campo predefinidos:
from pymilvus import FieldSchema
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
# configure default value `25` for field `age`
FieldSchema(name="age", dtype=DataType.INT64, default_value=25, description="age"),
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
]
Tipos de dados suportados
DataType
define o tipo de dados que um campo contém. Diferentes campos suportam diferentes tipos de dados.
O campo de chave primária suporta:
- INT64: numpy.int64
- VARCHAR: VARCHAR
O campo Scalar suporta:
- BOOL: Booleano (
true
oufalse
) - INT8: numpy.int8
- INT16: numpy.int16
- INT32: numpy.int32
- INT64: numpy.int64
- FLOAT: numpy.float32
- DOUBLE: numpy.double
- VARCHAR: VARCHAR
- JSON: JSON
- Array: Array
JSON como um tipo de dados composto está disponível. Um campo JSON inclui pares chave-valor. Cada chave é uma cadeia de caracteres e um valor pode ser um número, cadeia de caracteres, valor booleano, matriz ou lista. Para obter detalhes, consulte JSON: um novo tipo de dados.
- BOOL: Booleano (
O campo Vetor suporta:
- BINARY_VECTOR: armazena dados binários como uma sequência de 0s e 1s, usados para representação compacta de recursos no processamento de imagens e na recuperação de informações.
- FLOAT_VECTOR: Armazena números de ponto flutuante de 32 bits, normalmente utilizados na computação científica e na aprendizagem automática para representar números reais.
- FLOAT16_VECTOR: Armazena números de vírgula flutuante de meia precisão de 16 bits, utilizados em aprendizagem profunda e cálculos de GPU para eficiência de memória e largura de banda.
- BFLOAT16_VECTOR: Armazena números de vírgula flutuante de 16 bits com precisão reduzida, mas com o mesmo intervalo de expoentes que o Float32, popular na aprendizagem profunda para reduzir a memória e os requisitos computacionais sem afetar significativamente a precisão.
- SPARSE_FLOAT_VECTOR: armazena uma lista de elementos não nulos e os respectivos índices, utilizados para representar vectores esparsos. Para mais informações, consulte Vectores esparsos.
O Milvus suporta múltiplos campos vectoriais numa coleção. Para obter mais informações, consulte Pesquisa híbrida.
Esquema de coleção
Um esquema de coleção é a definição lógica de uma coleção. Normalmente, é necessário definir o esquema de campo antes de definir um esquema de coleção e gerir colecções.
Propriedades do esquema de coleção
Propriedades | Descrição das propriedades | Nota |
---|---|---|
field |
Campos da coleção a criar | Obrigatório |
description |
Descrição da coleção | Tipo de dados: String. Facultativo |
partition_key_field |
Nome de um campo concebido para atuar como chave de partição. | Tipo de dados String. Facultativo |
enable_dynamic_field |
Ativar ou não o esquema dinâmico | Tipo de dados: Boolean (true ou false ).Opcional, a predefinição é False .Para mais informações sobre o esquema dinâmico, consulte Esquema dinâmico e os manuais do utilizador para gerir colecções. |
Criar um esquema de coleção
from pymilvus import FieldSchema, CollectionSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
# Enable partition key on a field if you need to implement multi-tenancy based on the partition-key field
position_field = FieldSchema(name="position", dtype=DataType.VARCHAR, max_length=256, is_partition_key=True)
# Set enable_dynamic_field to True if you need to use dynamic fields.
schema = CollectionSchema(fields=[id_field, age_field, embedding_field], auto_id=False, enable_dynamic_field=True, description="desc of a collection")
Crie uma coleção com o esquema especificado:
from pymilvus import Collection,connections
conn = connections.connect(host="127.0.0.1", port=19530)
collection_name1 = "tutorial_1"
collection1 = Collection(name=collection_name1, schema=schema, using='default', shards_num=2)
- Pode definir o número do fragmento com
shards_num
. - Pode definir o servidor Milvus no qual pretende criar uma coleção, especificando o alias em
using
. - Pode ativar a funcionalidade de chave de partição num campo definindo
is_partition_key
paraTrue
no campo, se necessitar de implementar um multi-tenancy baseado em chaves de partição. - Pode ativar o esquema dinâmico definindo
enable_dynamic_field
paraTrue
no esquema da coleção se precisar de ativar o campo dinâmico.
Também pode criar uma coleção com Collection.construct_from_dataframe
, que gera automaticamente um esquema de coleção a partir de DataFrame e cria uma coleção.
import pandas as pd
df = pd.DataFrame({
"id": [i for i in range(nb)],
"age": [random.randint(20, 40) for i in range(nb)],
"embedding": [[random.random() for _ in range(dim)] for _ in range(nb)],
"position": "test_pos"
})
collection, ins_res = Collection.construct_from_dataframe(
'my_collection',
df,
primary_field='id',
auto_id=False
)
O que se segue
- Saiba como preparar o esquema ao gerir colecções.
- Saiba mais sobre o esquema dinâmico.
- Leia mais sobre partition-key em Multi-tenancy.