Pasar a ClickHouse: 3 años después

Hace tres años Viktor Tarnavsky y Alexey Milovidov de Yandex en el escenario HighLoad ++ dicho, qué tan bueno es ClickHouse y cómo no se ralentiza. Y en la siguiente etapa había Alexander Zaitsev с reporte acerca de mudarse a casa de clics de otro DBMS analítico y con la conclusión de que casa de clics, por supuesto, bueno, pero no muy conveniente. Cuando en 2016 la empresa LifeStreet, donde entonces trabajaba Alexander, estaba convirtiendo un sistema analítico de varios petabytes en casa de clics, era un fascinante “camino de ladrillos amarillos” lleno de peligros desconocidos. casa de clics En aquel entonces parecía un campo minado.

Tres años despues casa de clics mejoró mucho: durante este tiempo, Alexander fundó la empresa Altinity, que no solo ayuda a las personas a mudarse a casa de clics docenas de proyectos, pero también mejora el producto en sí junto con colegas de Yandex. Ahora casa de clics Todavía no es un paseo sin preocupaciones, pero tampoco un campo minado.

Alexander ha estado trabajando con sistemas distribuidos desde 2003, desarrollando grandes proyectos en mysql, oracle и vertical. En el último HighLoad ++ 2019 Alexander, uno de los pioneros en utilizar casa de clics, contó qué es este DBMS ahora. Conoceremos las características principales. casa de clics: en qué se diferencia de otros sistemas y en qué casos es más eficaz utilizarlo. Usando ejemplos, veremos prácticas recientes y probadas en proyectos para construir sistemas basados ​​en casa de clics.


Retrospectiva: lo que pasó hace 3 años

Hace tres años transferimos la empresa LifeStreet en casa de clics desde otra base de datos analítica, y la migración del análisis de la red publicitaria se veía así:

  • Junio ​​de 2016. En Fuente abierta aparecido casa de clics y nuestro proyecto comenzó;
  • Agosto. Prueba de concepto: gran red publicitaria, infraestructura y 200-300 terabytes de datos;
  • Octubre. Primeros datos de producción;
  • Diciembre. La carga total del producto es de 10 mil millones a 50 mil millones de eventos por día.
  • Junio ​​2017. Migración exitosa de usuarios a casa de clics, 2,5 petabytes de datos en un clúster de 60 servidores.

Durante el proceso de migración, hubo una comprensión cada vez mayor de que casa de clics Es un buen sistema con el que es agradable trabajar, pero es un proyecto interno de Yandex. Por lo tanto, hay matices: Yandex primero se ocupará de sus propios clientes internos y solo luego de la comunidad y las necesidades de los usuarios externos, y ClickHouse luego no alcanzó el nivel empresarial en muchas áreas funcionales. Por eso fundamos Altinity en marzo de 2017 para hacer casa de clics Aún más rápido y conveniente no solo para Yandex, sino también para otros usuarios. Y ahora nosotros:

  • Formamos y ayudamos a construir soluciones basadas en casa de clics para que los clientes no se metan en problemas y para que la solución finalmente funcione;
  • Brindamos soporte 24 horas al día, 7 días a la semana casa de clics- instalaciones;
  • Desarrollamos nuestros propios proyectos de ecosistemas;
  • Nos comprometemos activamente con nosotros mismos casa de clics, respondiendo a solicitudes de usuarios que desean ver determinadas funciones.

Y por supuesto, ayudamos con la mudanza a casa de clics с MySQL, vertical, Oracle, Ciruela verde, Desplazamiento hacia el rojo y otros sistemas. Hemos estado involucrados en una variedad de movimientos y todos han tenido éxito.

Pasar a ClickHouse: 3 años después

¿Por qué mudarse a casa de clics

¡No frena! Esta es la razón principal. casa de clics - base de datos muy rápida para diferentes escenarios:

Pasar a ClickHouse: 3 años después

Citas aleatorias de personas que han trabajado con personas durante mucho tiempo. casa de clics.

Escalabilidad. En alguna otra base de datos se puede lograr un buen rendimiento en una sola pieza de hardware, pero casa de clics puede escalar no solo verticalmente, sino también horizontalmente, simplemente agregando servidores. No todo funciona tan bien como nos gustaría, pero funciona. Puede ampliar el sistema a medida que crece su negocio. Es importante que no estemos limitados por la solución actual y que siempre haya potencial de desarrollo.

Portabilidad. No hay apego a una sola cosa. Por ejemplo, con Desplazamiento al rojo de Amazon Es difícil moverse a algún lado. A casa de clics puede instalarlo en su computadora portátil, servidor, implementarlo en la nube, ir a Kubernetes — no existen restricciones al funcionamiento de la infraestructura. Esto es conveniente para todos y es una gran ventaja de la que muchas otras bases de datos similares no pueden presumir.

