🚀 Prueba Zilliz Cloud, el Milvus completamente gestionado, gratis—¡experimenta un rendimiento 10 veces más rápido! Prueba Ahora>>

milvus-logo
LFAI
  • Home
  • Blog
  • Comprender el nivel de coherencia en la base de datos Milvus Vector - Parte II

Comprender el nivel de coherencia en la base de datos Milvus Vector - Parte II

  • Engineering
September 13, 2022
Jiquan Long

Cover_image Imagen_de_portada

Este artículo ha sido escrito por Jiquan Long y transcreado por Angela Ni.

En el blog anterior sobre consistencia, hemos explicado cuál es la connotación de la consistencia en una base de datos vectorial distribuida, hemos cubierto los cuatro niveles de consistencia - fuerte, estancamiento limitado, sesión y eventual - soportados en la base de datos vectorial Milvus, y hemos explicado el escenario de aplicación más adecuado para cada nivel de consistencia.

En este artículo, seguiremos examinando el mecanismo que permite a los usuarios de la base de datos vectorial Milvus elegir con flexibilidad el nivel de consistencia ideal para diversos escenarios de aplicación. También proporcionaremos un tutorial básico sobre cómo ajustar el nivel de consistencia en la base de datos vectorial Milvus.

Ir a:

El mecanismo de marca de tiempo subyacente

Milvus utiliza el mecanismo de marca de tiempo para garantizar diferentes niveles de consistencia cuando se realiza una búsqueda o consulta vectorial. Time Tick es la marca de agua de Milvus que actúa como un reloj en Milvus y significa en qué punto del tiempo se encuentra el sistema Milvus. Cada vez que se envía una solicitud de lenguaje de manipulación de datos (DML) a la base de datos vectorial Milvus, asigna una marca de tiempo a la solicitud. Como se muestra en la siguiente figura, cuando se insertan nuevos datos en la cola de mensajes, por ejemplo, Milvus no sólo marca una marca de tiempo en estos datos insertados, sino que también inserta marcas de tiempo a intervalos regulares.

timetick marca de tiempo

Tomemos como ejemplo syncTs1 en la figura anterior. Cuando los consumidores posteriores, como los nodos de consulta, ven syncTs1, los componentes consumidores entienden que todos los datos insertados antes de syncTs1 se han consumido. En otras palabras, las solicitudes de inserción de datos cuyos valores de marca de tiempo sean inferiores a syncTs1 dejarán de aparecer en la cola de mensajes.

Marca de tiempo de garantía

Como se ha mencionado en la sección anterior, los componentes consumidores posteriores, como los nodos de consulta, obtienen continuamente mensajes de solicitudes de inserción de datos y marcas de tiempo de la cola de mensajes. Cada vez que se consume un tick de tiempo, el nodo de consulta marcará este tick de tiempo consumido como tiempo útil - ServiceTime y todos los datos insertados antes de ServiceTime son visibles para el nodo de consulta.

Además de ServiceTime, Milvus también adopta un tipo de marca de tiempo - marca de tiempo de garantía (GuaranteeTS) para satisfacer la necesidad de varios niveles de consistencia y disponibilidad por parte de diferentes usuarios. Esto significa que los usuarios de la base de datos vectorial Milvus pueden especificar GuaranteeTs para informar a los nodos de consulta de que todos los datos anteriores a GuaranteeTs deben ser visibles e intervenir cuando se realice una búsqueda o consulta.

Suele haber dos escenarios cuando el nodo de consulta ejecuta una petición de búsqueda en la base de datos vectorial Milvus.

Escenario 1: Ejecutar la petición de búsqueda inmediatamente

Como se muestra en la siguiente figura, si GuaranteeTs es menor que ServiceTime, los nodos de consulta pueden ejecutar la petición de búsqueda inmediatamente.

execute_immediately ejecutar_inmediatamente

Escenario 2: Esperar hasta que "ServiceTime > GuaranteeTs"

