Tencent Cloud Big Data ClickHouse se encuentra con Schema-less: ¡el rendimiento del análisis de datos semiestructurados aumentó 20 veces!

Introducción: ClickHouse es un sistema de gestión de bases de datos en columnas de alto rendimiento de código abierto, diseño de escena OLAP. El almacenamiento en columnas, el motor de ejecución vectorizado, la compresión de datos, el soporte de funciones enriquecidas, la indexación y las capacidades de precomputación son las piedras angulares de ClickHouse como un motor de análisis en tiempo real de big data de alto rendimiento. En el campo del procesamiento de datos semiestructurados, ClickHouse parece impotente. Tencent Cloud Data Warehouse adopta otro enfoque para integrar la flexibilidad de la base de datos sin esquema, lo que hace que el sistema de análisis en tiempo real de big data sea flexible y de alto rendimiento.

Autor: Peng Jian, ingeniero experto en Big Data, Tencent Cloud

Antecedentes: Big Data Analytics y datos semiestructurados

Los datos semiestructurados se refieren a tipos de datos entre datos estructurados (como datos tabulares en bases de datos relacionales) y datos no estructurados (como texto, imágenes, audio, etc.). Los datos semiestructurados comunes incluyen JSON, XML, YAML, etc. En el campo del big data, los datos semiestructurados juegan un papel cada vez más importante. Su importancia es evidente.

  •  Amplia gama de fuentes de datos: Internet, Internet de las cosas, redes sociales, aplicaciones móviles, APM y otros campos son fuentes importantes de datos semiestructurados;

  • El potencial del valor de los datos es enorme: los datos semiestructurados generalmente contienen una gran cantidad de información valiosa, a través del análisis y la extracción de estos datos, pueden proporcionar a las empresas información y predicciones clave.

  • Amplia gama de escenarios de aplicación: los datos semiestructurados tienen buena flexibilidad, pueden representar bien estructuras jerárquicas y relaciones de datos complejas, y facilitan el intercambio y el intercambio de datos, lo que hace que los datos semiestructurados sean adecuados para procesar negocios con estructuras de datos diversas e irregulares Escenas.

Con el aumento del volumen de datos, los datos semiestructurados desempeñarán un papel cada vez más importante en el análisis de datos empresariales. Por lo tanto, los sistemas de análisis de big data deben optimizarse y desarrollarse continuamente para enfrentar mejor los desafíos del procesamiento de datos semiestructurados.

Con el desarrollo de la tecnología de big data, las bases de datos sin esquema se utilizan ampliamente en escenarios de almacenamiento y análisis de datos semiestructurados. Las bases de datos sin esquema no necesitan predefinir la estructura de datos y permiten que la estructura de datos se amplíe dinámicamente en tiempo de ejecución. Esta característica se adapta mejor a la diversidad y variabilidad potencial de los datos semiestructurados.

Las bases de datos sin esquema existentes tienen la flexibilidad, la escalabilidad y las capacidades de descuento de almacenamiento específico necesarias para procesar datos semiestructurados, pero carecen de excelentes capacidades de análisis de datos. En escenarios OLAP de big data, las bases de datos sin esquemas con poderosas capacidades de análisis son aún más raras.

Como un sistema de análisis interactivo en tiempo real de big data, ClickHouse es muy popular debido a sus poderosas ventajas de rendimiento. Si ClickHouse también tiene la capacidad sin esquema, ¡la capacidad de análisis en tiempo real de big data será aún más poderosa!

La solución existente de ClickHouse para procesar datos semiestructurados

Community ClickHouse antes de la versión 22.3, la solución central para procesar datos semiestructurados (tome JSON como ejemplo) es almacenar datos JSON como tipo STRING y usar funciones de herramientas para obtener información de campo JSON para ayudar en el análisis de consultas.

  • Ventajas: Utilice las capacidades existentes de ClickHouse, fácil de implementar.

  • Desventajas: todos los campos se almacenan de forma mixta y la eficiencia del análisis de consultas es baja.

Community ClickHouse introdujo el tipo de datos OBJECT después de la versión 22.3, que admite capacidades dinámicas de subcolumnas. El motor realiza una deducción de tipo dinámico para cada valor de objeto JSON escrito y el atributo JSON se representará como una subcolumna dinámica de la columna OBJECT(JSON). El soporte de subcolumnas dinámicas mejora en gran medida la eficiencia del análisis y el soporte de escalabilidad de datos no estructurados.

  • Ventajas: en comparación con versiones anteriores, ha habido una mejora cualitativa en el modelado de datos y la flexibilidad de escritura.

  • Desventajas: Esta solución aún no unifica datos estructurados y semiestructurados a nivel de sistema de almacenamiento y análisis de datos, y los problemas resultantes son:

1) Los atributos de los datos JSON se almacenan como subcolumnas dinámicas de tipo OBJETO (JSON).Debido a la diferencia entre las subcolumnas y las columnas ordinarias, los usuarios no pueden crear vistas materializadas, PROYECCIÓN y agregar, eliminar y modificar columnas en función de índices secundarios de subcolumnas dinámicas y otras funciones básicas.

2) Debido a la existencia de subcolumnas dinámicas, la construcción de un plan de consultas distribuidas es complicada y el rendimiento es bajo;

Debido a estas limitaciones, es difícil para los clientes utilizar ClickHouse para procesar datos semiestructurados. ClickHouse tiene una gran ventaja de rendimiento en el procesamiento de datos estructurados, y Schema-less tiene una flexibilidad y escalabilidad incomparables en el procesamiento de datos semiestructurados, por lo que ClickHouse tiene capacidades sin esquema, que pueden mejorar en gran medida la capacidad de análisis/procesamiento en tiempo real de ClickHouse. La capacidad de escalar datos semiestructurados hará que ClickHouse sea más competitivo en el campo del análisis en tiempo real de big data.

Solución innovadora de Tencent Cloud Data Warehouse ClickHouse para procesar datos semiestructurados

Tencent Cloud Data Warehouse ClickHouse implementa análisis en tiempo real de soluciones de datos semiestructurados.El diseño del sistema sigue los principios de facilidad de uso, alto rendimiento, flexibilidad y escalabilidad, incluyendo principalmente lo siguiente :

  • Compatible con protocolos de clientes, lo que reduce el costo de la migración de clústeres de clientes;

  • El nivel de kernel admite capacidades sin esquema, lo que hace que el análisis de big data sea flexible y de alto rendimiento;

  • Transmitir información de metadatos en el clúster para mejorar la capacidad de expansión horizontal del sistema;

Si el acuerdo se introduce por primera vez, aumentará el costo de la migración comercial del cliente y limitará los escenarios de aplicación del almacén de datos en la nube ClickHouse. Al comienzo del diseño del programa, se redujo claramente el costo de migración comercial del cliente para lograr actualizaciones sin inconvenientes.

Admite capacidades sin esquema a nivel de kernel. En resumen, la empresa no necesita especificar la estructura de la tabla antes de escribir los datos y se centra en la lógica empresarial. Después de que el kernel recibe los datos escritos, agrega columnas dinámicamente. La tarea en segundo plano pliega o expande dinámicamente la estructura anidada de los datos semiestructurados de acuerdo con la situación del análisis de la consulta para lograr un equilibrio entre la eficiencia del almacenamiento y el rendimiento de la consulta.

El almacén de datos en la nube ClickHouse adopta un diseño de arquitectura descentralizado, no hay datos compartidos entre los nodos informáticos y no hay un nodo de gestión en el clúster. Después de admitir la capacidad sin esquema, los nodos deben mantener una información de metadatos de tabla coherente. De lo contrario, es posible que algunas columnas dinámicas no aparezcan en otros nodos debido a una escritura de datos desequilibrada, lo que provocará aún más fallas en las consultas distribuidas. Para mantener la estructura simple, el almacén de datos en la nube ClickHouse utiliza el protocolo GOSSIP para transmitir información de metadatos entre nodos.

6b148bde59c9cb005b5d40c330d66d69.png

ClickHouse es flexible y extensible en el marco del código y puede realizar las funciones anteriores con menos intrusión de código.

El kernel admite la función sin esquema

Reducir el costo de la migración empresarial es una consideración importante en el proceso de diseño de la solución. ClickHouse proporciona interfaces de cliente enriquecidas para facilitar que las empresas interactúen con el sistema de diferentes maneras. Estos clientes han sido ampliamente utilizados en los sistemas empresariales.

Tomando el Protocolo nativo como ejemplo, el proceso de escritura de datos requiere que el cliente se dé la mano con el servidor para obtener información de la estructura de la tabla del servidor, incluidos los nombres y tipos de campo. Con base en la información anterior, el cliente serializa los datos de entrada y la información de la estructura de la tabla y los envía al servidor. Después de recibir la solicitud, el servidor analiza los datos a su vez y crea y ejecuta la canalización de consultas.