Flexibilidad. casa de clics no se limita a una cosa, por ejemplo, Yandex.Metrica, sino que se desarrolla y se utiliza en cada vez más proyectos e industrias diferentes. Se puede ampliar agregando nuevas capacidades para resolver nuevos problemas. Por ejemplo, se cree que almacenar registros en una base de datos es de mala educación, por lo que se les ocurrió Elasticsearch. Pero gracias a la flexibilidad casa de clics, también puede almacenar registros en él y, a menudo, esto es incluso mejor que en Elasticsearch - en casa de clics esto requiere 10 veces menos hierro.

Libre Open Source. No tienes que pagar por nada. No es necesario negociar permiso para instalar el sistema en su computadora portátil o servidor. Sin cuotas escondidas. Al mismo tiempo, ninguna otra tecnología de base de datos de código abierto puede competir en velocidad con casa de clics. MySQL, MariaDB, Greenplum - todos son mucho más lentos.

Comunidad, impulso y diversión. En casa de clics Excelente comunidad: reuniones, charlas y Alexey Milovidov, que nos llena a todos con su energía y optimismo.

Mudarse a ClickHouse

Ir a casa de clics Por alguna razón, sólo necesitas tres cosas:

  • Comprender las limitaciones casa de clics y para qué no es adecuado.
  • Aprovechar La tecnología y sus mayores fortalezas.
  • Experimento. Incluso entendiendo cómo funciona casa de clics, no siempre es posible predecir cuándo será más rápido, cuándo será más lento, cuándo será mejor y cuándo será peor. Así que inténtalo.

problema de mudanza

Sólo hay un “pero”: si te mudas a casa de clics de otra cosa, normalmente algo sale mal. Estamos acostumbrados a algunas prácticas y cosas que funcionan en nuestra base de datos favorita. Por ejemplo, cualquiera que trabaje con SQLas bases de datos L consideran obligatorio el siguiente conjunto de funciones:

  • actas;
  • limitaciones;
  • consistencia;
  • índices
  • ACTUALIZAR/ELIMINAR;
  • NULLs;
  • milisegundos;
  • moldes de tipo automático;
  • uniones múltiples;
  • particiones arbitrarias;
  • Herramientas de gestión de clusters.

La contratación es obligatoria, pero hace tres años en casa de clics ¡Ninguna de estas funciones estaba disponible! Ahora queda menos de la mitad de lo que no se ha implementado: transacciones, restricciones, coherencia, milisegundos y conversión de tipos.

Y lo principal es que en casa de clics Algunas prácticas y enfoques estándar no funcionan o funcionan de manera diferente a como estamos acostumbrados. Todo lo que aparece en casa de clics, corresponde a "Camino ClickHouse", es decir. Las funciones difieren de otras bases de datos. Por ejemplo:

  • Los índices no se seleccionan, sino que se omiten.
  • ACTUALIZAR/ELIMINAR no sincrónico, sino asincrónico.
  • Hay varias combinaciones, pero no hay un planificador de consultas. Por lo general, para la gente del mundo de las bases de datos no está muy claro cómo se realizan.

Guiones de ClickHouse

En 1960, un matemático estadounidense de origen húngaro Wigner EP escribió un artículo "La irrazonable eficacia de las matemáticas en las ciencias naturales.” (“La incomprensible eficacia de las matemáticas en las ciencias naturales”) que, por alguna razón, el mundo que nos rodea está bien descrito por leyes matemáticas. Las matemáticas son una ciencia abstracta y las leyes físicas expresadas en forma matemática no son triviales y Wigner EP Destacó que esto es muy extraño.

Desde mi punto de vista, casa de clics - la misma extrañeza. Parafraseando a Wigner, podemos decir esto: la eficiencia inconcebible es asombrosa. casa de clics en una amplia variedad de aplicaciones analíticas!

Pasar a ClickHouse: 3 años después

Por ejemplo, tomemos Almacén de datos en tiempo real, en el que los datos se cargan casi continuamente. Queremos recibir sus solicitudes con un segundo retraso. Por favor, úsalo casa de clics, porque este es el escenario para el que fue diseñado. casa de clics Así es exactamente como se utiliza no sólo en la web, sino también en marketing y análisis financiero. adtech, así como en Detección de fraudenorte. EN Almacén de datos en tiempo real Se utiliza un esquema estructurado complejo como "estrella" o "copo de nieve", muchas tablas con SUSCRÍBETE (a veces múltiples), y los datos generalmente se almacenan y modifican en algunos sistemas.

