La clase Collection en Milvus es similar a una tabla en MySQL, utilizada para organizar datos y compuesta por una o más particiones.
Creación de una colección
Una colección está compuesta por una o más particiones. Al crear una nueva colección, Milvus creará una partición predeterminada llamada _default
. Para obtener más información, consulte la explicación de terminología relacionada con colecciones.
El siguiente ejemplo creará una colección llamada book
con dos particiones, incluyendo un campo de clave primaria llamado book_id
, un campo escalar INT64
llamado word_count
y un campo de vector de punto flotante bidimensional llamado book_intro
. Las aplicaciones reales a menudo utilizan vectores de dimensiones más altas que el ejemplo.
Modo de preparación
El modo es similar a definir la estructura de una tabla MYSQL.
La colección a crear debe contener un campo de clave primaria y un campo de vector. El campo de clave primaria admite tipos de datos INT64 y VarChar.
Primero, prepara los parámetros necesarios, incluida la estructura del campo, la estructura de la colección y el nombre de la colección.
Antes de definir la estructura de la colección, crea una estructura para cada campo en la colección. Para reducir la complejidad de la inserción de datos, Milvus te permite especificar un valor predeterminado para cada campo escalar (excepto el campo de clave primaria). Esto significa que si dejas un campo vacío al insertar datos, se usará el valor predeterminado configurado durante la creación de la estructura del campo.
from pymilvus import CollectionSchema, FieldSchema, DataType
book_id = FieldSchema(
name="book_id",
dtype=DataType.INT64,
is_primary=True,
)
book_name = FieldSchema(
name="book_name",
dtype=DataType.VARCHAR,
max_length=200,
default_value="Desconocido" # El valor predeterminado es "Desconocido"
)
word_count = FieldSchema(
name="word_count",
dtype=DataType.INT64,
default_value=9999 # El valor predeterminado es 9999
)
book_intro = FieldSchema(
name="book_intro",
dtype=DataType.FLOAT_VECTOR,
dim=2
)
schema = CollectionSchema(
fields=[book_id, book_name, word_count, book_intro],
description="Búsqueda de libros de prueba", # La descripción es "Búsqueda de libros de prueba"
enable_dynamic_field=True # Habilitar esquema dinámico
)
collection_name = "libro"
Tipo de Esquema | Parámetro | Descripción | Opciones |
---|---|---|---|
FieldSchema |
name |
El nombre del campo a crear. | N/A |
dtype |
El tipo de datos del campo a crear. | Campo de clave primaria: - 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 vectoriales: - BINARY_VECTOR (Vector binario) - FLOAT_VECTOR (Vector de punto flotante) |
|
is_primary |
Un interruptor que controla si el campo es un campo de clave primaria. Este parámetro debe especificarse para los campos de clave primaria. | True o False |
|
auto_id |
Un interruptor para habilitar o deshabilitar la asignación automática de ID (clave primaria). Este parámetro debe especificarse para los campos de clave primaria y por defecto es False . |
True o False |
|
max_length (Requerido para campos VARCHAR) |
La longitud máxima del string que se puede insertar. | [1, 65,535] | |
default_value |
El valor por defecto del campo. Este parámetro solo se aplica a campos escalares no array y no JSON. No es posible especificar un valor por defecto para el campo de clave primaria. Para más información, consulta el parámetro default_value . |
N/A | |
dim (Requerido para campos vectoriales) |
La dimensión del vector. | [1, 32,768] | |
description (Opcional) |
Descripción del campo. | N/A | |
CollectionSchema |
fields |
Los campos a crear para la colección. | N/A |
description (Opcional) |
Descripción de la colección a crear. | N/A | |
enable_dynamic_field |
Si se habilita el esquema dinámico. Tipo de dato: Booleano (true o false ). Opcional, por defecto es False . Para más información sobre el esquema dinámico, consulta la guía del usuario para el esquema dinámico y la gestión de colecciones. |
||
collection_name |
El nombre de la colección a crear. | N/A |
Crear una colección con esquema
A continuación, crea una colección con el esquema especificado.
from pymilvus import Collection
colección = Colección(
nombre=nombre_colección,
esquema=esquema,
usando='default',
número_de_shards=2
)
Parámetro | Descripción | Opciones |
---|---|---|
usando (opcional) |
Especifica el alias del servidor aquí y elige dónde crear la colección en el servidor Milvus. | N/A |
número_de_shards (opcional) |
El número de shards para la colección a crear. | [1,16] |
num_partitions (opcional) |
El número lógico de particiones para la colección a crear. | [1,4096] |
*kwargs: collection.ttl.seconds (opcional) |
El TTL de la colección es el tiempo de expiración de la colección. Los datos en la colección expirada se limpiarán y no participarán en búsquedas o consultas. Especifica el TTL en segundos. | El valor debe ser 0 o mayor. 0 significa deshabilitar el TTL. |
Limitaciones
Configuración de recursos
Característica | Límite máximo |
---|---|
Longitud del nombre de la colección | 255 caracteres |
Número de particiones en la colección | 4,096 |
Número de campos en la colección | 64 |
Número de shards en la colección | 16 |
Parámetro default_value
-
default_value
se aplica solo a campos escalares no array y no JSON. -
default_value
no se aplica a la clave primaria. - El tipo de datos de
default_value
debe ser el mismo que el tipo de datos especificado endtype
. De lo contrario, pueden ocurrir errores. - En el caso de usar
auto_id
, no está permitido configurar todos los campos restantes para usar el valor predeterminado. En otras palabras, al realizar operaciones de inserción o actualización, debes especificar el valor de al menos un campo. De lo contrario, pueden ocurrir errores.
Cambiar el nombre de una colección
Si deseas cambiar el nombre de una colección, puedes interactuar con Milvus usando la API de cambio de nombre de colección. Esta guía te ayudará a entender cómo utilizar tu SDK elegido para cambiar el nombre de una colección existente.
En el siguiente fragmento de código, creamos una colección y la nombramos colección_antigua
, y luego la renombramos a nueva_colección
.
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("vector_de_punto_flotante", DataType.FLOAT_VECTOR, is_primary=False, dim=128),
... ])
colección = Collection(nombre="colección_antigua", esquema=esquema)
utility.rename_collection("colección_antigua", "nueva_colección") # Salida: True
utility.has_collection("nueva_colección") # Salida: False
Modificar una colección
Actualmente, la función TTL solo está disponible en Python.
colección.set_properties(propiedades={"colección.ttl.seconds": 1800})
El ejemplo anterior cambia el TTL de la colección a 1800 segundos.
Verificar si una colección existe
Verifica si la colección existe en Milvus.
from pymilvus import utility
utility.has_collection("libro")
Ver detalles de la colección
from pymilvus import Collection
colección = Collection("libro") # Obtiene una colección existente.
colección.esquema # Devuelve el CollectionSchema de la colección.
colección.descripcion # Devuelve la descripción de la colección.
colección.nombre # Devuelve el nombre de la colección.
colección.está_vacía # Devuelve un booleano que indica si la colección está vacía.
colección.num_entidades # Devuelve el número de entidades en la colección.
colección.campo_primario # Devuelve el schema.FieldSchema del campo de clave primaria.
colección.particiones # Devuelve una lista de objetos [Partition].
colección.índices # Devuelve una lista de objetos [Índice].
colección.propiedades # Devuelve el tiempo de expiración de los datos en la colección.
Listar todas las colecciones
from pymilvus import utility
utility.list_collections()
Eliminar una colección
from pymilvus import utility
utility.drop_collection("libro")
Crear un alias de colección
from pymilvus import utility
utility.create_alias(
nombre_colección = "libro",
alias = "publicación"
)
Eliminar un alias de colección
from pymilvus import utility
utility.drop_alias(alias = "publicación")
Modificar un alias de colección
Modificar un alias existente para que apunte a una colección diferente. El siguiente ejemplo se basa en el escenario en el que el alias publicación
fue creado originalmente para otra colección.
from pymilvus import utility
utility.alter_alias(
collection_name = "libro",
alias = "publicación"
)
Cargar una colección
Cómo cargar una colección en la memoria antes de realizar operaciones de búsqueda o consulta. En Milvus, todas las operaciones de búsqueda y consulta se ejecutan en la memoria.
Milvus permite a los usuarios cargar colecciones como réplicas múltiples para utilizar recursos adicionales de CPU y memoria de los nodos de consulta. Esta función mejora el QPS y el rendimiento general sin necesidad de hardware adicional. Antes de cargar una colección, asegúrate de haber creado un índice para ella.
from pymilvus import Collection, utility
colección = Collection("libro")
colección.load(replica_number=2)
utility.load_state("libro")
utility.loading_progress("libro")
Liberar una colección
Cómo liberar una colección después de operaciones de búsqueda o consulta para reducir el uso de memoria.
from pymilvus import Collection
colección = Collection("libro")
colección.release()