Trituración JSONCompatible with Milvus 2.6.2+
JSON shredding acelera las consultas JSON convirtiendo el almacenamiento tradicional basado en filas en almacenamiento columnar optimizado. Al tiempo que mantiene la flexibilidad de JSON para el modelado de datos, Milvus realiza entre bastidores una optimización columnar que mejora drásticamente el acceso y la eficiencia de las consultas.
La trituración JSON es eficaz para la mayoría de los escenarios de consulta JSON. Los beneficios de rendimiento se vuelven más pronunciados con
Documentos JSON más grandes y complejos - Mayores ganancias de rendimiento a medida que aumenta el tamaño del documento.
Cargas de trabajo de lectura intensiva - Filtrado, ordenación o búsqueda frecuentes en claves JSON
Patrones de consulta mixtos: las consultas a través de diferentes claves JSON se benefician del enfoque de almacenamiento híbrido.
Cómo funciona
El proceso de trituración de JSON se realiza en tres fases distintas para optimizar los datos y acelerar su recuperación.
Fase 1: Ingestión y clasificación de claves
A medida que se escriben nuevos documentos JSON, Milvus los muestrea y analiza continuamente para construir estadísticas para cada clave JSON. Este análisis incluye el ratio de ocurrencia de la clave y la estabilidad del tipo (si su tipo de datos es consistente en todos los documentos).
Basándose en estas estadísticas, las claves JSON se clasifican en las siguientes categorías para un almacenamiento óptimo.
Categorías de claves JSON
Tipo de clave |
Descripción |
|---|---|
Claves tipificadas |
Claves que existen 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 un tipo de datos mixto (por ejemplo, a veces una cadena, a veces un entero). |
Claves compartidas |
Claves de aparición infrecuente o anidadas que se sitúan por debajo de un umbral de frecuencia configurable. |
Ejemplo de clasificación
Considere los datos JSON de ejemplo que contienen las siguientes claves JSON:
{"a": 10, "b": "str1", "f": 1}
{"a": 20, "b": "str2", "f": 2}
{"a": 30, "b": "str3", "f": 3}
{"a": 40, "b": 1, "f": 4} // b becomes mixed type
{"a": 50, "b": 2, "e": "rare"} // e appears infrequently
Basándose en estos datos, las claves se clasificarían de la siguiente manera:
Claves mecanografiadas:
ayf(siempre un número entero)Claves dinámicas:
b(cadena mixta/entero)Clavescompartidas:
e(clave que aparece con poca frecuencia)
Fase 2: Optimización del almacenamiento
La clasificación de la fase 1 dicta la disposición del almacenamiento. Milvus utiliza un formato columnar optimizado para las consultas.
Flujo de trituración de Json
Columnas trituradas: Para las claves mecanografiadas y dinámicas, los datos se escriben en columnas dedicadas. Este almacenamiento en columnas permite exploraciones rápidas y directas durante las consultas, ya que Milvus puede leer sólo los datos necesarios para una clave determinada sin procesar todo el documento.
Columna compartida: Todas las claves compar tidas se almacenan juntas en una única columna binaria JSON compacta. Sobre esta columna se construye un índice invertido de claves compartidas. Este índice es crucial para acelerar las consultas sobre claves de baja frecuencia, ya que permite a Milvus podar rápidamente los datos, reduciendo eficazmente el espacio de búsqueda a sólo aquellas filas que contienen la clave especificada.
Fase 3: Ejecución de consultas
La fase final aprovecha la disposición optimizada del almacenamiento para seleccionar de forma inteligente la ruta más rápida para cada predicado de consulta.
Ruta rápida: Las consultas sobre claves mecanografiadas/dinámicas (por ejemplo,
json['a'] < 100) acceden directamente a las columnas dedicadas.Ruta optimizada: Las consultas sobre claves compartidas (por ejemplo,
json['e'] = 'rare') utilizan un índice invertido para localizar rápidamente los documentos relevantes.
Activar la trituración de JSON
Para activar esta función, defina common.enabledJSONShredding como true en el archivo de configuración milvus.yaml. Los nuevos datos activarán automáticamente el proceso de destrucción.
# milvus.yaml
...
common:
enabledJSONShredding: true # Indicates whether to enable JSON key stats build and load processes
...
Una vez activada, Milvus comenzará a analizar y reestructurar sus datos JSON en el momento de la ingesta sin ninguna intervención manual adicional.
Ajuste de parámetros
Para la mayoría de los usuarios, una vez activada la destrucción de JSON, la configuración por defecto de los demás parámetros es suficiente. Sin embargo, puede ajustar el comportamiento de la destrucción de JSON utilizando estos parámetros en milvus.yaml.
Parámetro Nombre |
Descripción |
Valor por defecto |
Consejo de ajuste |
|---|---|---|---|
|
Controla si los procesos de construcción y carga de trituración JSON están habilitados. |
false |
Debe establecerse en true para activar la característica. |
|
Controla si Milvus utiliza datos triturados para la aceleración. |
verdadero |
Se establece en false como medida de recuperación si las consultas fallan, volviendo a la ruta de consulta original. |
|
Determina si Milvus utiliza mmap al cargar datos triturados. Para más detalles, consulte Usar mmap. |
true |
Este ajuste está generalmente optimizado para el rendimiento. Ajústelo sólo si tiene necesidades específicas de gestión de memoria o restricciones en su sistema. |
|
El número máximo de claves JSON que se almacenarán en las columnas trituradas. Si el número de claves que aparecen con frecuencia excede este límite, Milvus dará prioridad a las más frecuentes para su destrucción, y el resto de claves se almacenarán en la columna compartida. |
1024 |
Esto es suficiente para la mayoría de los escenarios. Para JSON con miles de claves que aparecen con frecuencia, puede que necesite aumentar este límite, pero controle el uso del almacenamiento. |
|
El ratio mínimo de aparición que debe tener una clave JSON para ser considerada para ser triturada en una columna triturada. Se considera que una clave aparece con frecuencia si su ratio está por encima de este umbral. |
0.3 |
Aumenta (por ejemplo, a 0,5) si el número de claves que cumplen los criterios de trituración supera el límite de Redúzcalo (por ejemplo, a 0,1) si desea destruir más claves que aparecen con menos frecuencia que el umbral predeterminado del 30%. |
Pruebas de rendimiento
Nuestras pruebas demuestran mejoras significativas del rendimiento en diferentes tipos de claves JSON y patrones de consulta.
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
Tamaño medio del documento: 478,89 bytes
Duración de la prueba: 100 segundos midiendo QPS y latencia
Resultados: claves mecanografiadas
Esta prueba midió el rendimiento al consultar una clave presente en la mayoría de los documentos.
Expresión de consulta |
Tipo de valor de clave |
QPS (sin destrucción) |
QPS (con destrucción) |
Aumento del rendimiento |
|---|---|---|---|---|
|
Entero |
8.69 |
287.50 |
33x |
|
Cadena |
8.42 |
126.1 |
14.9x |
Resultados: claves compartidas
Esta prueba se centró en la consulta de claves dispersas y anidadas que entran en la categoría de "compartidas".
Expresión de consulta |
Tipo de valor de clave |
QPS (sin destrucción) |
QPS (con destrucción) |
Aumento del rendimiento |
|---|---|---|---|---|
|
Entero anidado |
4.33 |
385 |
88.9x |
|
Cadena anidada |
7.6 |
352 |
46.3x |
Información clave
Lasconsultas clave compartidas presentan las mejoras más espectaculares (hasta 89 veces más rápidas).
Lasconsultas de claves tipificadas ofrecen un aumento constante del rendimiento de 15 a 30 veces.
Todos los tipos de consulta se benefician de JSON Shredding sin regresiones de rendimiento.
PREGUNTAS FRECUENTES
¿Cómo puedo comprobar si la trituración de JSON funciona correctamente?
En primer lugar, compruebe si los datos se han construido utilizando el comando
show segment --format tablede la herramienta Birdwatcher. Si ha funcionado correctamente, la salida contendráshredding_data/yshared_key_index/en el campo Json Key Stats.
Salida de Birdwatcher A continuación, compruebe que los datos se han cargado ejecutando
show loaded-json-statsen el nodo de consulta. La salida mostrará detalles sobre los datos triturados cargados para cada nodo de consulta.
¿Qué ocurre si se produce un error?
Si el proceso de creación o carga falla, puede desactivar rápidamente la función configurando
common.enabledJSONShredding=false. Para borrar las tareas restantes, utilice el comandoremove stats-task <task_id>en Birdwatcher. Si una consulta falla, configurecommon.usingjsonShreddingForQuery=falsepara volver a la ruta de consulta original, omitiendo los datos triturados.¿Cómo elijo entre la trituración JSON y la indexación JSON?
Latrituración de JSON es ideal para las claves que aparecen con frecuencia en los documentos, especialmente en el caso de estructuras JSON complejas. Combina las ventajas del almacenamiento en columnas y de la indexación invertida, por lo que es muy adecuado para situaciones de lectura intensiva en las que se consultan muchas claves diferentes. Sin embargo, no se recomienda para documentos JSON muy pequeños, ya que el aumento de rendimiento es mínimo. Cuanto menor sea la proporción del valor de la clave con respecto al tamaño total del documento JSON, mayor será la optimización del rendimiento gracias a la trituración.
La indexación JSON es mejor para la optimización específica de consultas basadas en claves y tiene una menor sobrecarga de almacenamiento. Es adecuado para estructuras JSON más simples. Ten en cuenta que la trituración JSON no cubre las consultas sobre claves dentro de matrices, por lo que necesitas un índice JSON para acelerarlas.
Para obtener más información, consulta Visión general de los campos JSON.