Tomemos otro escenario: Series de tiempo: seguimiento de dispositivos, redes, estadísticas de uso, Internet de las Cosas. Aquí nos encontramos con acontecimientos bastante simples ordenados en el tiempo. casa de clics no fue desarrollado originalmente para esto, pero ha demostrado funcionar bien, razón por la cual las grandes empresas utilizan casa de clics como depósito de información de seguimiento. Para explorar si es adecuado casa de clics para las series de tiempo, hicimos un punto de referencia basado en el enfoque y los resultados. Influjo DB и Escala de tiempoDB - especializado series de tiempo bases de datos. ResultóQue casa de clics, incluso sin optimización para tales tareas, gana en un campo extranjero:

Pasar a ClickHouse: 3 años después

В series de tiempo Por lo general, se utiliza una tabla estrecha: varias columnas pequeñas. Una gran cantidad de datos pueden provenir del monitoreo (millones de registros por segundo) y generalmente vienen en pequeñas ráfagas (en tiempo real transmisión). Por lo tanto, se necesita un script de inserción diferente y las consultas en sí tienen sus propios detalles.

Gestión de registros. Recopilar registros en una base de datos suele ser malo, pero casa de clics Esto se puede hacer con algunos comentarios como se describe anteriormente. Muchas empresas utilizan casa de clics exactamente para este propósito. En este caso, utilizamos una mesa ancha y plana donde almacenamos todos los registros (por ejemplo, en el formulario JSON), o cortar en trozos. Los datos generalmente se cargan en grandes lotes (archivos) y buscamos por algún campo.

Para cada una de estas funciones se suelen utilizar bases de datos especializadas. casa de clics uno puede hacerlo todo y tan bien que les supera. Ahora echemos un vistazo más de cerca series de tiempo escenario y cómo “cocinar” correctamente casa de clics para este escenario.

Series de tiempo

Actualmente este es el principal escenario por el que casa de clics considerada la solución estándar. Series de tiempo Es un conjunto de eventos ordenados en el tiempo, que representan cambios en algún proceso a lo largo del tiempo. Por ejemplo, podría ser la frecuencia cardíaca por día o la cantidad de procesos en el sistema. Todo lo que da al tiempo un tictac con algunas dimensiones es series de tiempo:

Pasar a ClickHouse: 3 años después

La mayoría de este tipo de eventos provienen del seguimiento. Esto puede ser no sólo monitorear la web, sino también dispositivos reales: automóviles, sistemas industriales, IoT, fábricas o taxis no tripulados, en cuyo maletero Yandex ya está poniendo casa de clics-servidor.

Por ejemplo, hay empresas que recopilan datos de los barcos. Cada pocos segundos, los sensores del portacontenedores envían cientos de mediciones diferentes. Los ingenieros los estudian, construyen modelos y tratan de comprender con qué eficiencia se utiliza el buque, porque un portacontenedores no debería estar inactivo ni siquiera por un segundo. Cualquier tiempo de inactividad es una pérdida de dinero, por lo que es importante predecir la ruta para que las paradas sean mínimas.

Hoy en día existe un crecimiento de bases de datos especializadas que miden series de tiempo. El sitio Motores DB Las diferentes bases de datos están de alguna manera clasificadas y puedes verlas por tipo:

Pasar a ClickHouse: 3 años después

El tipo de más rápido crecimiento es series de tiempos. Las bases de datos de gráficos también están creciendo, pero series de tiempos han estado creciendo más rápidamente en los últimos años. Los representantes típicos de esta familia de bases de datos son Influjo DB, Prometeo, KDB, Escala de tiempoDB (construida sobre PostgreSQL), soluciones de Amazon. casa de clics También se puede utilizar aquí y se utiliza. Déjame darte algunos ejemplos públicos.

Una de las pioneras es la empresa. CloudFlare (CDN-proveedor). Ellos monitorean su CDN a través de casa de clics (DNS-peticiones, HTTP-consultas) con una carga enorme: 6 millones de eventos por segundo. todo pasa Kafka, va a casa de clics, que brinda la oportunidad de ver paneles de eventos en el sistema en tiempo real.

Comcast - uno de los líderes en telecomunicaciones de Estados Unidos: Internet, televisión digital, telefonía. Crearon un sistema de control similar. CDN dentro de Open Source proyecto Control de tráfico Apache para trabajar con su enorme cantidad de datos. casa de clics utilizado como backend para análisis.

Percona construido en casa de clics dentro de tu PMMpara almacenar el seguimiento de varios MySQL.

Requisitos específicos

