{"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\/fr\/blog\/administrirovanie\/testirovanie-proizvoditelnosti-analiticheskih-zaprosov-v-postgresql-clickhouse-i-clickhousedb_fdw-postgresql","title":{"rendered":"Tests de performance des requ\u00eates analytiques dans PostgreSQL, ClickHouse et clickhousedb_fdw (PostgreSQL)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Dans cette \u00e9tude, je souhaitais examiner les am\u00e9liorations de performance que l'on peut obtenir en utilisant la source de donn\u00e9es ClickHouse plut\u00f4t que PostgreSQL. Je connais les avantages en termes de performances que j'obtiens en utilisant ClickHouse. Ces avantages seront-ils maintenus si j'acc\u00e8de \u00e0 ClickHouse depuis PostgreSQL gr\u00e2ce \u00e0 un environnement de donn\u00e9es \u00e9tranger (FDW) ? <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Les environnements de bases de donn\u00e9es \u00e9tudi\u00e9s sont PostgreSQL v11, clickhousedb_fdw et la base de donn\u00e9es ClickHouse. Au final, depuis PostgreSQL v11, nous allons ex\u00e9cuter diff\u00e9rentes requ\u00eates SQL, rout\u00e9es \u00e0 travers notre clickhousedb_fdw vers la base de donn\u00e9es ClickHouse. Ensuite, nous verrons comment la performance du FDW se compare \u00e0 celle des m\u00eames requ\u00eates ex\u00e9cut\u00e9es dans le PostgreSQL natif et le ClickHouse natif.<\/p>\n<p><\/p>\n<h3 id=\"baza-dannyh-clickhouse\">Base de donn\u00e9es ClickHouse<\/h3>\n<p><\/p>\n<p>ClickHouse est un syst\u00e8me de gestion de bases de donn\u00e9es orient\u00e9 colonnes, open source, qui peut atteindre des performances de 100 \u00e0 1000 fois sup\u00e9rieures \u00e0 celles des approches traditionnelles des bases de donn\u00e9es, capable de traiter plus d'un milliard de lignes en moins d'une seconde.<\/p>\n<p><\/p>\n<h3 id=\"clickhousedb_fdw\">Clickhousedb_fdw<\/h3>\n<p><\/p>\n<p>clickhousedb_fdw est un environnement de donn\u00e9es \u00e9tranger pour la base de donn\u00e9es ClickHouse, ou FDW, qui est un projet open source de Percona. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Percona-Lab\/clickhousedb_fdw\">Voici le lien vers le d\u00e9p\u00f4t du projet 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 mars, j'ai \u00e9crit un blog qui vous explique davantage notre FDW<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Comme vous le verrez, cela fournit un FDW pour ClickHouse, qui permet de faire SELECT from, et INSERT INTO, la base de donn\u00e9es ClickHouse depuis le serveur PostgreSQL v11.<\/p>\n<p><\/p>\n<p>Le FDW prend en charge des fonctions avanc\u00e9es, telles que l'agr\u00e9gation et les jointures. Cela am\u00e9liore consid\u00e9rablement les performances en utilisant les ressources du serveur distant pour ces op\u00e9rations gourmandes en ressources.<\/p>\n<p><\/p>\n<h3 id=\"benchmark-environment\">Environnement de benchmark<\/h3>\n<p><\/p>\n<ul>\n<li>Serveur Supermicro :\n<ul>\n<li>Intel&reg; Xeon&reg; CPU E5-2683 v3 @ 2,00GHz<\/li>\n<li>2 sockets \/ 28 c\u0153urs \/ 56 threads<\/li>\n<li>M\u00e9moire : 256 Go de RAM<\/li>\n<li>Stockage : SSD d'entreprise Samsung SM863 de 1,9 To<\/li>\n<li>Syst\u00e8me de fichiers : 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 : version 11<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"benchmark-tests\">Tests de benchmark<\/h3>\n<p><\/p>\n<p>Au lieu d'utiliser un jeu de donn\u00e9es g\u00e9n\u00e9r\u00e9 par la machine pour ce test, nous avons utilis\u00e9 les donn\u00e9es \u00ab Performance par temps, rapport\u00e9 sur le temps de fonctionnement de l'op\u00e9rateur \u00bb de 1987 \u00e0 2018. Vous pouvez acc\u00e9der aux donn\u00e9es <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Percona-Lab\/ontime-airline-performance\/blob\/master\/download.sh\">avec notre script disponible ici<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>La taille de la base de donn\u00e9es est de 85 Go, avec une seule table de 109 colonnes.<\/p>\n<p><\/p>\n<h4 id=\"benchmark-queries\">Requ\u00eates de benchmark<\/h4>\n<p><\/p>\n<p>Voici les requ\u00eates que j'ai utilis\u00e9es pour comparer ClickHouse, clickhousedb_fdw et PostgreSQL.<\/p>\n<p><\/p>\n<p><strong>Q#<\/strong><br \/>\n<strong>La requ\u00eate contient des agr\u00e9gats et un groupe par<\/strong><\/p>\n<p>Q1<br \/>\nS\u00c9LECTIONNEZ DayOfWeek, COUNT(*) AS c FROM ontime WHERE Year &gt;= 2000 AND Year &lt;= 2008 GROUP BY DayOfWeek ORDER BY c DESC;<\/p>\n<p>Q2<br \/>\nS\u00c9LECTIONNEZ DayOfWeek, COUNT(*) AS c FROM ontime WHERE DepDelay &gt; 10 AND Year &gt;= 2000 AND Year &lt;= 2008 GROUP BY DayOfWeek ORDER BY c DESC;<\/p>\n<p>Q3<br \/>\nS\u00c9LECTIONNEZ Origin, COUNT(*) AS c FROM ontime WHERE DepDelay &gt; 10 AND Year &gt;= 2000 AND Year &lt;= 2008 GROUP BY Origin ORDER BY c DESC LIMIT 10;<\/p>\n<p>Q4<br \/>\nS\u00c9LECTIONNEZ Carrier, COUNT(<em>) FROM ontime WHERE DepDelay &gt; 10 AND Year = 2007 GROUP BY Carrier ORDER BY COUNT(<\/em>) DESC;<\/p>\n<p>Q5<br \/>\nS\u00c9LECTIONNEZ a.Carrier, c, c2, c<em>1000\/c2 AS c3 FROM ( S\u00c9LECTIONNEZ Carrier, COUNT(<\/em>) AS c FROM ontime WHERE DepDelay &gt; 10 AND Year = 2007 GROUP BY Carrier ) a INNER JOIN ( S\u00c9LECTIONNEZ Carrier, COUNT(*) AS c2 FROM ontime WHERE Year = 2007 GROUP BY Carrier ) b ON a.Carrier = b.Carrier ORDER BY c3 DESC;<\/p>\n<p>Q6<br \/>\nS\u00c9LECTIONNEZ a.Carrier, c, c2, c<em>1000\/c2 AS c3 FROM ( S\u00c9LECTIONNEZ Carrier, COUNT(<\/em>) AS c FROM ontime WHERE DepDelay &gt; 10 AND Year &gt;= 2000 AND Year = 2000 AND Year &lt;= 2008 GROUP BY Carrier ) b ON a.Carrier = b.Carrier ORDER BY c3 DESC;<\/p>\n<p>Q7<br \/>\nS\u00c9LECTIONNEZ Carrier, AVG(DepDelay) * 1000 AS c3 FROM ontime WHERE Year &gt;= 2000 AND Year &lt;= 2008 GROUP BY Carrier;<\/p>\n<p>Q8<br \/>\nS\u00c9LECTIONNEZ Year, AVG(DepDelay) FROM ontime GROUP BY Year;<\/p>\n<p>Q9<br \/>\nS\u00c9LECTIONNEZ Year, COUNT(*) AS c1 FROM ontime GROUP BY Year;<\/p>\n<p>Q10<br \/>\nS\u00c9LECTIONNEZ AVG(cnt) FROM (S\u00c9LECTIONNEZ Year, Month, COUNT(*) AS cnt FROM ontime WHERE DepDel15 = 1 GROUP BY Year, Month) a;<\/p>\n<p>Q11<br \/>\nS\u00c9LECTIONNEZ AVG(c1) FROM (S\u00c9LECTIONNEZ Year, Month, COUNT(*) AS c1 FROM ontime GROUP BY Year, Month) a;<\/p>\n<p>Q12<br \/>\nS\u00c9LECTIONNEZ OriginCityName, DestCityName, COUNT(*) AS c FROM ontime GROUP BY OriginCityName, DestCityName ORDER BY c DESC LIMIT 10;<\/p>\n<p>Q13<br \/>\nS\u00c9LECTIONNEZ OriginCityName, COUNT(*) AS c FROM ontime GROUP BY OriginCityName ORDER BY c DESC LIMIT 10;<\/p>\n<p><strong>La requ\u00eate contient des jointures<\/strong><\/p>\n<p>Q14<br \/>\nS\u00c9LECTIONNEZ a.Year, c1\/c2 FROM ( S\u00c9LECTIONNEZ Year, COUNT(<em>)<\/em>1000 AS c1 FROM ontime WHERE DepDelay &gt; 10 GROUP BY Year) a INNER JOIN (S\u00c9LECTIONNEZ Year, COUNT(*) AS c2 FROM ontime GROUP BY Year) b ON a.Year = b.Year ORDER BY a.Year;<\/p>\n<p>Q15<br \/>\nS\u00c9LECTIONNEZ a.Year, c1\/c2 FROM ( S\u00c9LECTIONNEZ Year, COUNT(<em>)<\/em>1000 AS c1 FROM fontime WHERE DepDelay &gt; 10 GROUP BY Year) a INNER JOIN (S\u00c9LECTIONNEZ Year, COUNT(*) AS c2 FROM fontime GROUP BY Year) b ON a.Year = b.Year;<\/p>\n<p><\/p>\n<p><em>Table-1 : Requ\u00eates utilis\u00e9es dans l'\u00e9valuation<\/em><\/p>\n<p><\/p>\n<h4 id=\"query-executions\">Ex\u00e9cutions de requ\u00eates<\/h4>\n<p><\/p>\n<p>Voici les r\u00e9sultats de chaque requ\u00eate ex\u00e9cut\u00e9e dans diff\u00e9rentes configurations de base de donn\u00e9es : PostgreSQL avec et sans index, ClickHouse propre et clickhousedb_fdw. Le temps est affich\u00e9 en millisecondes.<\/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>Table-1 : Temps n\u00e9cessaire pour ex\u00e9cuter les requ\u00eates utilis\u00e9es dans l'\u00e9valuation<\/em><\/p>\n<p><\/p>\n<p>Voir les r\u00e9sultats<\/p>\n<p><\/p>\n<p>Le graphique montre le temps d'ex\u00e9cution de la requ\u00eate en millisecondes. L'axe X montre le num\u00e9ro de la requ\u00eate dans les tableaux ci-dessus, et l'axe Y montre le temps d'ex\u00e9cution en millisecondes. Les r\u00e9sultats de ClickHouse et les donn\u00e9es obtenues \u00e0 partir de PostgreSQL via clickhousedb_fdw sont affich\u00e9s. Le tableau montre qu'il existe une \u00e9norme diff\u00e9rence entre PostgreSQL et ClickHouse, mais une diff\u00e9rence minimale entre ClickHouse et clickhousedb_fdw.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tests de performance des requ\u00eates analytiques dans PostgreSQL, ClickHouse et clickhousedb_fdw (PostgreSQL)\" src=\"\/wp-content\/uploads\/2020\/07\/e084243ea7b327f30de5cb78339d3d3a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ce graphique montre la diff\u00e9rence entre ClickhouseDB et clickhousedb_fdw. Pour la plupart des requ\u00eates, les frais g\u00e9n\u00e9raux de FDW ne sont pas si importants et \u00e0 peine significatifs, sauf pour Q12. Cette requ\u00eate inclut des jointures et une clause ORDER BY. En raison de la clause ORDER BY GROUP\/BY, le ORDER BY n'est pas omis jusqu'\u00e0 ClickHouse.<\/p>\n<p><\/p>\n<p>Dans le tableau 2, nous observons une augmentation du temps des requ\u00eates Q12 et Q13. Je le r\u00e9p\u00e8te, cela est d\u00fb \u00e0 la clause ORDER BY. Pour le confirmer, j'ai ex\u00e9cut\u00e9 les requ\u00eates Q-14 et Q-15 avec et sans la clause ORDER BY. Sans la clause ORDER BY, le temps d'ex\u00e9cution est de 259 ms, tandis qu'avec la clause ORDER BY, il est de 1364212. Pour d\u00e9boguer cette requ\u00eate, j'explique les deux requ\u00eates ici, et les r\u00e9sultats de l'explication sont fournis.<\/p>\n<p><\/p>\n<p>Q15 : Sans clause ORDER BY<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">bm=# EXPLAIN VERBOSE SELECT a.&quot;Ann\u00e9e&quot;, c1\/c2 \n     FROM (SELECT &quot;Ann\u00e9e&quot;, count(*)*1000 AS c1 FROM fontime WHERE &quot;DepDelay&quot; &gt; 10 GROUP BY &quot;Ann\u00e9e&quot;) a\n     INNER JOIN(SELECT &quot;Ann\u00e9e&quot;, count(*) AS c2 FROM fontime GROUP BY &quot;Ann\u00e9e&quot;) b ON a.&quot;Ann\u00e9e&quot;=b.&quot;Ann\u00e9e&quot;;<\/code><\/pre>\n<p><\/p>\n<p>Q15 : Requ\u00eate sans clause ORDER BY<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">PLAN DE REQU\u00caTE                                                      \nJointure par hachage  (co\u00fbt=2250.00..128516.06 lignes=50000000 largeur=12)  \nSortie: fontime.&quot;Ann\u00e9e&quot;, (((count(*) * 1000)) \/ b.c2)  \nUnique interne: vrai   Cond. de hachage: (fontime.&quot;Ann\u00e9e&quot; = b.&quot;Ann\u00e9e&quot;)  \n-&gt;  Scan \u00e9tranger  (co\u00fbt=1.00..-1.00 lignes=100000 largeur=12)        \nSortie: fontime.&quot;Ann\u00e9e&quot;, ((count(*) * 1000))        \nRelations: Agr\u00e9gation sur (fontime)        \nSQL \u00e0 distance: SELECT &quot;Ann\u00e9e&quot;, (count(*) * 1000) FROM &quot;default&quot;.ontime WHERE ((&quot;DepDelay&quot; &gt; 10)) GROUP BY &quot;Ann\u00e9e&quot;  \n-&gt;  Hachage  (co\u00fbt=999.00..999.00 lignes=100000 largeur=12)        \nSortie: b.c2, b.&quot;Ann\u00e9e&quot;        \n-&gt;  Scan de sous-requ\u00eate sur b  (co\u00fbt=1.00..999.00 lignes=100000 largeur=12)              \nSortie: b.c2, b.&quot;Ann\u00e9e&quot;              \n-&gt;  Scan \u00e9tranger  (co\u00fbt=1.00..-1.00 lignes=100000 largeur=12)                    \nSortie: fontime_1.&quot;Ann\u00e9e&quot;, (count(*))                    \nRelations: Agr\u00e9gation sur (fontime)                    \nSQL \u00e0 distance: SELECT &quot;Ann\u00e9e&quot;, count(*) FROM &quot;default&quot;.ontime GROUP BY &quot;Ann\u00e9e&quot;(16 lignes)<\/code><\/pre>\n<p><\/p>\n<p>Q14 : Requ\u00eate avec clause ORDER BY<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">bm=# EXPLAIN VERBOSE SELECT a.&quot;Ann\u00e9e&quot;, c1\/c2 FROM(SELECT &quot;Ann\u00e9e&quot;, count(*)*1000 AS c1 FROM fontime WHERE &quot;DepDelay&quot; &gt; 10 GROUP BY &quot;Ann\u00e9e&quot;) a \n     INNER JOIN(SELECT &quot;Ann\u00e9e&quot;, count(*) as c2 FROM fontime GROUP BY &quot;Ann\u00e9e&quot;) b  ON a.&quot;Ann\u00e9e&quot;= b.&quot;Ann\u00e9e&quot; \n     ORDER BY a.&quot;Ann\u00e9e&quot;;<\/code><\/pre>\n<p><\/p>\n<p>Q14 : Plan de requ\u00eate avec clause ORDER BY<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">PLAN DE REQU\u00caTE \nJointure par fusion\u00a0 (co\u00fbt=2.00..628498.02 lignes=50000000 largeur=12)\u00a0\u00a0 \nSortie: fontime.&quot;Ann\u00e9e&quot;, (((count(*) * 1000)) \/ (count(*)))\u00a0\u00a0 \nUnique interne: vrai\u00a0\u00a0 Cond. de fusion: (fontime.&quot;Ann\u00e9e&quot; = fontime_1.&quot;Ann\u00e9e&quot;)\u00a0\u00a0 \n-&gt;\u00a0 Agr\u00e9gation par groupe\u00a0 (co\u00fbt=1.00..499.01 lignes=1 largeur=12)\u00a0 \u00a0 \u00a0 \u00a0 \nSortie: fontime.&quot;Ann\u00e9e&quot;, (count(*) * 1000)\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \nCl\u00e9 de groupe: fontime.&quot;Ann\u00e9e&quot;\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \n-&gt;\u00a0 Scan \u00e9tranger sur public.fontime\u00a0 (co\u00fbt=1.00..-1.00 lignes=100000 largeur=4)\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \nSQL \u00e0 distance: SELECT &quot;Ann\u00e9e&quot; FROM &quot;default&quot;.ontime WHERE ((&quot;DepDelay&quot; &gt; 10)) \n            ORDER BY &quot;Ann\u00e9e&quot; ASC\u00a0\u00a0 \n-&gt;\u00a0 Agr\u00e9gation par groupe\u00a0 (co\u00fbt=1.00..499.01 lignes=1 largeur=12)\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \nSortie: fontime_1.&quot;Ann\u00e9e&quot;, count(*)\u00a0\u00a0 \u00a0 \u00a0 \u00a0 Cl\u00e9 de groupe: fontime_1.&quot;Ann\u00e9e&quot;\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \n-&gt;\u00a0 Scan \u00e9tranger sur public.fontime fontime_1\u00a0 (co\u00fbt=1.00..-1.00 lignes=100000 largeur=4)\u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \nSQL \u00e0 distance: SELECT &quot;Ann\u00e9e&quot; FROM &quot;default&quot;.ontime ORDER BY &quot;Ann\u00e9e&quot; ASC(16 lignes)<\/code><\/pre>\n<p><\/p>\n<p>Sortie<\/p>\n<p><\/p>\n<p>Les r\u00e9sultats de ces exp\u00e9riences montrent que ClickHouse offre une performance r\u00e9ellement excellente, et que clickhousedb_fdw propose les avantages de la performance de ClickHouse dans PostgreSQL. Bien qu'il y ait certains co\u00fbts associ\u00e9s \u00e0 l'utilisation de clickhousedb_fdw, ceux-ci sont minimes et comparables \u00e0 la performance atteinte lors d'une ex\u00e9cution native dans la base de donn\u00e9es ClickHouse. Cela confirme \u00e9galement que fdw dans PostgreSQL fournit des r\u00e9sultats remarquables.<\/p>\n<p><\/p>\n<p>Chat Telegram sur Clickhouse <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/clickhouse_ru\">https:\/\/t.me\/clickhouse_ru<\/a><\/noindex><br \/>\nChat Telegram sur PostgreSQL <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/pgsql\">https:\/\/t.me\/pgsql<\/a><\/noindex><\/p>\n<p>Source : <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\/fr\/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=\"fr_FR\" \/>\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\/fr\/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\udd47Test de performance des requ\u00eates analytiques dans PostgreSQL, ClickHouse et clickhousedb_fdw (PostgreSQL) | ProHoster","description":"Dans cette \u00e9tude, je voulais examiner les am\u00e9liorations de performance pouvant \u00eatre obtenues en utilisant la source de donn\u00e9es ClickHouse plut\u00f4t que PostgreSQL.","canonical_url":"https:\/\/prohoster.info\/fr\/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":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/89498","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=89498"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/89498\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/89499"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=89498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=89498"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=89498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}