{"id":89498,"date":"2020-07-23T13:42:07","date_gmt":"2020-07-23T11:42:07","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/testirovanie-proizvoditelnosti-analiticheskih-zaprosov-v-postgresql-clickhouse-i-clickhousedb_fdw-postgresql"},"modified":"2020-07-23T13:42:07","modified_gmt":"2020-07-23T11:42:07","slug":"testirovanie-proizvoditelnosti-analiticheskih-zaprosov-v-postgresql-clickhouse-i-clickhousedb_fdw-postgresql","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/testirovanie-proizvoditelnosti-analiticheskih-zaprosov-v-postgresql-clickhouse-i-clickhousedb_fdw-postgresql","title":{"rendered":"Pruebas de rendimiento de consultas anal\u00edticas en PostgreSQL, ClickHouse y clickhousedb_fdw (PostgreSQL)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>En este estudio, quise investigar qu\u00e9 mejoras de rendimiento se pueden obtener al usar ClickHouse como fuente de datos en lugar de PostgreSQL. S\u00e9 cu\u00e1les son las ventajas de rendimiento al utilizar ClickHouse. \u00bfSe mantendr\u00e1n estas ventajas si accedo a ClickHouse desde PostgreSQL a trav\u00e9s de un wrapper de datos externo (FDW)? <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Los entornos de bases de datos en estudio son PostgreSQL v11, clickhousedb_fdw y la base de datos ClickHouse. En \u00faltima instancia, desde PostgreSQL v11 ejecutaremos varias consultas SQL, enrutadas a trav\u00e9s de nuestro clickhousedb_fdw a la base de datos ClickHouse. Luego veremos c\u00f3mo se compara el rendimiento de FDW con las mismas consultas ejecutadas en PostgreSQL nativo y ClickHouse nativo.<\/p>\n<p><\/p>\n<h3 id=\"baza-dannyh-clickhouse\">Base de datos Clickhouse<\/h3>\n<p><\/p>\n<p>ClickHouse es un sistema de gesti\u00f3n de bases de datos orientado a columnas de c\u00f3digo abierto que puede alcanzar un rendimiento de 100 a 1000 veces m\u00e1s r\u00e1pido que los enfoques tradicionales de bases de datos, capaz de procesar m\u00e1s de mil millones de filas en menos de un segundo.<\/p>\n<p><\/p>\n<h3 id=\"clickhousedb_fdw\">Clickhousedb_fdw<\/h3>\n<p><\/p>\n<p>clickhousedb_fdw es un wrapper de datos externos para la base de datos ClickHouse, o FDW, es un proyecto de c\u00f3digo abierto de Percona. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Percona-Lab\/clickhousedb_fdw\">Aqu\u00ed hay un enlace al repositorio del proyecto GitHub<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.percona.com\/blog\/2019\/03\/29\/postgresql-access-clickhouse-one-of-the-fastest-column-dbmss-with-clickhousedb_fdw\/\">En marzo escrib\u00ed un blog que te cuenta m\u00e1s sobre nuestro FDW<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Como ver\u00e1s, esto proporciona un FDW para ClickHouse que permite SELECT from e INSERT INTO la base de datos ClickHouse desde un servidor PostgreSQL v11.<\/p>\n<p><\/p>\n<p>FDW admite funciones avanzadas como agregados y uniones. Esto aumenta significativamente el rendimiento al utilizar los recursos del servidor remoto para estas operaciones que consumen muchos recursos.<\/p>\n<p><\/p>\n<h3 id=\"benchmark-environment\">Entorno de referencia<\/h3>\n<p><\/p>\n<ul>\n<li>Servidor Supermicro:\n<ul>\n<li>Intel&reg; Xeon&reg; CPU E5-2683 v3 @ 2.00GHz<\/li>\n<li>2 sockets \/ 28 cores \/ 56 threads<\/li>\n<li>Memoria: 256GB de RAM<\/li>\n<li>Almacenamiento: Samsung SM863 1.9TB Enterprise SSD<\/li>\n<li>Sistema de archivos: ext4\/xfs<\/li>\n<\/ul>\n<\/li>\n<li>OS: Linux smblade01 4.15.0-42-generic #45~16.04.1-Ubuntu<\/li>\n<li>PostgreSQL: versi\u00f3n 11<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"benchmark-tests\">Pruebas de referencia<\/h3>\n<p><\/p>\n<p>En lugar de utilizar alg\u00fan conjunto de datos generado por m\u00e1quina para esta prueba, utilizamos los datos de 'Rendimiento en el tiempo, reportando el tiempo de actividad del operador' de 1987 a 2018. Puedes acceder a los datos <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Percona-Lab\/ontime-airline-performance\/blob\/master\/download.sh\">con nuestro script disponible aqu\u00ed<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>El tama\u00f1o de la base de datos es de 85 GB, proporcionando una tabla de 109 columnas.<\/p>\n<p><\/p>\n<h4 id=\"benchmark-queries\">Consultas de referencia<\/h4>\n<p><\/p>\n<p>Aqu\u00ed est\u00e1n las consultas que utilic\u00e9 para comparar ClickHouse, clickhousedb_fdw y PostgreSQL.<\/p>\n<p><\/p>\n<p><strong>Q#<\/strong><br \/>\n<strong>La consulta contiene agregados y agrupaciones<\/strong><\/p>\n<p>Q1<br \/>\nSELECCIONAR D\u00edaDeLaSemana, contar(*) COMO c DE ontime DONDE A\u00f1o &gt;= 2000 Y A\u00f1o &lt;= 2008 AGRUPAR POR D\u00edaDeLaSemana ORDENAR POR c DESC;<\/p>\n<p>Q2<br \/>\nSELECCIONAR D\u00edaDeLaSemana, contar(*) COMO c DE ontime DONDE DepDelay &gt; 10 Y A\u00f1o &gt;= 2000 Y A\u00f1o &lt;= 2008 AGRUPAR POR D\u00edaDeLaSemana ORDENAR POR c DESC;<\/p>\n<p>Q3<br \/>\nSELECCIONAR Origen, contar(*) COMO c DE ontime DONDE DepDelay &gt; 10 Y A\u00f1o &gt;= 2000 Y A\u00f1o &lt;= 2008 AGRUPAR POR Origen ORDENAR POR c DESC L\u00cdMITE 10;<\/p>\n<p>Q4<br \/>\nSELECCIONAR Transportista, contar(<em>) DE ontime DONDE DepDelay &gt; 10 Y A\u00f1o = 2007 AGRUPAR POR Transportista ORDENAR POR contar(<\/em>) DESC;<\/p>\n<p>Q5<br \/>\nSELECCIONAR a.Transportista, c, c2, c<em>1000\/c2 COMO c3 DE ( SELECCIONAR Transportista, contar(<\/em>) COMO c DE ontime DONDE DepDelay &gt; 10 Y A\u00f1o = 2007 AGRUPAR POR Transportista ) a UNIR INTERNO ( SELECCIONAR Transportista, contar(*) COMO c2 DE ontime DONDE A\u00f1o = 2007 AGRUPAR POR Transportista ) b EN a.Transportista = b.Transportista ORDENAR POR c3 DESC;<\/p>\n<p>Q6<br \/>\nSELECCIONAR a.Transportista, c, c2, c<em>1000\/c2 COMO c3 DE ( SELECCIONAR Transportista, contar(<\/em>) COMO c DE ontime DONDE DepDelay &gt; 10 Y A\u00f1o &gt;= 2000 Y A\u00f1o = 2000 Y A\u00f1o &lt;= 2008 AGRUPAR POR Transportista ) b EN a.Transportista = b.Transportista ORDENAR POR c3 DESC;<\/p>\n<p>Q7<br \/>\nSELECCIONAR Transportista, prom(DepDelay) * 1000 COMO c3 DE ontime DONDE A\u00f1o &gt;= 2000 Y A\u00f1o &lt;= 2008 AGRUPAR POR Transportista;<\/p>\n<p>Q8<br \/>\nSELECCIONAR A\u00f1o, prom(DepDelay) DE ontime AGRUPAR POR A\u00f1o;<\/p>\n<p>Q9<br \/>\nseleccionar A\u00f1o, contar(*) como c1 de ontime agrupar por A\u00f1o;<\/p>\n<p>Q10<br \/>\nSELECCIONAR prom(cnt) DE (SELECCIONAR A\u00f1o, Mes, contar(*) COMO cnt DE ontime DONDE DepDel15 = 1 AGRUPAR POR A\u00f1o, Mes) a;<\/p>\n<p>Q11<br \/>\nseleccionar prom(c1) de (seleccionar A\u00f1o, Mes, contar(*) como c1 de ontime agrupar por A\u00f1o, Mes) a;<\/p>\n<p>Q12<br \/>\nSELECCIONAR NombreCiudadOrigen, NombreCiudadDestino, contar(*) COMO c DE ontime AGRUPAR POR NombreCiudadOrigen, NombreCiudadDestino ORDENAR POR c DESC L\u00cdMITE 10;<\/p>\n<p>Q13<br \/>\nSELECCIONAR NombreCiudadOrigen, contar(*) COMO c DE ontime AGRUPAR POR NombreCiudadOrigen ORDENAR POR c DESC L\u00cdMITE 10;<\/p>\n<p><strong>La consulta contiene uniones<\/strong><\/p>\n<p>Q14<br \/>\nSELECCIONAR a.A\u00f1o, c1\/c2 DE (seleccionar A\u00f1o, contar(<em>)<\/em>1000 COMO c1 DE ontime DONDE DepDelay &gt; 10 AGRUPAR POR A\u00f1o) a UNIR INTERNO (seleccionar A\u00f1o, contar(*) como c2 de ontime agrupar por A\u00f1o) b EN a.A\u00f1o = b.A\u00f1o ORDENAR POR a.A\u00f1o;<\/p>\n<p>Q15<br \/>\nSELECCIONAR a.\u201dA\u00f1o\u201d, c1\/c2 DE (seleccionar \u201cA\u00f1o\u201d, contar(<em>)<\/em>1000 COMO c1 DE fontime DONDE \u201cDepDelay\u201d &gt; 10 AGRUPAR POR \u201cA\u00f1o\u201d) a UNIR INTERNO (seleccionar \u201cA\u00f1o\u201d, contar(*) como c2 de fontime agrupar por \u201cA\u00f1o\u201d) b EN a.\u201dA\u00f1o\u201d = b.\u201dA\u00f1o\u201d;<\/p>\n<p><\/p>\n<p><em>Tabla-1: Consultas utilizadas en la evaluaci\u00f3n comparativa<\/em><\/p>\n<p><\/p>\n<h4 id=\"query-executions\">Ejecuciones de consulta<\/h4>\n<p><\/p>\n<p>Aqu\u00ed est\u00e1n los resultados de cada una de las consultas al ejecutarse en diferentes configuraciones de base de datos: PostgreSQL con \u00edndices y sin ellos, el ClickHouse propio y clickhousedb_fdw. El tiempo se muestra en milisegundos.<\/p>\n<p><\/p>\n<p><strong>Q#<\/strong><br \/>\n<strong>PostgreSQL<\/strong><br \/>\n<strong>PostgreSQL (Indexed)<\/strong><br \/>\n<strong>ClickHouse<\/strong><br \/>\n<strong>clickhousedb_fdw<\/strong><\/p>\n<p>Q1<br \/>\n27920<br \/>\n19634<br \/>\n23<br \/>\n57<\/p>\n<p>Q2<br \/>\n35124<br \/>\n17301<br \/>\n50<br \/>\n80<\/p>\n<p>Q3<br \/>\n34046<br \/>\n15618<br \/>\n67<br \/>\n115<\/p>\n<p>Q4<br \/>\n31632<br \/>\n7667<br \/>\n25<br \/>\n37<\/p>\n<p>Q5<br \/>\n47220<br \/>\n8976<br \/>\n27<br \/>\n60<\/p>\n<p>Q6<br \/>\n58233<br \/>\n24368<br \/>\n55<br \/>\n153<\/p>\n<p>Q7<br \/>\n30566<br \/>\n13256<br \/>\n52<br \/>\n91<\/p>\n<p>Q8<br \/>\n38309<br \/>\n60511<br \/>\n112<br \/>\n179<\/p>\n<p>Q9<br \/>\n20674<br \/>\n37979<br \/>\n31<br \/>\n81<\/p>\n<p>Q10<br \/>\n34990<br \/>\n20102<br \/>\n56<br \/>\n148<\/p>\n<p>Q11<br \/>\n30489<br \/>\n51658<br \/>\n37<br \/>\n155<\/p>\n<p>Q12<br \/>\n39357<br \/>\n33742<br \/>\n186<br \/>\n1333<\/p>\n<p>Q13<br \/>\n29912<br \/>\n30709<br \/>\n101<br \/>\n384<\/p>\n<p>Q14<br \/>\n54126<br \/>\n39913<br \/>\n124<br \/>\n1364212<\/p>\n<p>Q15<br \/>\n97258<br \/>\n30211<br \/>\n245<br \/>\n259<\/p>\n<p><\/p>\n<p><em>Tabla-1: Tiempo tomado para ejecutar las consultas utilizadas en la evaluaci\u00f3n comparativa<\/em><\/p>\n<p><\/p>\n<p>Ver resultados<\/p>\n<p><\/p>\n<p>El gr\u00e1fico muestra el tiempo de ejecuci\u00f3n de la consulta en milisegundos, el eje X muestra el n\u00famero de la consulta de las tablas anteriores, y el eje Y muestra el tiempo de ejecuci\u00f3n en milisegundos. Los resultados de ClickHouse y los datos obtenidos de postgres a trav\u00e9s de clickhousedb_fdw se muestran. De la tabla se puede ver que hay una gran diferencia entre PostgreSQL y ClickHouse, pero una m\u00ednima diferencia entre ClickHouse y clickhousedb_fdw.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pruebas de rendimiento de consultas anal\u00edticas en PostgreSQL, ClickHouse y clickhousedb_fdw (PostgreSQL)\" src=\"\/wp-content\/uploads\/2020\/07\/e084243ea7b327f30de5cb78339d3d3a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Este gr\u00e1fico muestra la diferencia entre ClickhouseDB y clickhousedb_fdw. En la mayor\u00eda de las consultas, los costos de FDW no son tan altos y apenas son significativos, excepto en Q12. Esta consulta incluye uniones y una cl\u00e1usula ORDER BY. Debido a la cl\u00e1usula ORDER BY, GROUP\/BY y ORDER BY no se eliminan hasta ClickHouse.<\/p>\n<p><\/p>\n<p>En la tabla 2, vemos un aumento en el tiempo de las consultas Q12 y Q13. Para reiterar, esto se debe a la cl\u00e1usula ORDER BY. Para confirmar esto, ejecut\u00e9 las consultas Q-14 y Q-15 con y sin la cl\u00e1usula ORDER BY. Sin la cl\u00e1usula ORDER BY, el tiempo de finalizaci\u00f3n es de 259 ms, mientras que con la cl\u00e1usula ORDER BY es de 1364212. Para depurar esta consulta, explico ambas consultas y aqu\u00ed se presentan los resultados de la explicaci\u00f3n.<\/p>\n<p><\/p>\n<p>Q15: Sin cl\u00e1usula ORDER BY<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">bm=# EXPLAIN VERBOSE SELECT a.&quot;Year&quot;, c1\/c2 \n     FROM (SELECT &quot;Year&quot;, count(*)*1000 AS c1 FROM fontime WHERE &quot;DepDelay&quot; &gt; 10 GROUP BY &quot;Year&quot;) a\n     INNER JOIN(SELECT &quot;Year&quot;, count(*) AS c2 FROM fontime GROUP BY &quot;Year&quot;) b ON a.&quot;Year&quot;=b.&quot;Year&quot;;<\/code><\/pre>\n<p><\/p>\n<p>Q15: Consulta sin cl\u00e1usula ORDER BY<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">QUERY PLAN                                                      \nHash Join  (cost=2250.00..128516.06 rows=50000000 width=12)  \nOutput: fontime.&quot;Year&quot;, (((count(*) * 1000)) \/ b.c2)  \nInner Unique: true   Hash Cond: (fontime.&quot;Year&quot; = b.&quot;Year&quot;)  \n-&gt;  Foreign Scan  (cost=1.00..-1.00 rows=100000 width=12)        \nOutput: fontime.&quot;Year&quot;, ((count(*) * 1000))        \nRelations: Aggregate on (fontime)        \nRemote SQL: SELECT &quot;Year&quot;, (count(*) * 1000) FROM &quot;default&quot;.ontime WHERE ((&quot;DepDelay&quot; &gt; 10)) GROUP BY &quot;Year&quot;  \n-&gt;  Hash  (cost=999.00..999.00 rows=100000 width=12)        \nOutput: b.c2, b.&quot;Year&quot;        \n-&gt;  Subquery Scan on b  (cost=1.00..999.00 rows=100000 width=12)              \nOutput: b.c2, b.&quot;Year&quot;              \n-&gt;  Foreign Scan  (cost=1.00..-1.00 rows=100000 width=12)                    \nOutput: fontime_1.&quot;Year&quot;, (count(*))                    \nRelations: Aggregate on (fontime)                    \nRemote SQL: SELECT &quot;Year&quot;, count(*) FROM &quot;default&quot;.ontime GROUP BY &quot;Year&quot;(16 rows)<\/code><\/pre>\n<p><\/p>\n<p>Q14: Consulta con cl\u00e1usula ORDER BY<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">bm=# EXPLAIN VERBOSE SELECT a.&quot;Year&quot;, c1\/c2 FROM(SELECT &quot;Year&quot;, count(*)*1000 AS c1 FROM fontime WHERE &quot;DepDelay&quot; &gt; 10 GROUP BY &quot;Year&quot;) a \n     INNER JOIN(SELECT &quot;Year&quot;, count(*) as c2 FROM fontime GROUP BY &quot;Year&quot;) b  ON a.&quot;Year&quot;= b.&quot;Year&quot; \n     ORDER BY a.&quot;Year&quot;;<\/code><\/pre>\n<p><\/p>\n<p>Q14: Plan de consulta con cl\u00e1usula ORDER BY<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">QUERY PLAN \nMerge Join\u00a0 (cost=2.00..628498.02 rows=50000000 width=12)\u00a0\u00a0 \nOutput: fontime.&quot;Year&quot;, (((count(*) * 1000)) \/ (count(*)))\u00a0\u00a0 \nInner Unique: true\u00a0\u00a0 Merge Cond: (fontime.&quot;Year&quot; = fontime_1.&quot;Year&quot;)\u00a0\u00a0 \n-&gt;\u00a0 GroupAggregate\u00a0 (cost=1.00..499.01 rows=1 width=12)\u00a0 \u00a0 \u00a0 \u00a0 \nOutput: fontime.&quot;Year&quot;, (count(*) * 1000)\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \nGroup Key: fontime.&quot;Year&quot;\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \n-&gt;\u00a0 Foreign Scan on public.fontime\u00a0 (cost=1.00..-1.00 rows=100000 width=4)\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \nRemote SQL: SELECT &quot;Year&quot; FROM &quot;default&quot;.ontime WHERE ((&quot;DepDelay&quot; &gt; 10)) \n            ORDER BY &quot;Year&quot; ASC\u00a0\u00a0 \n-&gt;\u00a0 GroupAggregate\u00a0 (cost=1.00..499.01 rows=1 width=12)\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \nOutput: fontime_1.&quot;Year&quot;, count(*)\u00a0\u00a0 \u00a0 \u00a0 \u00a0 Group Key: fontime_1.&quot;Year&quot;\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \n-&gt;\u00a0 Foreign Scan on public.fontime fontime_1\u00a0 (cost=1.00..-1.00 rows=100000 width=4)\u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \nRemote SQL: SELECT &quot;Year&quot; FROM &quot;default&quot;.ontime ORDER BY &quot;Year&quot; ASC(16 rows)<\/code><\/pre>\n<p><\/p>\n<p>Salida<\/p>\n<p><\/p>\n<p>Los resultados de estos experimentos muestran que ClickHouse ofrece un rendimiento realmente bueno, y clickhousedb_fdw proporciona ventajas de rendimiento de ClickHouse desde PostgreSQL. Aunque hay algunos costos adicionales al utilizar clickhousedb_fdw, estos son insignificantes y comparables al rendimiento logrado al ejecutarse directamente en la base de datos ClickHouse. Esto tambi\u00e9n confirma que fdw en PostgreSQL proporciona resultados excepcionales.<\/p>\n<p><\/p>\n<p>Chat de Telegram sobre ClickHouse <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/clickhouse_ru\">https:\/\/t.me\/clickhouse_ru<\/a><\/noindex><br \/>\nChat de Telegram sobre PostgreSQL <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/pgsql\">https:\/\/t.me\/pgsql<\/a><\/noindex><\/p>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/511992\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u044d\u0442\u043e\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 ClickHouse, \u0430 \u043d\u0435 PostgreSQL. \u042f \u0437\u043d\u0430\u044e, \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 ClickHouse \u044f \u043f\u043e\u043b\u0443\u0447\u0430\u044e. \u0411\u0443\u0434\u0443\u0442 \u043b\u0438 \u044d\u0442\u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b, \u0435\u0441\u043b\u0438 \u044f \u043f\u043e\u043b\u0443\u0447\u0443 \u0434\u043e\u0441\u0442\u0443\u043f \u043a ClickHouse \u0438\u0437 PostgreSQL \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 (FDW)? \u0418\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0430\u043c\u0438 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f PostgreSQL v11, clickhousedb_fdw [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":89499,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-89498","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=\"description\" content=\"\u0412 \u044d\u0442\u043e\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 ClickHouse, \u0430 \u043d\u0435 PostgreSQL.\" \/>\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\/testirovanie-proizvoditelnosti-analiticheskih-zaprosov-v-postgresql-clickhouse-i-clickhousedb_fdw-postgresql\" \/>\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\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 PostgreSQL, ClickHouse \u0438 clickhousedb_fdw (PostgreSQL) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u044d\u0442\u043e\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 ClickHouse, \u0430 \u043d\u0435 PostgreSQL.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/testirovanie-proizvoditelnosti-analiticheskih-zaprosov-v-postgresql-clickhouse-i-clickhousedb_fdw-postgresql\" \/>\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-23T11:42:07+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-23T11:42:07+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\udd47Pruebas de rendimiento de consultas anal\u00edticas en PostgreSQL, ClickHouse y clickhousedb_fdw (PostgreSQL) | ProHoster","description":"En este estudio, quise investigar qu\u00e9 mejoras de rendimiento se pueden obtener utilizando ClickHouse como fuente de datos en lugar de PostgreSQL.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/testirovanie-proizvoditelnosti-analiticheskih-zaprosov-v-postgresql-clickhouse-i-clickhousedb_fdw-postgresql","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\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 PostgreSQL, ClickHouse \u0438 clickhousedb_fdw (PostgreSQL) | ProHoster","og:description":"\u0412 \u044d\u0442\u043e\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 ClickHouse, \u0430 \u043d\u0435 PostgreSQL.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/testirovanie-proizvoditelnosti-analiticheskih-zaprosov-v-postgresql-clickhouse-i-clickhousedb_fdw-postgresql","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-23T11:42:07+00:00","article:modified_time":"2020-07-23T11:42:07+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"89498","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:10:17","updated":"2022-10-10 22:45:45","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\/89498","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=89498"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/89498\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/89499"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=89498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=89498"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=89498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}