Las bases de datos de series temporales tienen sus propios requisitos específicos.

  • Inserción rápida de muchos agentes.. Tenemos que insertar datos de muchas secuencias muy rápidamente. casa de clics Lo hace bien porque todas sus inserciones no son bloqueantes. Cualquier insertar es un archivo nuevo en el disco y las pequeñas inserciones se pueden almacenar en el búfer de una forma u otra. EN casa de clics Es mejor insertar datos en lotes grandes en lugar de una línea a la vez.
  • Esquema flexible. En series de tiempo Por lo general, no conocemos la estructura de datos por completo. Es posible construir un sistema de monitoreo para una aplicación específica, pero luego es difícil usarlo para otra aplicación. Esto requiere un esquema más flexible. casa de clics, le permite hacer esto, aunque sea una base fuertemente tipada.
  • Almacenamiento eficiente y olvido de datos.. Generalmente en series de tiempo una gran cantidad de datos, por lo que deben almacenarse de la manera más eficiente posible. Por ejemplo, en Influjo DB la buena compresión es su característica principal. Pero además de almacenarlos, también es necesario poder “olvidar” los datos antiguos y hacer algún tipo de recuperación. disminución de la resolución — recuento automático de áridos.
  • Consultas rápidas sobre datos agregados. A veces es interesante observar los últimos 5 minutos con una precisión de milisegundos, pero en los datos mensuales puede que no sea necesaria una granularidad de minutos o segundos: las estadísticas generales son suficientes. Este tipo de apoyo es necesario; de lo contrario, una solicitud de 3 meses tardará mucho en completarse, incluso en casa de clics.
  • Solicitudes como "último punto, a partir de». Estos son típicos de series de tiempo consultas: ver la última medición o estado del sistema en un momento dado t. Estas no son consultas muy agradables para una base de datos, pero también es necesario poder realizarlas.
  • Serie temporal “pegado”. Series de tiempo es una serie de tiempo. Si hay dos series temporales, a menudo es necesario conectarlas y correlacionarlas. No es conveniente hacer esto en todas las bases de datos, especialmente con series temporales no alineadas: aquí hay algunos puntos temporales, hay otros. Puedes considerarlo promedio, pero de repente todavía habrá un agujero allí, por lo que no está claro.

Veamos cómo se cumplen estos requisitos en casa de clics.

esquema

В casa de clics esquema para series de tiempo Se puede realizar de diferentes maneras, dependiendo del grado de regularidad de los datos. Es posible construir un sistema a partir de datos regulares cuando conocemos todas las métricas de antemano. Por ejemplo, hice esto CloudFlare con seguimiento CDN Es un sistema bien optimizado. Puede construir un sistema más general que monitoree toda la infraestructura y diversos servicios. En el caso de datos irregulares, no sabemos de antemano qué estamos monitoreando, y este es probablemente el caso más común.

Datos regulares. Columnas. El esquema es simple: columnas con los tipos requeridos:

CREATE TABLE cpu (
  created_date Date DEFAULT today(),  
  created_at DateTime DEFAULT now(),  
  time String,  
  tags_id UInt32,  /* join to dim_tag */
  usage_user Float64,  
  usage_system Float64,  
  usage_idle Float64,  
  usage_nice Float64,  
  usage_iowait Float64,  
  usage_irq Float64,  
  usage_softirq Float64,  
  usage_steal Float64,  
  usage_guest Float64,  
  usage_guest_nice Float64
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

Esta es una tabla normal que monitorea algún tipo de actividad de carga del sistema (usuario, te, ocioso, agradable). Simple y conveniente, pero no flexible. Si queremos un esquema más flexible, podemos usar matrices.

Datos irregulares. matrices:

CREATE TABLE cpu_alc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metrics Nested(
    name LowCardinality(String),  
    value Float64
  )
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...

Estructura Anidado son dos matrices: métricas.nombre и métricas.valor. Aquí puede almacenar datos de seguimiento arbitrarios como una serie de nombres y una serie de mediciones para cada evento. Para una mayor optimización, en lugar de una sola estructura, puede crear varias. Por ejemplo, uno para flotar-valor, otro - para int-significado porque int Quiero almacenar de manera más eficiente.

Pero es más difícil acceder a una estructura así. Tendrás que usar una construcción especial, usando funciones especiales para extraer los valores primero del índice y luego de la matriz:

SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...

Pero todavía funciona bastante rápido. Otra forma de almacenar datos irregulares es por filas.

Datos irregulares. Instrumentos de cuerda. En este método tradicional, sin matrices, los nombres y valores se almacenan simultáneamente. Si 5 mediciones provienen de un dispositivo a la vez, se generan 000 filas en la base de datos:

CREATE TABLE cpu_rlc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metric_name LowCardinality(String),  
  metric_value Float64
) ENGINE = MergeTree(created_date, (metric_name, tags_id, created_at), 8192);


