{"id":89878,"date":"2020-07-27T01:42:42","date_gmt":"2020-07-26T23:42:42","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g"},"modified":"2020-07-27T01:42:42","modified_gmt":"2020-07-26T23:42:42","slug":"teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g","title":{"rendered":"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/b46b964324a3311157d5df737526b1d1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A pesar de que los datos est\u00e1n presentes en casi todas partes, las bases de datos anal\u00edticas siguen siendo bastante ex\u00f3ticas. Se conocen poco y se utilizan a\u00fan peor. Muchos siguen \"comiendo un cactus\" con MySQL o PostgreSQL, que est\u00e1n dise\u00f1ados para otros escenarios, sufriendo con NoSQL o pagando de m\u00e1s por soluciones comerciales. ClickHouse cambia las reglas del juego y reduce significativamente la barrera de entrada al mundo de los SGBD anal\u00edticos.<\/p>\n<p><\/p>\n<p>Este es un informe de la BackEnd Conf 2018 y ha sido publicado con el permiso del ponente.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"9MwKE30aUPs\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/9MwKE30aUPs\/hqdefault.jpg\" alt=\"Reproducir video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6c55b639d9703f460d99e0b0b1194507.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u00bfQui\u00e9n soy y por qu\u00e9 hablo de ClickHouse? Soy el director de desarrollo en LifeStreet, que utiliza ClickHouse. Adem\u00e1s, soy el fundador de Altinity. Este es un socio de Yandex que promueve ClickHouse y ayuda a Yandex a hacer que ClickHouse sea m\u00e1s exitoso. Tambi\u00e9n estoy dispuesto a compartir conocimientos sobre ClickHouse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/36af6acba62271f7aa19dda2eb470870.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y no, no soy hermano de Petya Zaitsev. A menudo me preguntan sobre esto. No, no somos hermanos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6ca605f97619a1373bb8a92f88d480d5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00abEs bien sabido\u00bb que ClickHouse:<\/p>\n<p><\/p>\n<ul>\n<li>Es muy r\u00e1pido,<\/li>\n<li>Es muy conveniente, <\/li>\n<li>Se utiliza en Yandex. <\/li>\n<\/ul>\n<p><\/p>\n<p>Es menos conocido en qu\u00e9 empresas y c\u00f3mo se utiliza. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/c097b003bf8ea13b8a3bb765270e99c8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Les contar\u00e9 para qu\u00e9, d\u00f3nde y c\u00f3mo se utiliza ClickHouse, adem\u00e1s de en Yandex. <\/p>\n<p><\/p>\n<p>Les hablar\u00e9 sobre c\u00f3mo se abordan tareas espec\u00edficas utilizando ClickHouse en diferentes empresas, qu\u00e9 herramientas de ClickHouse pueden usar para sus tareas, y c\u00f3mo han sido utilizadas en diversas compa\u00f1\u00edas.<\/p>\n<p><\/p>\n<p>He seleccionado tres ejemplos que muestran ClickHouse desde diferentes perspectivas. Creo que ser\u00e1n interesantes.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d3cab92ceccd6c7d01ca1f28b028803f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Primera pregunta: \u00ab\u00bfPara qu\u00e9 sirve ClickHouse?\u00bb. A primera vista, la pregunta parece bastante obvia, pero hay m\u00e1s de una respuesta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/1a4e14cc041a3c01ad0fd2a305aeeab0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>La primera respuesta es por el rendimiento. ClickHouse es muy r\u00e1pido. La anal\u00edtica en ClickHouse tambi\u00e9n es muy r\u00e1pida. A menudo se puede utilizar donde algo m\u00e1s funciona muy lentamente o muy mal. <\/li>\n<li>La segunda respuesta es el costo. Y, sobre todo, el costo de escalado. Por ejemplo, Vertica es una base de datos completamente excelente. Funciona muy bien si no tiene muchos terabytes de datos. Pero cuando se trata de cientos de terabytes o petabytes, el costo de la licencia y el soporte puede ser bastante significativo. Y eso es caro. En cambio, ClickHouse es gratuito. <\/li>\n<li>La tercera respuesta es el costo operativo. Este enfoque es un poco diferente. RedShift es un excelente an\u00e1logo. En RedShift se puede implementar una soluci\u00f3n muy r\u00e1pidamente. Funcionar\u00e1 bien, pero cada hora, cada d\u00eda y cada mes tendr\u00e9is que pagar a Amazon un precio bastante elevado, ya que es un servicio considerablemente caro. Google BigQuery tambi\u00e9n. Aquellos que lo han usado saben que se pueden lanzar varias consultas y recibir sorpresas en la factura de cientos de d\u00f3lares. <\/li>\n<\/ul>\n<p><\/p>\n<p>En ClickHouse no hay esos problemas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/3084a8bd9271f14726d73989946816c5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfD\u00f3nde se utiliza ClickHouse actualmente? Adem\u00e1s de Yandex, ClickHouse se usa en una variedad de negocios y empresas. <\/p>\n<p><\/p>\n<ul>\n<li>En primer lugar, es la anal\u00edtica de aplicaciones web, es decir, es un caso de uso que proviene de Yandex.<\/li>\n<li>Muchas compa\u00f1\u00edas de AdTech utilizan ClickHouse. <\/li>\n<li>Numerosas empresas que necesitan analizar registros operativos de diversas fuentes.<\/li>\n<li>Algunas empresas utilizan ClickHouse para monitorear registros de seguridad. Los cargan en ClickHouse, generan informes y obtienen los resultados que necesitan.<\/li>\n<li>Las empresas comienzan a utilizarlo en an\u00e1lisis financiero, es decir, poco a poco, grandes negocios tambi\u00e9n se est\u00e1n acercando a ClickHouse. <\/li>\n<li>CloudFlare. Si alguien est\u00e1 al tanto de ClickHouse, seguramente ha escuchado el nombre de esta empresa. Es uno de los contribuyentes m\u00e1s significativos de la comunidad. Y tienen una instalaci\u00f3n de ClickHouse muy seria. Por ejemplo, han desarrollado el Motor Kafka para ClickHouse. <\/li>\n<li>Las empresas de telecomunicaciones han comenzado a usarlo. Varias empresas utilizan ClickHouse ya sea como prueba de concepto o en producci\u00f3n.<\/li>\n<li>Una empresa utiliza ClickHouse para monitorear procesos de producci\u00f3n. Prueban circuitos, registran un mont\u00f3n de par\u00e1metros, alrededor de 2000 caracter\u00edsticas. Luego analizan si la partida es buena o mala.<\/li>\n<li>An\u00e1lisis de blockchain. Existe una empresa rusa llamada Bloxy.info que analiza la red de Ethereum. Tambi\u00e9n lo hicieron utilizando ClickHouse. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/8a0c1924a20ed2d15cd0f959e9b3e499.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De hecho, el tama\u00f1o no importa. Hay muchas empresas que utilizan un peque\u00f1o servidor. Y eso les permite resolver sus problemas. Y a\u00fan m\u00e1s empresas utilizan grandes cl\u00fasteres de muchos <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/es\/server\/\"   title=\"servidores\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1513\">servidores<\/a> o decenas de servidores. <\/p>\n<p><\/p>\n<p>Y si miramos los r\u00e9cords, entonces:<\/p>\n<p><\/p>\n<ul>\n<li>Yandex: m\u00e1s de 500 servidores, guardan 25 mil millones de registros al d\u00eda.<\/li>\n<li>LifeStreet: 60 servidores, aproximadamente 75 mil millones de registros al d\u00eda. Menos servidores, m\u00e1s registros que en Yandex. <\/li>\n<li>CloudFlare: 36 servidores, almacenan 200 mil millones de registros al d\u00eda. Tienen a\u00fan menos servidores y almacenan a\u00fan m\u00e1s datos. <\/li>\n<li>Bloomberg: 102 <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/es\/server\/dts-los-angeles\/\"   title=\"servidores\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3643\">servidores<\/a>, aproximadamente un bill\u00f3n de registros al d\u00eda. R\u00e9cord en registros.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/49194030b6586221cb17029889ce33da.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Geogr\u00e1ficamente, esto tambi\u00e9n es mucho. Este mapa muestra el heatmap de d\u00f3nde se utiliza ClickHouse en el mundo. Rusia, China y Estados Unidos destacan de manera brillante. Hay pocos pa\u00edses europeos. Se pueden identificar 4 cl\u00fasteres.<\/p>\n<p><\/p>\n<p>Este es un an\u00e1lisis comparativo, aqu\u00ed no hay que buscar cifras absolutas. Este an\u00e1lisis se basa en los visitantes que leen material en ingl\u00e9s en el sitio de Altinity, porque no hay contenido en ruso. Rusia, Ucrania y Bielorrusia, es decir, la parte de la comunidad de habla rusa, son los usuarios m\u00e1s numerosos. Luego est\u00e1n Estados Unidos y Canad\u00e1. China est\u00e1 alcanzando muy r\u00e1pidamente. Hace seis meses, casi no hab\u00eda usuarios de China; ahora, China ya ha superado a Europa y sigue creciendo. La vieja Europa tampoco se queda atr\u00e1s, y curiosamente, el l\u00edder en el uso de ClickHouse es Francia. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/3a8305c51b1bd62f3467b795402df4ed.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>\u00bfPor qu\u00e9 cuento todo esto? Para mostrar que ClickHouse se est\u00e1 convirtiendo en una soluci\u00f3n est\u00e1ndar para el an\u00e1lisis de big data y ya se est\u00e1 utilizando en muchos lugares.<\/strong> Si lo est\u00e1s usando, est\u00e1s en la tendencia correcta. Si a\u00fan no lo usas, no temas quedarte solo y que nadie te ayude, porque ya muchos est\u00e1n trabajando con esto.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6aa635f3a35034d3af837c78b2c8fe60.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Estos son ejemplos de uso real de ClickHouse en varias empresas. <\/p>\n<p><\/p>\n<ul>\n<li>El primer ejemplo es una red publicitaria: migraci\u00f3n de Vertica a ClickHouse. S\u00e9 de varias empresas que han cambiado de Vertica o est\u00e1n en proceso de hacerlo. <\/li>\n<li>El segundo ejemplo es un almac\u00e9n de transacciones en ClickHouse. Este ejemplo se basa en antipatr\u00f3n. Todo lo que no se debe hacer en ClickHouse seg\u00fan los consejos de los desarrolladores, se ha hecho aqu\u00ed. Y aun as\u00ed, se ha hecho de tal manera que funciona. Y funciona mucho mejor que una soluci\u00f3n transaccional t\u00edpica. <\/li>\n<li>El tercer ejemplo son los c\u00e1lculos distribuidos en ClickHouse. Hubo preguntas sobre c\u00f3mo se puede integrar ClickHouse en el ecosistema de Hadoop. Mostrar\u00e9 un ejemplo de c\u00f3mo una empresa desarroll\u00f3 algo similar a un contenedor de map reduce en ClickHouse, supervisando la localizaci\u00f3n de datos, etc., para resolver una tarea muy no trivial. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/e08ab5418500599f08d40324ccdfbcd0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>LifeStreet \u2013 Es una empresa de Ad Tech que tiene todas las tecnolog\u00edas asociadas con la red publicitaria. <\/li>\n<li>Se dedica a la optimizaci\u00f3n de anuncios, pujas program\u00e1ticas. <\/li>\n<li>Mucho datos: alrededor de 10 mil millones de eventos al d\u00eda. Adem\u00e1s, estos eventos pueden dividirse en varios subtipo de eventos.<\/li>\n<li>Muchos clientes utilizan estos datos, y no solo personas, sino muchas m\u00e1s: son varios algoritmos que se dedican a la oferta program\u00e1tica. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/2da99b53eb25f675a2431027f86db934.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>La compa\u00f1\u00eda ha recorrido un largo y dif\u00edcil camino. Habl\u00e9 de ello en HighLoad. Primero, LifeStreet pas\u00f3 de MySQL (con una breve parada en Oracle) a Vertica. Se puede encontrar una historia sobre esto. <\/p>\n<p><\/p>\n<p>Y todo iba muy bien, pero pronto se hizo evidente que los datos estaban creciendo y Vertica resultaba caro. Por ello, se buscaban diversas alternativas. Algunas de ellas se mencionan aqu\u00ed. De hecho, realizamos pruebas de concepto o pruebas de rendimiento en casi todas las bases de datos que estaban disponibles en el mercado entre 2013 y 2016 y que m\u00e1s o menos cumpl\u00edan con la funcionalidad. Tambi\u00e9n habl\u00e9 de algunas de ellas en HighLoad.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/4bebd2f43892cbef9249ddded1b8a70a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>La tarea era migrar de Vertica en primer lugar, porque los datos estaban creciendo. Y crecieron exponencialmente durante varios a\u00f1os. Luego se estabilizaron, pero aun as\u00ed. Al prever este crecimiento, y las demandas del negocio sobre el volumen de datos que se necesitaban para realizar alguna anal\u00edtica, estaba claro que pronto se hablar\u00eda de petabytes. Y pagar por petabytes ya es muy caro, as\u00ed que se busc\u00f3 una alternativa a la que migrar. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f170a4307168e8560122966eab85c24e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfA d\u00f3nde migrar? Durante mucho tiempo no estaba claro hacia d\u00f3nde ir, ya que, por un lado, existen bases de datos comerciales que parecen funcionar bien. Algunas funcionan casi tan bien como Vertica, y otras un poco peor. Pero todas son caras, no se pod\u00eda encontrar nada m\u00e1s barato y mejor. <\/p>\n<p><\/p>\n<p>Por otro lado, existen soluciones open source, pero no son muchas, es decir, para anal\u00edtica se pueden contar con los dedos. Y son gratuitas o baratas, pero funcionan lentamente. Adem\u00e1s, a menudo les falta la funcionalidad necesaria y \u00fatil.<\/p>\n<p><\/p>\n<p>Por lo tanto, no hab\u00eda nada que combinara lo bueno de las bases de datos comerciales y todo lo gratuito que existe en open source. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/abbefbf0d9578b554f81579b87213a50.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>No hubo nada hasta que, de repente, Yandex sac\u00f3, como un mago saca un conejo de su sombrero, ClickHouse. Y esta fue una soluci\u00f3n inesperada, a\u00fan se hacen preguntas: \"\u00bfPor qu\u00e9?\", pero aun as\u00ed. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/c88981aace9d5925396ca5171241b7d2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y ya en el verano de 2016 comenzamos a investigar qu\u00e9 es ClickHouse. Y result\u00f3 que a veces puede ser m\u00e1s r\u00e1pido que Vertica. Probamos diferentes escenarios con distintas consultas. Y si la consulta utilizaba solo una tabla, es decir, sin ning\u00fan tipo de uni\u00f3n (join), ClickHouse era dos veces m\u00e1s r\u00e1pido que Vertica. <\/p>\n<p><\/p>\n<p>No me molest\u00e9 y revis\u00e9 las pruebas de Yandex recientemente. All\u00ed tambi\u00e9n sucede lo mismo: ClickHouse es dos veces m\u00e1s r\u00e1pido que Vertica, por lo que a menudo hablan de ello. <\/p>\n<p><\/p>\n<p>Pero si hay uniones (join) en las consultas, la situaci\u00f3n no es tan clara. Y ClickHouse puede ser hasta dos veces m\u00e1s lento que Vertica. Sin embargo, si se ajusta un poco la consulta y se reescribe, entonces son aproximadamente iguales. No est\u00e1 mal. Y es gratuito. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/188bf56b72123175a18d2cb97d989a47.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>As\u00ed que, tras obtener los resultados de las pruebas y mir\u00e1ndolo desde diferentes perspectivas, LifeStreet opt\u00f3 por ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/1183b9b7681916686c52786fc95ccb45.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Esto fue en el a\u00f1o 16, lo recuerdo. Era como el chiste sobre los ratones que lloraban y se pinchaban, pero segu\u00edan comiendo el cactus. Se habl\u00f3 de ello en detalle, hay un video al respecto, etc. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/993052ed83dc295c3777e614c7703456.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Por eso no voy a entrar en detalle sobre esto, solo hablar\u00e9 de los resultados y de algunas cosas interesantes que no mencion\u00e9 entonces. <\/p>\n<p><\/p>\n<p>Los resultados son los siguientes:<\/p>\n<p><\/p>\n<ul>\n<li>La migraci\u00f3n fue exitosa y el sistema ya lleva m\u00e1s de un a\u00f1o funcionando en producci\u00f3n. <\/li>\n<li>El rendimiento y la flexibilidad han aumentado. De los 10 mil millones de registros que pod\u00edamos almacenar por d\u00eda, y eso solo por poco tiempo, ahora LifeStreet almacena 75 mil millones de registros al d\u00eda y puede hacerlo durante 3 meses o m\u00e1s. Si se calcula en picos, son hasta un mill\u00f3n de eventos por segundo que se guardan. M\u00e1s de un mill\u00f3n de consultas SQL llegan a este sistema cada d\u00eda, principalmente de diferentes robots. <\/li>\n<li>A pesar de que para ClickHouse se utilizaron m\u00e1s servidores que para Vertica, hubo ahorro en el hardware, porque en Vertica se utilizaban discos SAS bastante caros. En ClickHouse se utilizaron discos SATA. \u00bfY por qu\u00e9? Porque en Vertica el insert es s\u00edncrono. Y la sincronizaci\u00f3n requiere que los discos no se ralenticen demasiado, as\u00ed como que la red tampoco lo haga, es decir, es una operaci\u00f3n bastante costosa. En ClickHouse, en cambio, el insert es as\u00edncrono. Adem\u00e1s, se puede escribir todo localmente siempre, no hay costos adicionales, por lo que los datos en ClickHouse se pueden insertar mucho m\u00e1s r\u00e1pido que en Vertica, incluso en discos que no son los m\u00e1s r\u00e1pidos. Y en lectura es aproximadamente igual. La lectura en SATA, si est\u00e1n en RAID, es bastante r\u00e1pida. <\/li>\n<li>No est\u00e1n limitados por licencia, es decir, 3 petabytes de datos en 60 servidores (20 servidores son una r\u00e9plica) y 6 billones de registros en hechos y agregados. Nada parecido pod\u00eda permitirse en Vertica. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f461cdc12917ee655655dd7eb9c32bb2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ahora paso a cuestiones pr\u00e1cticas en este ejemplo.<\/p>\n<p><\/p>\n<ul>\n<li>El primero es un esquema eficiente. Del esquema depende mucho. <\/li>\n<li>El segundo es la generaci\u00f3n de SQL eficiente.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/e7dc2a217e77c8794ff6e8a754e78c85.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Una consulta OLAP t\u00edpica es un select. Parte de las columnas va en group by, parte de las columnas va en funciones agregadas. Hay un where, que se puede presentar como un corte del cubo. Todo el group by se puede ver como una proyecci\u00f3n. Por ello se llama an\u00e1lisis de datos multidimensional. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/a03a2d7fd28905ae83183346f0c673e2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y a menudo esto se modela en forma de esquema estrella, donde hay un hecho central y caracter\u00edsticas de este hecho a los lados, en los rayos. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d9671af4b39cc83e1ae49e6fd75d0e02.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y desde el punto de vista del dise\u00f1o f\u00edsico, de c\u00f3mo se adapta a la tabla, por lo general se hace una representaci\u00f3n normalizada. Puedes desnormalizar, pero es costoso en cuanto a disco y no muy eficiente en las consultas. Por lo tanto, normalmente se hace una representaci\u00f3n normalizada, es decir, una tabla de hechos y muchas tablas de dimensiones. <\/p>\n<p><\/p>\n<p>Pero en ClickHouse esto funciona mal. Hay dos razones: <\/p>\n<p><\/p>\n<ul>\n<li>La primera es que en ClickHouse no hay muy buenos joins, es decir, los joins existen, pero son deficientes. Por ahora son deficientes. <\/li>\n<li>La segunda es que las tablas no se actualizan. Normalmente en estas tablitas, que est\u00e1n alrededor del esquema estrella, es necesario cambiar algo. Por ejemplo, el nombre del cliente, el nombre de la empresa, etc. Y eso no funciona. <\/li>\n<\/ul>\n<p><\/p>\n<p>Y hay una salida en ClickHouse. De hecho, hay dos: <\/p>\n<p><\/p>\n<ul>\n<li>La primera es el uso de diccionarios. Los Diccionarios Externos son lo que ayudan a resolver en un 99 % el problema con el esquema estrella, con las actualizaciones y dem\u00e1s. <\/li>\n<li>La segunda es el uso de arreglos. Los arreglos tambi\u00e9n ayudan a deshacerse de los joins y de los problemas de normalizaci\u00f3n. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/775972cc412651600799173407384492.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>No se necesita un join. <\/li>\n<li>Actualizables. Desde marzo de 2018 apareci\u00f3 una capacidad no documentada (no la encontrar\u00e1s en la documentaci\u00f3n) para actualizar diccionarios parcialmente, es decir, aquellas entradas que han cambiado. Pr\u00e1cticamente, esto es como una tabla.<\/li>\n<li>Siempre en memoria, por lo que los joins con el diccionario funcionan m\u00e1s r\u00e1pido que si fuera una tabla, que est\u00e1 en disco y no es seguro que est\u00e9 en cach\u00e9, lo m\u00e1s probable es que no. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f73176a650b6d885011e3265c2af2fc3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Tampoco se necesita un join.<\/li>\n<li>Es una representaci\u00f3n compacta de una a muchos. <\/li>\n<li>Y en mi opini\u00f3n, los arreglos est\u00e1n hechos para frikis. Son funciones lambda y dem\u00e1s. <\/li>\n<\/ul>\n<p><\/p>\n<p>Esto no es una exageraci\u00f3n. Es una funcionalidad muy potente que permite hacer muchas cosas de manera simple y elegante. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/5d813952ca8f3da7a74c6f2a15d80a9b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ejemplos t\u00edpicos que ayudan a resolver arreglos. Estos ejemplos son sencillos y bastante ilustrativos:<\/p>\n<p><\/p>\n<ul>\n<li>B\u00fasqueda por etiquetas. Si tienes hashtags y quieres encontrar algunas entradas por hashtag. <\/li>\n<li>B\u00fasqueda por pares clave-valor. Tambi\u00e9n hay algunos atributos con valores. <\/li>\n<li>Almacenamiento de listas de claves que necesitas traducir en algo diferente.<\/li>\n<\/ul>\n<p><\/p>\n<p>Todas estas tareas se pueden resolver sin arreglos. Se pueden colocar las etiquetas en una l\u00ednea y seleccionar con una expresi\u00f3n regular o en una tabla separada, pero entonces tendr\u00e1s que hacer uniones (join).<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/dbbf90eee098c4564206532f24156823.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y en ClickHouse no necesitas hacer nada, solo describir un arreglo string para los hashtags o hacer una estructura anidada para sistemas tipo clave-valor.<\/p>\n<p><\/p>\n<p>Una estructura anidada puede no ser el nombre m\u00e1s afortunado. Son dos arreglos que tienen una parte com\u00fan en el nombre y algunas caracter\u00edsticas relacionadas. <\/p>\n<p><\/p>\n<p>Y buscar por etiqueta es muy sencillo. Hay una funci\u00f3n <code>has<\/code>, que verifica si hay un elemento en el arreglo. Eso es todo, encontramos todas las entradas que pertenecen a nuestra conferencia.<\/p>\n<p><\/p>\n<p>La b\u00fasqueda por subid es un poco m\u00e1s complicada. Primero debemos encontrar el \u00edndice de la clave y luego obtener el elemento con ese \u00edndice y verificar que el valor sea el que necesitamos. Sin embargo, sigue siendo muy simple y compacto.<\/p>\n<p><\/p>\n<p>La expresi\u00f3n regular que te gustar\u00eda escribir si tuvieras todo eso almacenado en una l\u00ednea ser\u00eda, por un lado, torpe. Y, por otro lado, funcionar\u00eda mucho m\u00e1s lento que dos arreglos. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/17664c3121b2b0d33188adbfaa653d4e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Otro ejemplo. Tienes un arreglo en el que almacenas IDs. Y puedes traducirlos a nombres. La funci\u00f3n <code>arrayMap<\/code>. Es una funci\u00f3n lambda t\u00edpica. Pasas expresiones lambda a ella. Y extrae el valor del nombre para cada ID del diccionario.<\/p>\n<p><\/p>\n<p>De manera similar se puede hacer la b\u00fasqueda. Se pasa una funci\u00f3n predicado que verifica a qu\u00e9 cumplen los elementos. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/146917b71a35d38a550cd9accf6ab2f7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Estas cosas simplifican mucho el esquema y resuelven un mont\u00f3n de problemas. <\/p>\n<p><\/p>\n<p>Pero el siguiente problema con el que nos encontramos y del que me gustar\u00eda hablar, son las consultas eficientes. <\/p>\n<p><\/p>\n<ul>\n<li>En ClickHouse no hay un planificador de consultas. No hay ninguno. <\/li>\n<li>Sin embargo, las consultas complejas a\u00fan necesitan ser planificadas. \u00bfEn qu\u00e9 casos? <\/li>\n<li>Si hay m\u00faltiples joins en la consulta que se envuelven en subconsultas. Y el orden en que se ejecutan es importante. <\/li>\n<li>Y lo segundo, si la consulta es distribuida. Porque en una consulta distribuida, solo la subconsulta m\u00e1s interna se realiza de manera distribuida, y todo lo dem\u00e1s se env\u00eda a un solo servidor al que te conectaste y se ejecuta all\u00ed. Por lo tanto, si tienes consultas distribuidas con muchos joins, debes elegir el orden. <\/li>\n<\/ul>\n<p><\/p>\n<p>Y incluso en casos m\u00e1s simples, a veces es necesario que el planificador trabaje y reescribir las consultas un poco. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/217d422b429e8b4bc13abbf0efdf6be1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aqu\u00ed hay un ejemplo. En la parte izquierda, la consulta que muestra las 5 principales pa\u00edses. Y se ejecuta en 2,5 segundos, creo. Y en la parte derecha, la misma consulta, pero reescrita un poco. En lugar de agrupar por cadena, comenzamos a agrupar por clave (int). Y eso es m\u00e1s r\u00e1pido. Luego conectamos un diccionario al resultado. En lugar de 2,5 segundos, la consulta se ejecuta en 1,5 segundos. Eso es bueno. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f19fb7d7f0397a3b38b2a3bd179c156b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un ejemplo similar con la reescritura de filtros. Aqu\u00ed est\u00e1 la consulta sobre Rusia. Se ejecuta en 5 segundos. Si la reescribimos de manera que comparemos nuevamente no por cadena, sino por n\u00fameros con alg\u00fan conjunto de claves que pertenezcan a Rusia, ser\u00e1 mucho m\u00e1s r\u00e1pido. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/0c1dd1f317133d1d106ffef85f337079.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hay muchos trucos como esos. Y permiten acelerar significativamente las consultas que cre\u00edas que ya estaban funcionando r\u00e1pido, o, por el contrario, que funcionaban lentamente. Se pueden hacer a\u00fan m\u00e1s r\u00e1pidas.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/25b132790b03f239e38237af5e92ab63.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>M\u00e1ximo rendimiento en modo distribuido. <\/li>\n<li>Ordenaci\u00f3n por tipos m\u00ednimos, como lo hice con ints. <\/li>\n<li>Si hay algunos joins, diccionarios, es mejor hacerlos en \u00faltimo lugar, cuando ya tengas los datos al menos parcialmente agrupados, entonces la operaci\u00f3n de join o la llamada al diccionario se har\u00e1 menos veces y eso ser\u00e1 m\u00e1s r\u00e1pido. <\/li>\n<li>Reemplazo de filtros. <\/li>\n<\/ul>\n<p><\/p>\n<p>Hay otras t\u00e9cnicas, no solo las que he demostrado. Y todas ellas pueden a veces acelerar significativamente la ejecuci\u00f3n de las consultas.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/175832796bee525909d8875bd723a881.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pasemos al siguiente ejemplo. La empresa X de EE. UU. \u00bfQu\u00e9 hace? <\/p>\n<p><\/p>\n<p>Hubo una tarea: <\/p>\n<p><\/p>\n<ul>\n<li>Vinculaci\u00f3n offline de transacciones publicitarias. <\/li>\n<li>Modelado de diferentes modelos de vinculaci\u00f3n. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/0136b71a1205512d86f13e86761146f4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfEn qu\u00e9 consiste el escenario?<\/p>\n<p><\/p>\n<p>Un visitante habitual accede al sitio, por ejemplo, 20 veces al mes desde diferentes anuncios o simplemente llega a veces sin ning\u00fan anuncio, porque recuerda este sitio. Mira algunos productos, los a\u00f1ade al carrito y los quita del carrito. Y, al final, compra algo. <\/p>\n<p><\/p>\n<p>Preguntas razonables: \"\u00bfA qui\u00e9n se le debe pagar por la publicidad, si es necesario?\" y \"\u00bfQu\u00e9 anuncio le influy\u00f3, si es que le influy\u00f3?\" Es decir, \u00bfpor qu\u00e9 compr\u00f3 y c\u00f3mo hacer para que personas que se parezcan a esta persona tambi\u00e9n compren?<\/p>\n<p><\/p>\n<p>Para resolver esta tarea, es necesario vincular los eventos que ocurren en el sitio web de la manera correcta, es decir, establecer alguna relaci\u00f3n entre ellos. Luego, se env\u00edan para an\u00e1lisis a DWH. Y sobre la base de este an\u00e1lisis, se construyen modelos de a qui\u00e9n y qu\u00e9 publicidad mostrar.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/e53ec81ce89150697d0eca4d72886638.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Una transacci\u00f3n publicitaria es un conjunto de eventos relacionados del usuario que comienzan con la visualizaci\u00f3n de un anuncio, luego ocurre algo, puede haber una compra, y luego pueden haber compras dentro de la compra. Por ejemplo, si se trata de una aplicaci\u00f3n m\u00f3vil o un juego m\u00f3vil, generalmente la instalaci\u00f3n de la aplicaci\u00f3n es gratuita, pero si se realiza algo m\u00e1s, pueden requerirse fondos. Y cuanto m\u00e1s gaste una persona en la aplicaci\u00f3n, m\u00e1s valiosa es. Pero para esto, todo debe estar vinculado. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/a2213613f1ef660409124ef8bcdd4fe3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hay muchos modelos de vinculaci\u00f3n. <\/p>\n<p><\/p>\n<p>Los m\u00e1s populares son:<\/p>\n<p><\/p>\n<ul>\n<li>\u00daltima Interacci\u00f3n, donde interacci\u00f3n es ya sea un clic o una visualizaci\u00f3n.<\/li>\n<li>Primera Interacci\u00f3n, es decir, lo primero que llev\u00f3 a la persona al sitio.<\/li>\n<li>Combinaci\u00f3n Lineal \u2013 a todos por igual. <\/li>\n<li>Desvanecimiento.<\/li>\n<li>Y otros. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/9523307d557e094d981da5b525ed0b59.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfY c\u00f3mo funcionaba todo esto inicialmente? Hab\u00eda un Runtime y Cassandra. Cassandra se usaba como almacenamiento de transacciones, es decir, conten\u00eda todas las transacciones relacionadas. Y cuando llega un evento en Runtime, como la visualizaci\u00f3n de una p\u00e1gina o algo m\u00e1s, se hac\u00eda una consulta en Cassandra: \u00bfhay tal persona o no? Luego se recuperaban las transacciones que le corresponden. Y se produc\u00eda la vinculaci\u00f3n.<\/p>\n<p><\/p>\n<p>Y si tuviste suerte de que en la consulta hay un id de transacci\u00f3n, entonces es f\u00e1cil. Pero normalmente no hay suerte. Por lo tanto, hab\u00eda que encontrar la \u00faltima transacci\u00f3n o la transacci\u00f3n con el \u00faltimo clic, etc. <\/p>\n<p><\/p>\n<p>Y todo funcion\u00f3 muy bien mientras la vinculaci\u00f3n se basaba en el \u00faltimo clic. Porque hay, digamos, 10 millones de clics al d\u00eda, 300 millones al mes, si consideramos la ventana de un mes. Y dado que en Cassandra todo debe estar en memoria para que funcione r\u00e1pidamente, porque se requiere que Runtime responda r\u00e1pidamente, se necesitaban aproximadamente 10-15 servidores. <\/p>\n<p><\/p>\n<p>Pero cuando quisieron vincular la transacci\u00f3n a la visualizaci\u00f3n, no result\u00f3 tan divertido. \u00bfY por qu\u00e9? Se ve que se deben almacenar 30 veces m\u00e1s eventos. Y, por tanto, se necesitan 30 veces m\u00e1s servidores. Y se llega a una cifra astron\u00f3mica. Mantener hasta 500 servidores para hacer la vinculaci\u00f3n, teniendo en cuenta que hay significativamente menos servidores en Runtime, representa una cifra incorrecta. Y empezaron a pensar qu\u00e9 hacer. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/7af35f1ade680232cc83a6887891bc5c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>As\u00ed que se dirigieron a ClickHouse. \u00bfY c\u00f3mo se hace esto en ClickHouse? A primera vista parece un conjunto de antipatr\u00f3n. <\/p>\n<p><\/p>\n<ul>\n<li>La transacci\u00f3n crece, le estamos agregando cada vez m\u00e1s eventos, es decir, es mutable, y ClickHouse no funciona muy bien con objetos mutables. <\/li>\n<li>Cuando un visitante llega, necesitamos extraer sus transacciones por clave, por su id de visita. Tambi\u00e9n se trata de una consulta puntual, y en ClickHouse no se hace as\u00ed. Normalmente en ClickHouse hay grandes \u2026 escaneos, aqu\u00ed necesitamos obtener varios registros. Tambi\u00e9n es un antipatr\u00f3n. <\/li>\n<li>Adem\u00e1s, la transacci\u00f3n estaba en json, pero no quer\u00edan reescribirla, por lo que deseaban almacenar json de manera no estructurada y, si era necesario, extraer algo de \u00e9l. Y eso tambi\u00e9n es un antipatr\u00f3n. <\/li>\n<\/ul>\n<p><\/p>\n<p>Es decir, un conjunto de antipatr\u00f3n. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/2473129a5880ee3172b8ab7bf4afc376.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sin embargo, lograron crear un sistema que funcionaba muy bien. <\/p>\n<p><\/p>\n<p>\u00bfQu\u00e9 se hizo? Apareci\u00f3 ClickHouse, en el que se enviaban registros desglosados en entradas. Se cre\u00f3 un servicio atribuido que recuperaba registros de ClickHouse. Despu\u00e9s, para cada entrada por id de visita, obten\u00eda transacciones que pod\u00edan no haber sido procesadas y, adem\u00e1s, instant\u00e1neas, es decir, transacciones ya vinculadas, espec\u00edficamente el resultado del trabajo anterior. A partir de ah\u00ed, formul\u00f3 la l\u00f3gica, eligi\u00f3 la transacci\u00f3n correcta, conect\u00f3 nuevos eventos. Volvi\u00f3 a escribir en el registro. El registro regres\u00f3 a ClickHouse, es decir, es un sistema c\u00edclico constante. Adem\u00e1s, tambi\u00e9n se enviaba a DWH para ser analizado all\u00ed. <\/p>\n<p><\/p>\n<p>En este formato, no funcionaba muy bien. Para facilitar a ClickHouse al procesar las solicitudes por visit id, agrup\u00e1bamos estas solicitudes en bloques de 1,000 a 2,000 visit id, extrayendo todas las transacciones para 1,000 a 2,000 personas. As\u00ed es como comenz\u00f3 a funcionar correctamente.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d920ce231e6e4b5fd5b27ab28f848aed.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si miramos dentro de ClickHouse, hay tres tablas principales que mantienen todo esto. <\/p>\n<p><\/p>\n<p>La primera tabla es donde se cargan los registros, y estos se cargan pr\u00e1cticamente sin procesamiento.<\/p>\n<p><\/p>\n<p>La segunda tabla. A trav\u00e9s de una vista materializada, se extra\u00edan de esos registros los eventos que a\u00fan no hab\u00edan sido atribu\u00eddos, es decir, no estaban relacionados. Y a trav\u00e9s de otra vista materializada, se extra\u00edan las transacciones para construir un snapshot. Es decir, la vista materializada constru\u00eda un snapshot que representaba el \u00faltimo estado acumulado de la transacci\u00f3n. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/12b0adb691f483923a6c35bb6e4a5017.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aqu\u00ed se presenta un texto en SQL. Quisiera comentar algunas cosas importantes en \u00e9l. <\/p>\n<p><\/p>\n<p>La primera cosa importante es la capacidad de ClickHouse de extraer columnas y campos de JSON. Es decir, ClickHouse tiene algunos m\u00e9todos para trabajar con JSON. Son muy primitivos. <\/p>\n<p><\/p>\n<p>visitParamExtractInt permite extraer atributos de JSON, es decir, la primera coincidencia se activa. De esta manera, se puede extraer el transaction id o el visit id. Eso es uno. <\/p>\n<p><\/p>\n<p>El segundo aspecto es que se utiliza un campo materializado ingenioso. \u00bfQu\u00e9 significa esto? Significa que no puedes insertarlo en la tabla, es decir, no se inserta, se calcula y se almacena al insertarse. Al insertar, ClickHouse hace el trabajo por ti. Y se extrae de JSON lo que necesitar\u00e1s m\u00e1s tarde.<\/p>\n<p><\/p>\n<p>En este caso, la vista materializada es para las filas no procesadas. Y se utiliza la primera tabla con registros pr\u00e1cticamente en bruto. \u00bfY qu\u00e9 hace? Primero, cambia el orden, es decir, el orden ahora es por visit id, porque necesitamos extraer r\u00e1pidamente la transacci\u00f3n de una persona en particular. <\/p>\n<p><\/p>\n<p>La segunda cosa importante es index_granularity. Si has visto MergeTree, normalmente el index_granularity est\u00e1 establecido por defecto en 8,192. \u00bfQu\u00e9 es esto? Este es un par\u00e1metro de la esparsidad del \u00edndice. En ClickHouse, el \u00edndice es esparcido, nunca indexa cada registro. Lo hace cada 8,192. Esto es bueno cuando se requiere contar muchos datos, pero malo cuando se requiere contar pocos, ya que hay un gran overhead. Y si disminuimos la granuralidad del \u00edndice, disminuimos el overhead. No se puede reducir a uno, porque podr\u00eda faltar memoria. El \u00edndice siempre se almacena en la memoria. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/5fe303061977cad64e6c0333b125d595.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y el snapshot utiliza algunas funciones interesantes de ClickHouse.<\/p>\n<p><\/p>\n<p>En primer lugar, est\u00e1 AggregatingMergeTree. En AggregatingMergeTree se almacena argMax, es decir, el estado de la transacci\u00f3n correspondiente a la \u00faltima marca de tiempo. Se generan constantemente nuevas transacciones para este visitante. Y en el estado m\u00e1s reciente de esta transacci\u00f3n hemos agregado un evento y hemos obtenido un nuevo estado. Este nuevamente ha sido registrado en ClickHouse. Y a trav\u00e9s de argMax en esta vista materializada siempre podemos obtener el estado actual.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d1b87301ab5206a36bf035679f79d35a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>El enlace est\u00e1 \"desvinculado\" del Runtime. <\/li>\n<li>Se almacenan y procesan hasta 3 mil millones de transacciones al mes. Esto es un orden de magnitud mayor que en Cassandra, es decir, en un sistema transaccional t\u00edpico. <\/li>\n<li>Un cl\u00faster de 2x5 servidores ClickHouse. 5 servidores y cada servidor tiene una r\u00e9plica. Esto es incluso menos de lo que hab\u00eda en Cassandra para realizar la atribuci\u00f3n basada en clics, y aqu\u00ed tenemos basada en impresiones. Es decir, en lugar de aumentar el n\u00famero de servidores 30 veces, se logr\u00f3 reducir. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/583779fe9e133df519411e2256401eb3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y el \u00faltimo ejemplo es una compa\u00f1\u00eda financiera Y, que analizaba las correlaciones de los cambios en los precios de las acciones. <\/p>\n<p><\/p>\n<p>Y la tarea planteada fue la siguiente:<\/p>\n<p><\/p>\n<ul>\n<li>Hay aproximadamente 5,000 acciones. <\/li>\n<li>Las cotizaciones son conocidas cada 100 milisegundos. <\/li>\n<li>Los datos se acumularon durante 10 a\u00f1os. Al parecer, para algunas empresas m\u00e1s y para otras menos. <\/li>\n<li>En total, aproximadamente 100 mil millones de filas. <\/li>\n<\/ul>\n<p><\/p>\n<p>Y era necesario calcular la correlaci\u00f3n de los cambios. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/b02051e6cadec8c51e7f6e351ef903f9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aqu\u00ed hay dos acciones y sus cotizaciones. Si una sube y la otra tambi\u00e9n, entonces hay una correlaci\u00f3n positiva, es decir, una crece y la otra tambi\u00e9n. Si una sube, como al final del gr\u00e1fico, y la otra baja, entonces hay una correlaci\u00f3n negativa, es decir, cuando una crece, la otra cae. <\/p>\n<p><\/p>\n<p>Analizando estos cambios mutuos, se pueden hacer predicciones en el mercado financiero. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/31329cf7523eef6a167632d281a634ce.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pero la tarea es complicada. \u00bfQu\u00e9 se hace para esto? Tenemos 100 mil millones de registros, que contienen: tiempo, acci\u00f3n y precio. Primero necesitamos calcular 100 mil millones de veces la diferencia en ejecuci\u00f3n del algoritmo de precio. La diferencia en ejecuci\u00f3n es una funci\u00f3n en ClickHouse que calcula la diferencia entre dos filas secuencialmente. <\/p>\n<p><\/p>\n<p>Y despu\u00e9s hay que calcular la correlaci\u00f3n, y la correlaci\u00f3n debe calcularse para cada par. Para 5,000 acciones hay 12.5 millones de pares. Y esto es mucho, es decir, hay que calcular esa funci\u00f3n de correlaci\u00f3n 12.5 veces. <\/p>\n<p><\/p>\n<p>Y si alguien lo olvid\u00f3, x e y son el valor esperado de la muestra. Es decir, no solo hay que calcular ra\u00edces y sumas, sino que dentro de esas sumas hay que hacer otras sumas. Hay que realizar un mont\u00f3n de c\u00e1lculos 12,5 millones de veces, y adem\u00e1s hay que agrupar por horas. Y tenemos muchas horas. Y hay que hacerlo en 60 segundos. Es una broma. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/567a07f586a824c91671820fe21ec305.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ten\u00eda que hacerse de alguna manera, porque todo esto funcionaba muy, muy lento antes de que llegara ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/3eca1af4c3f25ff4b23fce9b84e16659.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Intentaron calcular esto en Hadoop, en Spark, en Greenplum. Y todo era muy lento o costoso. Es decir, se pod\u00eda calcular de alguna manera, pero luego era caro. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/37608c7e87ddb9a7d54854643044c369.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y luego lleg\u00f3 ClickHouse y todo mejor\u00f3 mucho. <\/p>\n<p><\/p>\n<p>Recuerdo, tenemos un problema con la localizaci\u00f3n de los datos, por lo que las correlaciones no se pueden localizar. No podemos sumar parte de los datos en un servidor, parte en otro y calcular; necesitamos tener todos los datos en todas partes. <\/p>\n<p><\/p>\n<p>\u00bfQu\u00e9 hicieron? Inicialmente, los datos estaban localizados. En cada uno de los servidores se almacena la informaci\u00f3n de precios de un conjunto espec\u00edfico de acciones. Y no se cruzan. Por lo tanto, se puede calcular logReturn de manera paralela e independiente; todo esto ocurre de manera paralela y distribuida. <\/p>\n<p><\/p>\n<p>Luego decidieron reducir estos datos sin perder expresividad. Reducirlos usando arrays, es decir, para cada intervalo de tiempo hacer un array de acciones y un array de precios. De esta forma, los datos ocupan mucho menos espacio. Y es m\u00e1s conveniente trabajar con ellos. Son casi operaciones paralelas, es decir, calculamos parcialmente de manera paralela y luego grabamos en el servidor. <\/p>\n<p><\/p>\n<p>Despu\u00e9s de esto, se pueden replicar. La letra 'r' significa que estos datos los hemos replicado. Es decir, en los tres servidores tenemos los mismos datos: esos arrays. <\/p>\n<p><\/p>\n<p>Y luego, con un script especial de este conjunto de 12,5 millones de correlaciones que hay que calcular, se pueden hacer paquetes. Es decir, 2,500 tareas de 5,000 pares de correlaciones. Y esta tarea se calcula en un servidor ClickHouse espec\u00edfico. Todos los datos est\u00e1n all\u00ed, porque los datos son id\u00e9nticos y puede calcularlos de manera secuencial. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/587c6d587a48f2407dd2687f5423d44a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Una vez m\u00e1s, as\u00ed es como se ve. Primero tenemos todos los datos en esta estructura: tiempo, acciones, precio. Luego calculamos logReturn, es decir, los mismos datos, solo que en lugar de precio tenemos logReturn. Despu\u00e9s los transformamos, por lo que obtuvimos tiempo y groupArray por acciones y precios. Los replicamos. Y despu\u00e9s de eso, generamos un mont\u00f3n de tareas y las alimentamos a ClickHouse para que las procesara. Y eso funciona. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/434e7385aebcffcc03d1bd1a2020c8bf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En la prueba de concepto, la tarea era una subtarea, es decir, tomamos menos datos. Y solo en tres servidores.<\/p>\n<p><\/p>\n<p>Los primeros dos pasos: el c\u00e1lculo de Log_return y enmascararlo en arreglos tomaron aproximadamente una hora cada uno. <\/p>\n<p><\/p>\n<p>Pero el c\u00e1lculo de la correlaci\u00f3n tom\u00f3 alrededor de 50 horas. Pero 50 horas es poco, porque antes esto funcionaba durante semanas. Fue un gran \u00e9xito. Y si lo contamos, se procesaban 70 veces por segundo en este cl\u00faster.<\/p>\n<p><\/p>\n<p>Pero lo m\u00e1s importante es que este sistema pr\u00e1cticamente no tiene cuellos de botella, es decir, escala pr\u00e1cticamente de manera lineal. Y eso lo verificaron. Lo escalaron exitosamente. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/5a595a84897e492b49dccfb0f058b1b8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>El esquema correcto es la mitad del \u00e9xito. Y el esquema correcto es utilizar todas las tecnolog\u00edas necesarias de ClickHouse. <\/li>\n<li>Summing\/AggregatingMergeTrees son tecnolog\u00edas que permiten agregar o calcular estados de instant\u00e1neas como un caso particular. Y esto simplifica muchas cosas significativamente. <\/li>\n<li>Las Vistas Materializadas permiten eludir la limitaci\u00f3n de un \u00edndice. Puede que no lo haya explicado con mucha claridad, pero cuando cargamos los registros, los registros crudos estaban en una tabla con un \u00edndice, y en los registros de atributo estaban en otra tabla, es decir, los mismos datos, solo que filtrados, pero el \u00edndice era completamente diferente. Parecen ser los mismos datos, pero con diferentes ordenaciones. Y las Vistas Materializadas permiten, si es necesario, eludir tal limitaci\u00f3n en ClickHouse. <\/li>\n<li>Reduzca la granularidad del \u00edndice para consultas puntuales. <\/li>\n<li>Y distribuye los datos de manera inteligente, intenta maximizar la localizaci\u00f3n de los datos dentro del servidor. Y aseg\u00farate de que las consultas tambi\u00e9n usen la localizaci\u00f3n donde sea posible. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/c0fc1737986e3f18ed1d3c53df9f0252.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Resumiendo esta breve presentaci\u00f3n, se puede decir que ClickHouse ha tomado firmemente el territorio tanto de las bases de datos comerciales como de las bases de datos de c\u00f3digo abierto, es decir, espec\u00edficamente para la anal\u00edtica. Se ha integrado maravillosamente en este panorama. Adem\u00e1s, poco a poco comienza a desplazar a otros, porque cuando tienes ClickHouse, no necesitas InfiniDB. Vertica, tal vez, pronto no ser\u00e1 necesaria si hacen un buen soporte para SQL. \u00a1\u00dasalo!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6e9a65d32eb6de7f9f139a30e7ab0d25.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u2014<em>\u00a1Gracias por la presentaci\u00f3n! \u00a1Es muy interesante! \u00bfHubo alguna comparaci\u00f3n con Apache Phoenix?<\/em><\/p>\n<p><\/p>\n<p>-No, no he escuchado que alguien haya comparado. Nosotros y Yandex tratamos de rastrear todas las comparaciones de ClickHouse con diferentes bases de datos. Porque si de repente algo resulta ser m\u00e1s r\u00e1pido que ClickHouse, Alexey Milovidov no puede dormir por las noches y empieza a acelerarlo r\u00e1pidamente. No he o\u00eddo hablar de tal comparaci\u00f3n. <\/p>\n<p><\/p>\n<ul>\n<li>\n<p><em>(Aleksey Milovidov) Apache Phoenix es un motor SQL sobre HBase. HBase est\u00e1 principalmente destinado a escenarios de trabajo tipo clave-valor. En cada fila puede haber una cantidad arbitraria de columnas con nombres arbitrarios. Esto se puede decir sobre sistemas como HBase, Cassandra. Y no funcionar\u00e1n bien para consultas anal\u00edticas pesadas. O puedes pensar que funcionan bien si no has tenido ninguna experiencia con ClickHouse.<\/em><\/p>\n<p>\n<\/li>\n<li>\n<p>Gracias<\/p>\n<p><\/p>\n<ul>\n<li>\n<p><em>\u00a1Buen d\u00eda! Ya estoy bastante interesado en este tema, porque tengo un subsistema anal\u00edtico. Pero cuando miro ClickHouse, tengo la sensaci\u00f3n de que ClickHouse es muy adecuado para el an\u00e1lisis de eventos, mutable. Y si necesito analizar muchos datos comerciales con un mont\u00f3n de tablas grandes, entonces ClickHouse, por lo que entiendo, no me es muy adecuado, especialmente si est\u00e1n cambiando. \u00bfEs esto correcto o hay ejemplos que puedan refutarlo?<\/em><\/p>\n<p>\n<\/li>\n<li>\n<p>Es correcto. Y esto es cierto para la mayor\u00eda de las bases de datos anal\u00edticas especializadas. Est\u00e1n dise\u00f1adas para manejar una o varias tablas grandes que son mutables y muchas tablas peque\u00f1as que cambian lentamente. Es decir, ClickHouse no es como Oracle, donde puedes almacenar todo y construir consultas muy complejas. Para usar ClickHouse de manera eficiente, es necesario estructurar el esquema de una manera que funcione bien en ClickHouse. Es decir, evitar la sobre-normalizaci\u00f3n, utilizar diccionarios y tratar de hacer menos conexiones largas. Y si se construye el esquema de esta manera, entonces tareas empresariales similares en ClickHouse pueden ser resueltas de manera mucho m\u00e1s eficiente que en una base de datos relacional tradicional. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><em>\u00a1Gracias por la presentaci\u00f3n! Tengo una pregunta sobre el \u00faltimo caso financiero. Ten\u00edan anal\u00edtica. Era necesario comparar c\u00f3mo suben y bajan. Y entiendo que construyeron el sistema espec\u00edficamente para esta anal\u00edtica, \u00bfverdad? Si ma\u00f1ana, supongamos, necesitan alg\u00fan otro informe sobre esos datos, \u00bftendr\u00edan que reconstruir el esquema y cargar los datos nuevamente? Es decir, \u00bfhacer alg\u00fan preprocesamiento para obtener la consulta?<\/em><\/p>\n<p><\/p>\n<p>Por supuesto, este es el uso de ClickHouse para una tarea bastante espec\u00edfica. Anteriormente, esto podr\u00eda haberse resuelto de manera m\u00e1s tradicional dentro de Hadoop. Para Hadoop, esta es una tarea ideal. Pero en Hadoop es muy lento. Y mi objetivo es demostrar que en ClickHouse se pueden resolver tareas que normalmente se manejan con otros medios, pero de manera mucho m\u00e1s eficiente. Est\u00e1 dise\u00f1ado para una tarea espec\u00edfica. Es obvio que si hay una tarea similar, se puede resolver de manera similar. <\/p>\n<p><\/p>\n<p><em>Entiendo. Dijo que se procesaron 50 horas. \u00bfEsto es desde el principio, cuando se cargaron los datos o cuando se obtuvieron los resultados?<\/em><\/p>\n<p><\/p>\n<p>S\u00ed, s\u00ed.<\/p>\n<p><\/p>\n<p><em>Bien, muchas gracias.<\/em><\/p>\n<p><\/p>\n<p>Esto es en un cl\u00faster de 3 servidores. <\/p>\n<p><\/p>\n<p><em>\u00a1Saludos! Gracias por la presentaci\u00f3n. Todo es muy interesante. Quisiera preguntar un poco no sobre la funcionalidad, sino sobre el uso de ClickHouse en t\u00e9rminos de estabilidad. Es decir, \u00bfhan tenido alg\u00fan problema o han tenido que restaurar? \u00bfC\u00f3mo se comporta ClickHouse en esos casos? Y, \u00bfha habido ocasiones en que incluso la r\u00e9plica se cae? Por ejemplo, nosotros hemos tenido el problema con ClickHouse de que, a veces, supera su l\u00edmite y se cae.<\/em><\/p>\n<p><\/p>\n<p>Por supuesto, no existen sistemas perfectos. ClickHouse tambi\u00e9n tiene sus problemas. Pero, \u00bfalguna vez han escuchado que Yandex.Metrica ha dejado de funcionar por mucho tiempo? Probablemente no. Ha estado funcionando de manera confiable desde aproximadamente 2012-2013 en ClickHouse. Tambi\u00e9n puedo hablar de mi experiencia. Nunca hemos tenido fallos totales. Pueden ocurrir algunos problemas parciales, pero nunca han sido tan cr\u00edticos como para afectar seriamente el negocio. Nunca ha pasado. ClickHouse es bastante confiable y no se cae aleatoriamente. No hay de qu\u00e9 preocuparse. No es algo primitivo. Esto ha sido demostrado por muchas empresas. <\/p>\n<p><\/p>\n<p><em>\u00a1Hola! Dijo que es necesario pensar bien en el esquema de datos desde el principio. \u00bfY si eso ya ocurri\u00f3? Mis datos est\u00e1n fluyendo sin parar. Pasan seis meses y me doy cuenta que no se puede seguir as\u00ed, necesito volver a cargar los datos y hacer algo con ellos.<\/em> <\/p>\n<p><\/p>\n<p>Esto depende, por supuesto, de su sistema. Hay varias formas de hacerlo pr\u00e1cticamente sin detenerse. Por ejemplo, puede crear una Vista Materializada, en la que hacer otra estructura de datos, siempre que se pueda mapear de manera clara. Es decir, si permite el mapeo mediante ClickHouse, es decir, extraer ciertas cosas, cambiar la clave primaria, cambiar la partici\u00f3n, entonces se puede hacer una Vista Materializada. All\u00ed puede reescribir sus datos antiguos, los nuevos se escribir\u00e1n autom\u00e1ticamente. Luego simplemente cambiar a usar la Vista Materializada, despu\u00e9s cambiar la escritura y eliminar la tabla antigua. Esta es una forma de hacerlo sin detenerse. <\/p>\n<p><\/p>\n<p><em>Gracias.<\/em><\/p>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/512304\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0435\u0437\u0434\u0435, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0411\u0414 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u043d\u044b. \u0418\u0445 \u043f\u043b\u043e\u0445\u043e \u0437\u043d\u0430\u044e\u0442 \u0438 \u0435\u0449\u0435 \u0445\u0443\u0436\u0435 \u0443\u043c\u0435\u044e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u041c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 &quot;\u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0442\u0443\u0441&quot; \u0441 MySQL \u0438\u043b\u0438 PostgreSQL, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e\u0434 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438, \u043c\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0441 NoSQL \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0437\u0430 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. ClickHouse \u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0433\u0440\u044b \u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":89879,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-89878","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0422\u0435\u043e\u0440\u0438\u044f \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f ClickHouse \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0417\u0430\u0439\u0446\u0435\u0432 (2018\u0433) | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-26T23:42:42+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-26T23:42:42+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Teor\u00eda y pr\u00e1ctica del uso de ClickHouse en aplicaciones reales. Alexander Zaitsev (2018) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0422\u0435\u043e\u0440\u0438\u044f \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f ClickHouse \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0417\u0430\u0439\u0446\u0435\u0432 (2018\u0433) | ProHoster","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-26T23:42:42+00:00","article:modified_time":"2020-07-26T23:42:42+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"89878","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:02:37","updated":"2026-02-22 15:29:33","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/89878","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=89878"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/89878\/revisions"}],"predecessor-version":[{"id":162171,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/89878\/revisions\/162171"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/89879"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=89878"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=89878"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=89878"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}