JSON Shredding en Milvus: Filtrado JSON 88,9 veces más rápido con flexibilidad
Los sistemas modernos de IA producen más datos JSON semiestructurados que nunca. La información sobre clientes y productos se compacta en un objeto JSON, los microservicios emiten registros JSON en cada solicitud, los dispositivos IoT transmiten lecturas de sensores en cargas útiles JSON ligeras y las aplicaciones de IA actuales estandarizan cada vez más JSON para obtener resultados estructurados. El resultado es una avalancha de datos de tipo JSON que fluyen hacia las bases de datos vectoriales.
Tradicionalmente, hay dos formas de manejar los documentos JSON:
Predefinir cada campo de JSON en un esquema fijo y construir un índice: Este enfoque ofrece un sólido rendimiento de consulta, pero es rígido. Una vez que cambia el formato de los datos, cada campo nuevo o modificado desencadena otra ronda de dolorosas actualizaciones del lenguaje de definición de datos (DDL) y migraciones de esquemas.
Almacenar todo el objeto JSON como una sola columna (tanto el tipo JSON como el esquema dinámico en Milvus utilizan este enfoque): Esta opción ofrece una flexibilidad excelente, pero a costa del rendimiento de la consulta. Cada solicitud requiere un análisis JSON en tiempo de ejecución y, a menudo, una exploración completa de la tabla, lo que provoca una latencia que aumenta a medida que crece el conjunto de datos.
Solía ser un dilema entre flexibilidad y rendimiento.
Ya no lo es con la nueva función JSON Shredding de Milvus.
Con la introducción de JSON Shredding, Milvus consigue ahora una agilidad sin esquemas con el rendimiento del almacenamiento en columnas, haciendo por fin que los datos semiestructurados a gran escala sean flexibles y fáciles de consultar.
Cómo funciona JSON Shredding
JSON shredding acelera las consultas JSON transformando los documentos JSON basados en filas en almacenamiento columnar altamente optimizado. Milvus conserva la flexibilidad de JSON para el modelado de datos al tiempo que optimiza automáticamente el almacenamiento en columnas, lo que mejora significativamente el acceso a los datos y el rendimiento de las consultas.
Para gestionar eficazmente los campos JSON dispersos o poco frecuentes, Milvus también dispone de un índice invertido para claves compartidas. Todo esto ocurre de forma transparente para los usuarios: puede insertar documentos JSON como de costumbre y dejar que Milvus gestione internamente la estrategia óptima de almacenamiento e indexación.
Cuando Milvus recibe registros JSON en bruto con formas y estructuras variadas, analiza cada clave JSON en función de su ratio de ocurrencia y estabilidad de tipo (si su tipo de datos es consistente en todos los documentos). Basándose en este análisis, cada clave se clasifica en una de estas tres categorías:
Claves tipificadas: Claves que aparecen en la mayoría de los documentos y siempre tienen el mismo tipo de datos (por ejemplo, todos los enteros o todas las cadenas).
Claves dinámicas: Claves que aparecen con frecuencia pero tienen tipos de datos mixtos (por ejemplo, a veces una cadena, a veces un entero).
Claves compartidas: Claves poco frecuentes, dispersas o anidadas, por debajo de un umbral de frecuencia configurable.
Milvus gestiona cada categoría de forma diferente para maximizar la eficiencia:
Lasclaves mecanografiadas se almacenan en columnas dedicadas, fuertemente mecanografiadas.
Lasclaves dinámicas se colocan en columnas dinámicas en función del tipo de valor real observado en tiempo de ejecución.
Tanto las columnas tipificadas como las dinámicas se almacenan en formatos de columnas Arrow/Parquet para una exploración rápida y una ejecución de consultas altamente optimizada.
Las clavescompartidas se consolidan en una columna binaria-JSON compacta, acompañada de un índice invertido de claves compartidas. Este índice acelera las consultas en campos de baja frecuencia al eliminar las filas irrelevantes y restringir la búsqueda a los documentos que contienen la clave consultada.
Esta combinación de almacenamiento adaptativo en columnas e indexación invertida constituye el núcleo del mecanismo de trituración JSON de Milvus, que permite tanto flexibilidad como alto rendimiento a escala.
A continuación se ilustra el flujo de trabajo general:
Ahora que hemos cubierto los conceptos básicos de cómo funciona la trituración JSON, echemos un vistazo más de cerca a las capacidades clave que hacen que este enfoque sea flexible y de alto rendimiento.
Trituración y Columnarización
Cuando se escribe un nuevo documento JSON, Milvus lo descompone y reorganiza en un almacenamiento columnar optimizado:
Las claves tipográficas y dinámicas se identifican automáticamente y se almacenan en columnas específicas.
Si el JSON contiene objetos anidados, Milvus genera automáticamente nombres de columnas basados en rutas. Por ejemplo, un campo
namedentro de un objetouserpuede almacenarse con el nombre de columna/user/name.Las claves compartidas se almacenan juntas en una única columna JSON binaria compacta. Dado que estas claves aparecen con poca frecuencia, Milvus construye un índice invertido para ellas, lo que permite un filtrado rápido y permite al sistema localizar rápidamente las filas que contienen la clave especificada.
Gestión inteligente de columnas
Además de triturar JSON en columnas, Milvus añade una capa adicional de inteligencia a través de la gestión dinámica de columnas, garantizando que JSON Shredding se mantiene flexible a medida que evolucionan los datos.
Columnas creadas según sea necesario: Cuando aparecen nuevas claves en los documentos JSON entrantes, Milvus agrupa automáticamente los valores con la misma clave en una columna dedicada. Esto conserva las ventajas de rendimiento del almacenamiento en columnas sin necesidad de que los usuarios diseñen esquemas por adelantado. Milvus también infiere el tipo de datos de los nuevos campos (por ejemplo, INTEGER, DOUBLE, VARCHAR) y selecciona un formato columnar eficiente para ellos.
Todas las claves se gestionan automáticamente: Milvus analiza y procesa todas las claves del documento JSON. Esto garantiza una amplia cobertura de las consultas sin obligar a los usuarios a predefinir campos o crear índices de antemano.
Optimización de consultas
Una vez reorganizados los datos en las columnas adecuadas, Milvus selecciona la ruta de ejecución más eficiente para cada consulta:
Exploraciones directas de columnas para claves mecanografiadas y dinámicas: Si una consulta se dirige a un campo que ya ha sido dividido en su propia columna, Milvus puede escanear esa columna directamente. Esto reduce la cantidad total de datos que deben procesarse y aprovecha el cálculo en columnas acelerado por SIMD para una ejecución aún más rápida.
Búsqueda indexada de claves compartidas: Si la consulta incluye un campo que no se ha promocionado a su propia columna (normalmente, una clave poco frecuente), Milvus la evalúa con respecto a la columna de clave compartida. El índice invertido creado en esta columna permite a Milvus identificar rápidamente las filas que contienen la clave especificada y omitir el resto, lo que mejora significativamente el rendimiento de los campos de baja frecuencia.
Gestión automática de metadatos: Milvus mantiene continuamente metadatos y diccionarios globales para que las consultas sigan siendo precisas y eficientes, incluso cuando la estructura de los documentos JSON entrantes evoluciona con el tiempo.
Pruebas de rendimiento
Hemos diseñado una prueba para comparar el rendimiento de las consultas almacenando todo el documento JSON como un único campo sin procesar frente al uso de la nueva función JSON Shredding.
Entorno y metodología de las pruebas
Hardware: clúster de 1 núcleo/8 GB
Conjunto de datos: 1 millón de documentos de JSONBench
Metodología: Medición de QPS y latencia en diferentes patrones de consulta
Resultados: claves mecanografiadas
Esta prueba mide el rendimiento cuando se consulta una clave presente en la mayoría de los documentos.
| Expresión de consulta | QPS (sin destrucción) | QPS (con destrucción) | Aumento del rendimiento |
|---|---|---|---|
| json['tiempo_us'] > 0 | 8.69 | 287.5 | 33x |
| json['kind'] == 'commit' | 8.42 | 126.1 | 14.9x |
Resultados: claves compartidas
Esta prueba se ha centrado en la consulta de claves dispersas y anidadas que entran en la categoría de "compartidas".
| Expresión de consulta | QPS (sin destrucción) | QPS (con destrucción) | Aumento del rendimiento |
|---|---|---|---|
| json['identity']['seq'] > 0 | 4.33 | 385 | 88.9x |
| json['identity']['did'] == 'xxxxx' | 7.6 | 352 | 46.3x |
Las consultas con claves compartidas son las que muestran las mejoras más espectaculares (hasta 89 veces más rápidas), mientras que las consultas con claves mecanografiadas ofrecen aumentos de velocidad constantes de 15 a 30 veces. En general, todos los tipos de consulta se benefician de JSON Shredding, con claras mejoras de rendimiento en todos los ámbitos.
Pruébelo ahora
Tanto si trabaja con registros de API, datos de sensores IoT o cargas útiles de aplicaciones en rápida evolución, JSON Shredding le ofrece la rara posibilidad de disponer tanto de flexibilidad como de alto rendimiento.
La función ya está disponible y le invitamos a probarla ahora. También puede consultar este documento para obtener más información.
¿Tiene preguntas o desea una inmersión profunda en cualquier característica de la última Milvus? Únase a nuestro canal de Discord o presente cuestiones en GitHub. También puede reservar una sesión individual de 20 minutos para obtener información, orientación y respuestas a sus preguntas a través de Milvus Office Hours.
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