Para ser compatibles con los protocolos existentes, las especificaciones del protocolo no se modifican ni se agregan nuevos tipos de datos. En su lugar, se usan los protocolos y campos existentes. Para el almacenamiento de datos en la nube ClickHouse sin esquema, se usan los tipos OBJECT o String existentes, y se usan los protocolos de cliente existentes. En particular:

  • En el proceso de escritura de datos, el motor de tablas que admite Schema-less enviará un campo "anónimo", que es de tipo OBJECT o String;

  • El cliente escribe los datos en formato JSON, los almacena en un campo de tipo OBJECT o String y los envía al servidor;

    El servidor no publica nuevos tipos de datos y los códigos comerciales existentes se pueden actualizar sin problemas.

    Para un motor de tablas que admita Schema-less, después de que el servidor reciba los datos escritos por el cliente, se analizarán en datos de tipo TUPLE. Expanda los datos de tipo TUPLE y envuélvalos en la estructura de datos común de BlockHouse dentro de ClickHouse. Construya la canalización de consulta para la escritura de datos y ejecútela. Proceso específico:

  • Analizar los datos enviados por el cliente;

  • Amplíe la canalización para la escritura de datos, verifique si hay un conflicto de tipo antes de escribir datos;

  • Separe los datos JSON en columnas de acuerdo con sus campos internos y consérvelos en el disco secundario;

  • Después de colocar los datos, actualice la columna dinámica durante el proceso de envío de PARTE;

  • Devolver los datos necesarios al cliente;

    Diagrama esquemático del flujo de datos, como se muestra a continuación, donde CheckDynamicColumnsTransform verificará si existe un conflicto de tipo de campo.

    bce4cfb394311f954567b48c0d0bdfcc.png

    Dado que la capa de almacenamiento ya almacenó campos internos de JSON en columnas, la capa del motor de consultas debe realizar un trabajo de adaptación. Estas adaptaciones incluyen:

  • Admite la modificación de campos internos JSON a través de ALTER TABLE ADD/MODIFY/DROP COLUMN...;

  • Admite la creación de vistas materializadas basadas en campos internos JSON y PROYECCIÓN para acelerar las consultas;

  • Admite métodos de consulta únicos para datos semiestructurados, como consultar la estructura anidada de JSON a través de comodines en la cláusula SELECT.

Transmitir información de metadatos en el clúster

El almacén de datos en la nube ClickHouse adopta un diseño de arquitectura sin centro y el clúster no tiene un nodo de administración unificado. Una vez que se admita la función sin esquema, la información de la columna dinámica debe transmitirse entre los nodos, y la información de la columna dinámica de los nodos en el clúster debe mantenerse eventualmente consistente. De lo contrario, habrá un problema de falla de ejecución de consulta distribuida.

Para resolver este problema en el futuro, se utiliza el protocolo GOSSIP para transmitir información dentro del clúster. Las principales razones para adoptar este protocolo incluyen:

  • Escalabilidad: el almacén de datos en la nube ClickHouse es una arquitectura descentralizada y es fácil expandir clústeres a gran escala.El protocolo GOSSIP tiene buena escalabilidad y cumple con los requisitos de escala elástica de los clústeres elásticos;

  • Tolerancia a fallas: la falla de cualquier nodo en el clúster no afecta el correcto funcionamiento del algoritmo GOSSIP y no afecta la disponibilidad del clúster ClickHouse de Cloud Data Warehouse;

  • Consistencia final: bajo la arquitectura descentralizada, el algoritmo converge rápidamente y puede realizar la difusión exponencial de la información, por lo que el tiempo para la inconsistencia de los metadatos es corto;

  • Robustez: El protocolo GOSSIP es un protocolo descentralizado, y la falta de recepción de órdenes para algún cálculo no afectará la sincronización de información de otros nodos;

    Específicamente, para un motor de tabla que admita Schema-less, la información de la versión correspondiente se incrementará cada vez que se actualice una columna dinámica. La información de la columna dinámica se transmitirá a otros nodos del clúster a través del protocolo GOSSIP. Cada nodo mantiene una tarea en segundo plano que periódicamente ejecuta acciones de transmisión de mensajes.

    Los nodos del clúster se dividen en dos tipos: el conjunto de nodos conectados y el conjunto de nodos que no se mantienen conectados. Tareas periódicas en segundo plano, seleccione un nodo en cada uno de los dos conjuntos anteriores cada vez y complete una transmisión de mensaje (el nodo local se marca como local y el nodo seleccionado al azar se marca como remoto):

  • El nodo local envía información de tipo SYNC al nodo remoto: incluyendo información de columna dinámica y versión;

  • Después de recibir el mensaje, el nodo remoto lo compara con la columna dinámica local, actualiza su información de columna dinámica si es necesario y devuelve información de tipo ACK al nodo local. Y este tipo de información incluye información de diferencia incremental;

  • Después de recibir la información de tipo ACK enviada por el nodo remoto, el nodo local actualiza la información de la columna dinámica local si es necesario y devuelve un mensaje de tipo ACK_AGAIN al nodo remoto.