Si GuaranteeTs es mayor que ServiceTime, los nodos de consulta deben seguir consumiendo time tick de la cola de mensajes. Las peticiones de búsqueda no pueden ejecutarse hasta que ServiceTime sea mayor que GuaranteeTs.

wait_search wait_search

Niveles de coherencia

Por lo tanto, el GuaranteeTs es configurable en la petición de búsqueda para alcanzar el nivel de consistencia especificado por usted. Un GuaranteeTs con un valor grande asegura una fuerte consistencia a costa de una alta latencia de búsqueda. Y un GuaranteeTs con un valor pequeño reduce la latencia de búsqueda pero la visibilidad de los datos se ve comprometida.

GuaranteeTs en Milvus es un formato de marca de tiempo híbrido. Y el usuario no tiene ni idea del TSO dentro de Milvus. Por lo tanto, especificar el valor deGuaranteeTs es una tarea demasiado complicada para los usuarios. Para ahorrar problemas a los usuarios y proporcionarles una experiencia óptima, Milvus sólo requiere que los usuarios elijan el nivel de consistencia específico, y la base de datos vectorial de Milvus gestionará automáticamente el valor de GuaranteeTs para los usuarios. Es decir, el usuario de Milvus sólo tiene que elegir entre los cuatro niveles de consistencia: Strong, Bounded, Session, y Eventually. Y cada uno de los niveles de consistencia corresponde a un determinado valor GuaranteeTs.

La siguiente figura ilustra el GuaranteeTs para cada uno de los cuatro niveles de consistencia en la base de datos vectorial Milvus.

guarantee_ts garantía_ts

La base de datos vectorial Milvus admite cuatro niveles de consistencia:

  • CONSISTENCY_STRONG: GuaranteeTs se establece en el mismo valor que la última marca de tiempo del sistema, y los nodos de consulta esperan hasta que el tiempo de servicio proceda a la última marca de tiempo del sistema para procesar la solicitud de búsqueda o consulta.

  • CONSISTENCY_EVENTUALLYPara omitir la comprobación de coherencia: GuaranteeTs se establece en un valor insignificantemente inferior a la última marca de tiempo del sistema para omitir la comprobación de coherencia. Los nodos de consulta buscan inmediatamente en la vista de datos existente.

  • CONSISTENCY_BOUNDED GuaranteeTs se establece en un valor relativamente menor que la última marca de tiempo del sistema, y los nodos de consulta buscan en una vista de datos tolerablemente menos actualizada.

  • CONSISTENCY_SESSION: El cliente utiliza la marca de tiempo de la última operación de escritura como GuaranteeTs para que cada cliente pueda al menos recuperar los datos insertados por sí mismo.

¿Cómo ajustar el nivel de consistencia en Milvus?

Milvus permite ajustar el nivel de consistencia cuando se crea una colección o se realiza una búsqueda o consulta.

Para realizar una búsqueda de similitud vectorial con el nivel de consistencia que desee, simplemente establezca el valor para el parámetro consistency_level como Strong, Bounded, Session, o Eventually. Si no establece el valor para el parámetro consistency_level, el nivel de consistencia será Bounded por defecto. El ejemplo realiza una búsqueda de similitud vectorial con la consistencia Strong.

results = collection.search(
        data=[[0.1, 0.2]], 
        anns_field="book_intro", 
        param=search_params, 
        limit=10, 
        expr=None,
        consistency_level="Strong"
)

Realizar una consulta vectorial

De forma similar a la realización de una búsqueda de similitud vectorial, puede especificar el valor para el parámetro consistency_level al realizar una consulta vectorial. En el ejemplo se realiza una consulta vectorial con la coherencia Strong.

res = collection.query(
  expr = "book_id in [2,4,6,8]", 
  output_fields = ["book_id", "book_intro"],
  consistency_level="Strong"
)

Próximos pasos

Con el lanzamiento oficial de Milvus 2.1, hemos preparado una serie de blogs presentando las nuevas características. Lea más en esta serie de blogs:

Like the article? Spread the word

Sigue Leyendo