Procesamiento de datos
Este artículo proporciona una descripción detallada de la implementación de la inserción de datos, la creación de índices y la consulta de datos en Milvus.
Inserción de datos
Puede elegir cuántos fragmentos utiliza una colección en Milvus: cada fragmento se asigna a un canal virtual(vchannel). Como se ilustra a continuación, Milvus asigna cada vchannel a un canal físico(pchannel), y cada pchannel está vinculado a un Nodo de Streaming específico.
VChannel PChannel y StreamingNode
Tras la verificación de los datos, el proxy dividirá el mensaje escrito en varios paquetes de datos de shards de acuerdo con las reglas de enrutamiento de shards especificadas.
Canales 1
A continuación, los datos escritos de un shard(vchannel) se envían al Streaming Node correspondiente de pchannel.
flujo de escritura
El Nodo de Streaming asigna un Timestamp Oracle (TSO) a cada paquete de datos para establecer un orden total de las operaciones. Realiza comprobaciones de coherencia en la carga útil antes de escribirla en el registro de escritura anticipada (WAL) subyacente. Una vez que los datos se consignan de forma duradera en el WAL, se garantiza que no se pierdan: incluso en caso de fallo, el nodo de streaming puede reproducir el WAL para recuperar todas las operaciones pendientes.
Mientras tanto, el StreamingNode también trocea asíncronamente las entradas de la WAL en segmentos discretos. Hay dos tipos de segmentos:
- Segmento creciente: cualquier dato que no haya sido prescrito en el almacenamiento de objetos.
- Segmentosellado: todos los datos han sido persistidos en el almacenamiento de objetos, los datos del segmento sellado son inmutables.
La transición de un segmento creciente a un segmento sellado se denomina descarga. El Nodo de Flujo desencadena un vaciado tan pronto como ha ingestado y escrito todas las entradas WAL disponibles para ese segmento -es decir, cuando no hay más registros pendientes en el registro de escritura anticipada subyacente-, momento en el que el segmento se finaliza y se optimiza para la lectura.
Creación de índices
La creación de índices se realiza en el nodo de datos. Para evitar la creación frecuente de índices para las actualizaciones de datos, una colección en Milvus se divide en segmentos, cada uno con su propio índice.
Creación de índices
Milvus soporta la construcción de índices para cada campo vectorial, campo escalar y campo primario. Tanto la entrada como la salida de la creación de índices se relacionan con el almacenamiento de objetos: El nodo de datos carga las instantáneas del registro a indexar desde un segmento (que está en el almacenamiento de objetos) a la memoria, deserializa los datos y metadatos correspondientes para construir el índice, serializa el índice cuando se completa la construcción del índice y lo escribe de nuevo en el almacenamiento de objetos.
La creación de índices implica principalmente operaciones vectoriales y matriciales, por lo que requiere muchos cálculos y memoria. Los vectores no pueden indexarse eficientemente con índices tradicionales basados en árboles debido a su naturaleza altamente dimensional, pero pueden indexarse con técnicas más maduras en este tema, como los índices basados en clusters o grafos. Independientemente de su tipo, la construcción de índices implica cálculos iterativos masivos para vectores a gran escala, como Kmeans o graph traverse.
A diferencia de la indexación de datos escalares, la creación de índices vectoriales debe aprovechar al máximo la aceleración SIMD (instrucción única, datos múltiples). Milvus tiene soporte innato para conjuntos de instrucciones SIMD, por ejemplo, SSE, AVX2 y AVX512. Dado el "hipo" y la naturaleza intensiva en recursos de la creación de índices vectoriales, la elasticidad adquiere una importancia crucial para Milvus en términos económicos. Las futuras versiones de Milvus profundizarán en la computación heterogénea y la computación sin servidor para reducir los costes asociados.
Además, Milvus también admite el filtrado escalar y la consulta de campos primarios. Tiene índices incorporados para mejorar la eficiencia de la consulta, por ejemplo, índices de filtro Bloom, índices hash, índices basados en árboles e índices invertidos, y planea introducir más índices externos, por ejemplo, índices de mapa de bits e índices aproximados.
Consulta de datos
Por consulta de datos se entiende el proceso de buscar en una colección determinada el número k de vectores más cercanos a un vector objetivo o todos los vectores que se encuentren dentro de un intervalo de distancia especificado con respecto al vector. Los vectores se devuelven junto con su clave primaria y sus campos correspondientes.
Consulta de datos
Una colección en Milvus se divide en múltiples segmentos; el Nodo de Flujo carga segmentos crecientes y mantiene los datos en tiempo real, mientras que los Nodos de Consulta cargan segmentos sellados.
Cuando llega una solicitud de consulta/búsqueda, el proxy transmite la solicitud a todos los nodos de transmisión responsables de los fragmentos relacionados para la búsqueda concurrente.
Cuando llega una petición de consulta, el proxy solicita de forma concurrente a los Streaming Nodes que tienen los shards correspondientes que ejecuten la búsqueda.
Cada Streaming Node genera un plan de consulta, busca en sus datos locales crecientes y contacta simultáneamente con los Query Nodes remotos para recuperar los resultados históricos, luego los agrega en un único resultado de shard.
Por último, el proxy recopila todos los resultados de los fragmentos, los fusiona en el resultado final y lo devuelve al cliente.
Traspaso
Cuando el segmento creciente de un nodo de flujo se vuelca en un segmento sellado, o cuando un nodo de datos completa una compactación, el coordinador inicia una operación de transferencia para convertir los datos crecientes en datos históricos. A continuación, el Coordinador distribuye uniformemente los segmentos sellados entre todos los Nodos de Consulta, equilibrando el uso de memoria, la sobrecarga de la CPU y el recuento de segmentos, y libera cualquier segmento redundante.
Lo que sigue
- Aprenda a utilizar la base de datos vectorial Milvus para realizar consultas en tiempo real.
- Aprenda sobre la inserción y persistencia de datos en Milvus.
- Aprenda cómo se procesan los datos en Milvus.