Cuando se escriben datos, o el comando ALTER activa la información SCHEMA de la tabla que se cambiará, la versión correspondiente se actualizará sincrónicamente. La tarea en segundo plano del módulo GOSSIP intercambiará periódicamente información entre datos locales y nodos aleatorios, y la actualizará si es necesario.

6422716a1f02e64fbf28091c34a6a2ce.png

En el negocio real, la información de la columna dinámica no cambia con frecuencia. Por lo general, cuando se conecta un nuevo servicio, hay un cambio de frecuencia relativamente alto y luego tiende a un estado estable.

Ejemplos de aplicación

Cuando los datos semiestructurados se escriben en un clúster de ClickHouse que admite Schema-less, solo se requieren pasos simples:

  • Al crear una tabla, debe establecer un parámetro para identificar que la tabla admite la función sin esquema.El parámetro es enable_dynamic_columns=1;

  • Al crear una tabla, solo necesita especificar la clave de partición, la clave principal y el nombre y tipo de campo al que hace referencia la clave de ordenación;

Por ejemplo, crea una tabla:

CREATE TABLE r
(
    `@timestamp` DateTime,
    `clientip` IPv4
)
ENGINE = MergeTree
PARTITION BY toDate(`@timestamp`)
ORDER BY clientip
SETTINGS enable_dynamic_columns = 1

Al crear una tabla, solo se requiere una pequeña cantidad de definiciones de campo necesarias y, al mismo tiempo, la especificación de parámetros indica que la tabla admite funciones sin esquema. Cabe señalar que, excepto por admitir la función Schema-less, los demás comportamientos del motor de tabla son totalmente compatibles.

Al escribir datos, los datos semiestructurados deben colocarse detrás de los campos definidos en forma de JSON:

INSERT INTO r SELECT
    toDateTime(JSONExtractUInt(json, '@timestamp')) AS timestamp,
    toIPv4(JSONExtractString(json, 'clientip')) AS clientip,
    json
FROM s3('https://schema-less-testing-1301087413.cos.ap-hongkong.myqcloud.com/documents-01.ndjson.gz', 'JSONAsString')

Después de escribir los datos JSON, la tabla expandirá dinámicamente los campos, vistos a través de DESC r:

1d806ba72aee2e9fac0c6b3efdf308ba.png

Ver datos:

a3c9a3320e51969ccd7d059d8aeaf472.png

Después de escribir los datos en el motor, use comodines para consultar la estructura anidada dentro del JSON:

080c2377963f17fd4bad78f1a0846c55.png

Por supuesto, también puede usar directamente campos internos JSON para varias consultas:

8b66c7281d1e16c070a6a575e5f939e1.png

El mecanismo de consulta de aceleración de precomputación dentro de ClickHouse también se puede admitir:

ALTER TABLE r
    ADD PROJECTION p1
    (
        SELECT 
            request.path,
            count()
        GROUP BY request.path
    )

Se puede ver que los usuarios pueden usar ClickHouse para analizar y consultar datos no estructurados de manera muy conveniente.

Actuación

ClickHouse, un almacén de datos en la nube, tiene un buen rendimiento en el procesamiento de datos semiestructurados. En el enlace de producción del cliente (en el escenario de análisis de registros, el tamaño total de los datos es de 300 TB, el tamaño del clúster es de 50 nodos y el número total de núcleos es de 1600), la comparación de rendimiento entre la solución ClickHouse existente y el almacén de datos en la nube ClickHouse:

eb1c3fd7e9ff548c2aa24c6fd1ed0c62.png

El motivo de la mejora del rendimiento: almacene los campos consultados con frecuencia como columnas ordinarias, aproveche al máximo las ventajas de rendimiento de la computación vectorizada y realice una indexación secundaria y un procesamiento previo de ellos, mejorando así el rendimiento de las consultas.

Resumir

En la actualidad, ClickHouse, un almacén de datos en la nube, mejora 20 veces el rendimiento del análisis en tiempo real de datos semiestructurados en escenarios de recuperación de registros y APM. Ahorra una gran cantidad de costos de hardware para los clientes de la nube pública y devuelve los resultados de las consultas en segundos.

Supongo que te gusta

Origin blog.csdn.net/cloudbigdata/article/details/130279217
Recomendado
Clasificación