SELECT 
    maxIf(metric_value, metric_name = 'usage_user'),
    ... 
FROM cpu_r
WHERE metric_name IN ('usage_user', ...)

casa de clics hace frente a esto: tiene extensiones especiales casa de clics SQL. Por ejemplo, máximo si — una función especial que calcula el máximo mediante una métrica cuando se cumple alguna condición. Puede escribir varias expresiones de este tipo en una sola solicitud y calcular inmediatamente el valor de varias métricas.

Comparemos tres enfoques:

Pasar a ClickHouse: 3 años después

Detalles

Aquí agregué "Tamaño de datos del disco" para algunos conjuntos de datos de prueba. En el caso de las columnas, tenemos el tamaño de datos más pequeño: máxima compresión, máxima velocidad de consulta, pero pagamos por tener que registrarlo todo de una vez.

En el caso de los arrays todo es un poco peor. Los datos todavía están bien comprimidos y se puede almacenar un patrón irregular. Pero casa de clics - una base de datos en columnas, y cuando comenzamos a almacenar todo en una matriz, se convierte en una fila y pagamos por la flexibilidad con eficiencia. Para cualquier operación, tendrá que leer toda la matriz en la memoria, luego encontrar el elemento deseado en ella y, si la matriz crece, la velocidad se degrada.

En una de las empresas que utiliza este enfoque (por ejemplo, Uber), las matrices se cortan en trozos de 128 elementos. Los datos de varios miles de métricas con un volumen de 200 TB de datos/día no se almacenan en una matriz, sino en 10 o 30 matrices con una lógica de almacenamiento especial.

El método más sencillo es con cuerdas. Pero los datos están mal comprimidos, el tamaño de la tabla es grande e incluso cuando las consultas se basan en varias métricas, ClickHouse no funciona de manera óptima.

Esquema híbrido

Supongamos que hemos elegido un circuito de matriz. Pero si sabemos que la mayoría de nuestros paneles muestran solo métricas de usuario y sistema, podemos materializar adicionalmente estas métricas en columnas de una matriz a nivel de tabla de esta manera:

CREATE TABLE cpu_alc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metrics Nested(
    name LowCardinality(String),  
    value Float64
  ),
  usage_user Float64 
             MATERIALIZED metrics.value[indexOf(metrics.name,'usage_user')],
  usage_system Float64 
             MATERIALIZED metrics.value[indexOf(metrics.name,'usage_system')]
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

Al insertar casa de clics los contará automáticamente. De esta forma podrá combinar negocios con placer: el esquema es flexible y general, pero eliminamos las columnas más utilizadas. Tenga en cuenta que esto no requirió cambiar el inserto y ETLque continúa insertando matrices en la tabla. acabamos de hacerlo ALTERAR MESA, agregó un par de parlantes y obtuvimos un esquema híbrido y más rápido que puedes comenzar a usar de inmediato.

Códecs y compresión

para series de tiempo Importa qué tan bien empaquetes los datos porque la cantidad de información puede ser muy grande. EN casa de clics Existe un conjunto de herramientas para lograr un efecto de compresión de 1:10, 1:20 y, a veces, más. Esto significa que 1 TB de datos descomprimidos en el disco ocupa entre 50 y 100 GB. Un tamaño más pequeño es bueno, los datos se pueden leer y procesar más rápido.

Para lograr un alto nivel de compresión, casa de clics admite los siguientes códecs:

Pasar a ClickHouse: 3 años después

Tabla de ejemplo:

CREATE TABLE benchmark.cpu_codecs_lz4 (
    created_date Date DEFAULT today(), 
    created_at DateTime DEFAULT now() Codec(DoubleDelta, LZ4), 
    tags_id UInt32, 
    usage_user Float64 Codec(Gorilla, LZ4), 
    usage_system Float64 Codec(Gorilla, LZ4), 
    usage_idle Float64 Codec(Gorilla, LZ4), 
    usage_nice Float64 Codec(Gorilla, LZ4), 
    usage_iowait Float64 Codec(Gorilla, LZ4), 
    usage_irq Float64 Codec(Gorilla, LZ4), 
    usage_softirq Float64 Codec(Gorilla, LZ4), 
    usage_steal Float64 Codec(Gorilla, LZ4), 
    usage_guest Float64 Codec(Gorilla, LZ4), 
    usage_guest_nice Float64 Codec(Gorilla, LZ4), 
    additional_tags String DEFAULT ''
)
ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

Aquí definimos el códec. Doble Delta en un caso, en el segundo - Gorila, y definitivamente agregaremos más LZ4 compresión. Como resultado, el tamaño de los datos en el disco se reduce considerablemente:

Pasar a ClickHouse: 3 años después

