DashVector es schema-free por diseño. Cuando insert, update o upsert un documento, pase cualquier par de clave-valor en el parámetro fields. No se requiere definir el esquema previamente.
collection.insert(
Doc(
id='1',
vector=np.random.rand(4),
fields={
'name': 'zhangsan',
'weight': 70.0,
'age': 30,
'anykey1': 'anyvalue',
'anykey2': 1,
'anykey3': True,
'anykey4': 3.1415926
... ...
}
)
)Cada campo adicional consume recursos de memoria y disco. Incluya únicamente los campos que respondan a sus necesidades de filtrado o recuperación.
Tipos de datos compatibles
Los campos admiten cuatro tipos de datos de Python:
|
Tipo |
Descripción |
Restricciones |
|
|
Valores de cadena |
-- |
|
|
Números de punto flotante |
-- |
|
|
Valores enteros |
Solo con signo de 32 bits: de -2,147,483,648 a 2,147,483,647 |
|
|
Valores booleanos |
|
El tipo int de Python admite precisión arbitraria, pero DashVector solo acepta enteros con signo de 32 bits (de -2,147,483,648 a 2,147,483,647). Los valores fuera de este rango provocan errores de desbordamiento.
Filtrar por campos
Use pares de clave-valor de los campos en filter expressions para acotar los resultados de búsqueda:
ret = collection.query(
vector=[0.1, 0.2, 0.3, 0.4],
filter='(age > 18 and anykey2 = 1) or (name like "zhang%" and anykey3 = false)'
)Una mayor cantidad de campos y expresiones de filtro más complejas incrementan el uso de CPU y la latencia de las consultas.
Cuándo predefinir un esquema de campos
Aunque DashVector es schema-free de forma predeterminada, predefinir un esquema de campos al creating a collection mejora el rendimiento de las consultas, reduce la sobrecarga de almacenamiento y habilita la validación de entradas.
ret = client.create(
name='complex',
dimension=4,
fields_schema={'name': str, 'weight': float, 'age': int}
)Ventajas de los campos predefinidos
|
Ventaja |
Descripción |
|
Filtrado más rápido |
El Conditional filtering sobre campos predefinidos consume menos CPU y devuelve resultados con mayor rapidez que el filtrado sobre campos ad-hoc. |
|
Menor sobrecarga de almacenamiento |
Los campos predefinidos almacenan únicamente valores. Los campos ad-hoc guardan tanto claves como valores, lo que consume más memoria y espacio en disco. |
|
Prevalidación de filtros |
DashVector valida la sintaxis del filtro frente a los tipos de los campos predefinidos y devuelve un error si no coinciden. Sin un esquema, esta validación de tipos no está disponible. |
Enfoque recomendado
Predefina los campos que aparecen en la mayoría de los documentos y que usa con frecuencia para filtrar. Para atributos específicos de un subconjunto de documentos, use campos ad-hoc durante la inserción.