Esto muestra cuánto espacio ocupan los mismos datos, pero usando diferentes códecs y compresiones:

  • en un archivo GZIP en el disco;
  • en ClickHouse sin códecs, pero con compresión ZSTD;
  • en ClickHouse con codecs y compresión LZ4 y ZSTD.

Se puede observar que las tablas con códecs ocupan mucho menos espacio.

El tamaño importa

No menos importante elegir tipo de datos correcto:

Pasar a ClickHouse: 3 años después

En todos los ejemplos anteriores utilicé Flotador64. Pero si elegimos Flotador32, entonces eso sería aún mejor. Esto lo demostraron bien los chicos de Perkona en el artículo vinculado anteriormente. Es importante utilizar el tipo más compacto que sea adecuado para la tarea: incluso menos para el tamaño del disco que para la velocidad de consulta. casa de clics muy sensible a esto.

Si puedes usar int32 en lugar de int64, entonces espere un aumento de rendimiento de casi el doble. Los datos ocupan menos memoria y toda la "aritmética" funciona mucho más rápido. casa de clics Internamente es un sistema muy estrictamente tipificado; aprovecha al máximo todas las posibilidades que ofrecen los sistemas modernos.

Agregación y Vistas materializadas

Las vistas agregadas y materializadas le permiten crear agregados para diferentes ocasiones:

Pasar a ClickHouse: 3 años después

Por ejemplo, es posible que tenga datos de origen no agregados y puede adjuntarles varias vistas materializadas con suma automática a través de un motor especial. SummingMergeTree (SMT). SMT es una estructura de datos de agregación especial que calcula los agregados automáticamente. Los datos sin procesar se insertan en la base de datos, se agregan automáticamente y los paneles se pueden utilizar inmediatamente en ellos.

TTL - "olvidar" datos antiguos

¿Cómo “olvidar” datos que ya no son necesarios? casa de clics sabe cómo hacer esto. Al crear tablas, puede especificar TTL expresiones: por ejemplo, que almacenemos datos minuciosos durante un día, datos diarios durante 30 días y nunca toquemos datos semanales o mensuales:

CREATE TABLE aggr_by_minute
…
TTL time + interval 1 day

CREATE TABLE aggr_by_day
…
TTL time + interval 30 day

CREATE TABLE aggr_by_week
…
/* no TTL */

De varios niveles - dividir datos en discos

Llevando esta idea más allá, los datos se pueden almacenar en casa de clics en diferentes lugares. Supongamos que queremos almacenar datos importantes de la última semana en un servidor local muy rápido. SSD, y ponemos más datos históricos en otro lugar. EN casa de clics esto ahora es posible:

Pasar a ClickHouse: 3 años después

Puede configurar una política de almacenamiento (política de almacenamiento) Entonces casa de clics transferirá automáticamente los datos al alcanzar ciertas condiciones a otro almacenamiento.

Pero eso no es todo. En el nivel de una tabla específica, puede definir reglas para determinar exactamente cuándo los datos se almacenan en frío. Por ejemplo, los datos se almacenan en un disco muy rápido durante 7 días y todo lo anterior se transfiere a uno lento. Esto es bueno porque permite que el sistema se mantenga al máximo rendimiento, mientras se controlan los costos y no se desperdicia dinero en datos fríos:

CREATE TABLE 
... 
TTL date + INTERVAL 7 DAY TO VOLUME 'cold_volume', 
    date + INTERVAL 180 DAY DELETE

Características únicas casa de clics

En casi todo casa de clics Existen tales "aspectos destacados", pero se compensan con la exclusividad, algo que no se encuentra en otras bases de datos. Por ejemplo, estas son algunas de las características únicas. casa de clics:

  • Arrays. En casa de clics muy buen soporte para matrices, así como la capacidad de realizar cálculos complejos sobre ellas.
  • Agregar estructuras de datos. Esta es una de las "características asesinas" casa de clics. A pesar de que los chicos de Yandex dicen que no queremos agregar datos, todo está agregado en casa de clics, porque es rápido y conveniente.
  • Vistas materializadas. Junto con la agregación de estructuras de datos, las vistas materializadas le permiten realizar cómodamente en tiempo real agregación.
  • ClickHouse SQL. Esta es una extensión de idioma. SQL con algunas características adicionales y exclusivas que sólo están disponibles en casa de clics. Antes era como una ampliación por un lado y una desventaja por el otro. Ahora casi todas las desventajas en comparación con SQL 92 Lo eliminamos, ahora es solo una extensión.
  • lambda–expresiones. ¿Están todavía en alguna base de datos?
  • ML-apoyo. Esto está disponible en diferentes bases de datos, algunas son mejores, otras son peores.
  • Código abierto. Podemos expandirnos casa de clics juntos. Ahora en casa de clics Alrededor de 500 contribuyentes, y este número está en constante crecimiento.

consultas complicadas

В casa de clics hay muchas maneras diferentes de hacer lo mismo. Por ejemplo, puede devolver el último valor de una tabla de tres formas diferentes para CPU (también hay un cuarto, pero es aún más exótico).

El primero muestra lo conveniente que es hacerlo en casa de clics consultas cuando quieras comprobar eso tupla contenida en la subconsulta. Esto es algo que personalmente extrañé mucho en otras bases de datos. Si quiero comparar algo con una subconsulta, en otras bases de datos solo se puede comparar un escalar, pero para varias columnas necesito escribir SUSCRÍBETE. En casa de clics puedes usar tupla:

SELECT *
  FROM cpu 
 WHERE (tags_id, created_at) IN 
    (SELECT tags_id, max(created_at)
        FROM cpu 
        GROUP BY tags_id)

El segundo método hace lo mismo pero usa una función agregada. argMax:

SELECT 
    argMax(usage_user), created_at),
    argMax(usage_system), created_at),
...
 FROM cpu 

В casa de clics hay varias docenas de funciones agregadas, y si usa combinadores, de acuerdo con las leyes de la combinatoria obtendrá alrededor de mil de ellas. ArgMax - una de las funciones que calcula el valor máximo: la solicitud devuelve el valor usuario_uso, en el que se alcanza el valor máximo Creado en:

SELECT now() as created_at,
       cpu.*
  FROM (SELECT DISTINCT tags_id from cpu) base 
  ASOF LEFT JOIN cpu USING (tags_id, created_at)

ASOF ÚNETE — “pegar” filas con diferentes tiempos. Esta es una característica única para bases de datos que solo está disponible en kdb +. Si hay dos series temporales con tiempos diferentes, ASOF ÚNETE le permite moverlos y fusionarlos en una sola solicitud. Para cada valor de una serie temporal, se encuentra el valor más cercano de la otra y se devuelven en la misma línea:

Pasar a ClickHouse: 3 años después

Funciones analíticas

En el estándar SQL-2003 puedes escribir así:

SELECT origin,
       timestamp,
       timestamp -LAG(timestamp, 1) OVER (PARTITION BY origin ORDER BY timestamp) AS duration,
       timestamp -MIN(timestamp) OVER (PARTITION BY origin ORDER BY timestamp) AS startseq_duration,
       ROW_NUMBER() OVER (PARTITION BY origin ORDER BY timestamp) AS sequence,
       COUNT() OVER (PARTITION BY origin ORDER BY timestamp) AS nb
  FROM mytable
ORDER BY origin, timestamp;

В casa de clics No puedes hacer eso, no es compatible con el estándar. SQL-2003 y probablemente nunca lo haga. En cambio, en casa de clics Es costumbre escribir así:

Pasar a ClickHouse: 3 años después

Prometí lambdas: ¡aquí están!

Este es un análogo de la consulta analítica en el estándar. SQL-2003: cuenta la diferencia entre los dos marca de tiempo, duración, número ordinal: todo lo que normalmente consideramos funciones analíticas. EN casa de clics Los contamos a través de matrices: primero colapsamos los datos en una matriz, luego hacemos todo lo que queremos en la matriz y luego la volvemos a expandir. No es muy conveniente, requiere como mínimo un amor por la programación funcional, pero es muy flexible.

Funciones especiales

Además, en casa de clics muchas funciones especializadas. Por ejemplo, ¿cómo determinar cuántas sesiones se están realizando simultáneamente? Una tarea de monitoreo típica es determinar la carga máxima con una solicitud. EN casa de clics Para ello existe una función especial:

Pasar a ClickHouse: 3 años después

En general, ClickHouse tiene funciones especiales para muchos propósitos:

  • corriendoDiferencia, corriendoAcumular, vecino;
  • mapasum(clave, valor);
  • timeSeriesGroupSum(uid, marca de tiempo, valor);
  • timeSeriesGroupRateSum(uid, marca de tiempo, valor);
  • skewPop, skewSamp, kurtPop, kurtSamp;
  • CON RELLENO / CON LAZOS;
  • Regresión lineal simple, Regresión lineal estocástica.

Esta no es una lista completa de funciones, hay entre 500 y 600 en total. Sugerencia: todas las funciones en casa de clics está en la tabla del sistema (no todos están documentados, pero todos son interesantes):

select * from system.functions order by name

casa de clics almacena mucha información sobre sí mismo, incluyendo tablas de registro, registro_query, registro de seguimiento, registro de operaciones con bloques de datos (parte_log), registro de métricas y registro del sistema, que normalmente escribe en el disco. Las métricas de registro son series de tiempo в casa de clics De hecho casa de clics: La propia base de datos puede desempeñar un papel series de tiempo bases de datos, “devorándose” así mismo.

Pasar a ClickHouse: 3 años después

Esto también es algo único: puesto que hacemos un buen trabajo para series de tiempo¿Por qué no podemos almacenar todo lo que necesitamos dentro de nosotros mismos? No necesitamos Prometeo, nos lo guardamos todo para nosotros. Conectado Grafana y nos controlamos a nosotros mismos. Sin embargo, si casa de clics cae, no veremos por qué, por lo que normalmente no lo hacen.

Grupo grande o muchos pequeños casa de clics

¿Qué es mejor: un grupo grande o muchos ClickHouses pequeños? Enfoque tradicional de DWH Es un gran grupo en el que se asignan circuitos para cada aplicación. Acudimos al administrador de la base de datos, nos dio un diagrama y nos dieron uno:

Pasar a ClickHouse: 3 años después

В casa de clics puedes hacerlo de otra manera. Puedes hacer tuya cada aplicación casa de clics:

Pasar a ClickHouse: 3 años después

Ya no necesitamos al grande y monstruoso. DWH y administradores intratables. Podemos darle a cada aplicación su propia casa de clics, y el desarrollador puede hacerlo él mismo, ya que casa de clics muy fácil de instalar y no requiere administración compleja:

Pasar a ClickHouse: 3 años después

Pero si tenemos mucho casa de clics, y necesita instalarlo con frecuencia, entonces desea automatizar este proceso. Para ello podemos, por ejemplo, utilizar Kubernetes и casa de clics-operador. EN Kubernetes ClickHouse puedes ponerlo "al hacer clic": puedo hacer clic en un botón, ejecutar el manifiesto y la base de datos está lista. Puedo crear inmediatamente un diagrama, comenzar a cargar métricas allí y en 5 minutos tengo un panel listo. Grafana. ¡Es tan simple!

¿El resultado?

Por lo tanto, casa de clics - esto es:

  • Rápidamente. Todo el mundo lo sabe.
  • Sólo. Un poco controvertido, pero creo que es difícil en el entrenamiento, fácil en el combate. Si entiendes como casa de clics funciona, entonces todo es muy sencillo.
  • Universalmente. Es adecuado para diferentes escenarios: DWH, series temporales, almacenamiento de registros. Pero no lo es OLTP base de datos, así que no intente hacer inserciones y lecturas breves allí.
  • Curiosamente. Probablemente el que trabaja con casa de clics, vivió muchos momentos interesantes en el buen y en el mal sentido. Por ejemplo, salió una nueva versión y todo dejó de funcionar. O cuando tuviste problemas con una tarea durante dos días, pero después de hacer una pregunta en el chat de Telegram, la tarea se resolvió en dos minutos. O como en la conferencia sobre el informe de Lesha Milovidov, una captura de pantalla de casa de clics rompió la transmisión HighLoad ++. Este tipo de cosas suceden todo el tiempo y nos complican la vida. casa de clics brillante e interesante!

Puedes ver la presentación. aquí.

Pasar a ClickHouse: 3 años después

La tan esperada reunión de desarrolladores de sistemas de alta carga en HighLoad ++ tendrá lugar los días 9 y 10 de noviembre en Skolkovo. Finalmente, esta será una conferencia fuera de línea (aunque con todas las precauciones), ya que la energía de HighLoad++ no se puede empaquetar en línea.

Para la conferencia, encontramos y mostramos casos sobre las capacidades máximas de la tecnología: HighLoad++ fue, es y será el único lugar donde podrás aprender en dos días cómo funcionan Facebook, Yandex, VKontakte, Google y Amazon.

Habiendo celebrado nuestras reuniones sin interrupción desde 2007, este año nos reuniremos por decimocuarta vez. Durante este tiempo, la conferencia se ha multiplicado por 14; el año pasado, el evento clave de la industria reunió a 10 participantes, 3339 oradores, informes y reuniones, y se desarrollaron 165 temas simultáneamente.
El año pasado circularon 20 autobuses, 5280 litros de té y café, 1650 litros de bebidas de frutas y 10200 botellas de agua. Y otros 2640 kilogramos de comida, 16 platos y 000 tazas. Por cierto, con el dinero recaudado con el papel reciclado plantamos 25 plantones de roble :)

puedes comprar entradas aquí, reciba noticias sobre la conferencia - aquí, y hablamos en todas las redes sociales: Telegram, Facebook, Vkontakte и Twitter.

Fuente: habr.com

Añadir un comentario