{"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\/sv\/blog\/administrirovanie\/testirovanie-proizvoditelnosti-analiticheskih-zaprosov-v-postgresql-clickhouse-i-clickhousedb_fdw-postgresql","title":{"rendered":"Prestandatest av analytiska fr\u00e5gor i PostgreSQL, ClickHouse och clickhousedb_fdw (PostgreSQL)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>I denna studie ville jag titta p\u00e5 vilka prestandaf\u00f6rb\u00e4ttringar som kan uppn\u00e5s genom att anv\u00e4nda datak\u00e4lla ClickHouse ist\u00e4llet f\u00f6r PostgreSQL. Jag \u00e4r medveten om de prestandaf\u00f6rdelar jag f\u00e5r med ClickHouse. Kommer dessa f\u00f6rdelar att bevaras om jag f\u00e5r \u00e5tkomst till ClickHouse fr\u00e5n PostgreSQL via en externa dataskal (FDW)? <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>De databasmilj\u00f6er som utforskas \u00e4r PostgreSQL v11, clickhousedb_fdw och ClickHouse-databasen. I slut\u00e4ndan kommer vi att k\u00f6ra olika SQL-fr\u00e5gor fr\u00e5n PostgreSQL v11 som dirigeras genom v\u00e5r clickhousedb_fdw till ClickHouse-databasen. Sedan kommer vi att se hur FDW:s prestanda j\u00e4mf\u00f6rs med samma fr\u00e5gor som k\u00f6rs i ren PostgreSQL och ren ClickHouse.<\/p>\n<p><\/p>\n<h3 id=\"baza-dannyh-clickhouse\">Databasen Clickhouse<\/h3>\n<p><\/p>\n<p>ClickHouse \u00e4r ett kolumnbaserat databashanteringssystem med \u00f6ppen k\u00e4llkod som kan n\u00e5 prestanda 100-1000 g\u00e5nger snabbare \u00e4n traditionella databaser, kapabel att hantera mer \u00e4n en miljard rader p\u00e5 mindre \u00e4n en sekund.<\/p>\n<p><\/p>\n<h3 id=\"clickhousedb_fdw\">Clickhousedb_fdw<\/h3>\n<p><\/p>\n<p>clickhousedb_fdw \u00e4r en extern dataskal f\u00f6r ClickHouse-databasen, eller FDW, som \u00e4r ett projekt med \u00f6ppen k\u00e4llkod fr\u00e5n Percona. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Percona-Lab\/clickhousedb_fdw\">H\u00e4r \u00e4r en l\u00e4nk till projektets GitHub-repo<\/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\/\">I mars skrev jag en blogg som ber\u00e4ttar mer om v\u00e5r FDW<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Som du kommer att se ger det FDW f\u00f6r ClickHouse, vilket till\u00e5ter SELECT from och INSERT INTO ClickHouse-databasen fr\u00e5n PostgreSQL v11-servern.<\/p>\n<p><\/p>\n<p>FDW st\u00f6der avancerade funktioner som aggregate och join. Detta \u00f6kar avsev\u00e4rt prestandan genom att anv\u00e4nda resurser fr\u00e5n den fj\u00e4rrservern f\u00f6r dessa resurskr\u00e4vande operationer.<\/p>\n<p><\/p>\n<h3 id=\"benchmark-environment\">Benchmark-milj\u00f6<\/h3>\n<p><\/p>\n<ul>\n<li>Supermicro-server:\n<ul>\n<li>Intel&reg; Xeon&reg; CPU E5-2683 v3 @ 2.00GHz<\/li>\n<li>2 socklar \/ 28 k\u00e4rnor \/ 56 tr\u00e5dar<\/li>\n<li>Minne: 256GB RAM<\/li>\n<li>Lagring: Samsung SM863 1.9TB Enterprise SSD<\/li>\n<li>Filsystem: 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\">Benchmark-tester<\/h3>\n<p><\/p>\n<p>Ist\u00e4llet f\u00f6r att anv\u00e4nda en maskin-skapad dataset f\u00f6r detta test anv\u00e4nde vi data \"Prestanda \u00f6ver tid, rapporterad om operat\u00f6rens drifttid\" fr\u00e5n 1987 till 2018. Du kan f\u00e5 tillg\u00e5ng till datan <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Percona-Lab\/ontime-airline-performance\/blob\/master\/download.sh\">med v\u00e5rt skript som finns h\u00e4r<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Databasens storlek \u00e4r 85 GB, vilket ger en tabell med 109 kolumner.<\/p>\n<p><\/p>\n<h4 id=\"benchmark-queries\">Benchmark-fr\u00e5gor<\/h4>\n<p><\/p>\n<p>H\u00e4r \u00e4r fr\u00e5gorna jag anv\u00e4nde f\u00f6r att j\u00e4mf\u00f6ra ClickHouse, clickhousedb_fdw och PostgreSQL.<\/p>\n<p><\/p>\n<p><strong>Q#<\/strong><br \/>\n<strong>Fr\u00e5gan inneh\u00e5ller Aggregat och Group By<\/strong><\/p>\n<p>Q1<br \/>\nSELECT 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 \/>\nV\u00c4LJ Dag i veckan, count(*) AS c FR\u00c5N ontime D\u00c4R DepDelay&gt;10 OCH \u00c5r &gt;= 2000 OCH \u00c5r &lt;= 2008 GRUPPERA EFTER Dag i veckan BEST\u00c4LL EFTER c DESC;<\/p>\n<p>Q3<br \/>\nV\u00c4LJ Ursprung, count(*) AS c FR\u00c5N ontime D\u00c4R DepDelay&gt;10 OCH \u00c5r &gt;= 2000 OCH \u00c5r &lt;= 2008 GRUPPERA EFTER Ursprung BEST\u00c4LL EFTER c DESC BEGR\u00c4NSA TILL 10;<\/p>\n<p>Q4<br \/>\nV\u00c4LJ Frakt, count(<em>) FR\u00c5N ontime D\u00c4R DepDelay&gt;10 OCH \u00c5r = 2007 GRUPPERA EFTER Frakt BEST\u00c4LL EFTER count(<\/em>) DESC;<\/p>\n<p>Q5<br \/>\nV\u00c4LJ a.Frakt, c, c2, c<em>1000\/c2 som c3 FR\u00c5N ( V\u00c4LJ Frakt, count(<\/em>) AS c FR\u00c5N ontime D\u00c4R DepDelay&gt;10 OCH \u00c5r=2007 GRUPPERA EFTER Frakt ) a INRE F\u00d6RENING ( V\u00c4LJ Frakt,count(*) AS c2 FR\u00c5N ontime D\u00c4R \u00c5r=2007 GRUPPERA EFTER Frakt) b p\u00e5 a.Frakt=b.Frakt BEST\u00c4LL EFTER c3 DESC;<\/p>\n<p>Q6<br \/>\nV\u00c4LJ a.Frakt, c, c2, c<em>1000\/c2 som c3 FR\u00c5N ( V\u00c4LJ Frakt, count(<\/em>) AS c FR\u00c5N ontime D\u00c4R DepDelay&gt;10 OCH \u00c5r &gt;= 2000 OCH \u00c5r = 2000 OCH \u00c5r &lt;= 2008 GRUPPERA EFTER Frakt ) b p\u00e5 a.Frakt=b.Frakt BEST\u00c4LL EFTER c3 DESC;<\/p>\n<p>Q7<br \/>\nV\u00c4LJ Frakt, avg(DepDelay) * 1000 AS c3 FR\u00c5N ontime D\u00c4R \u00c5r &gt;= 2000 OCH \u00c5r &lt;= 2008 GRUPPERA EFTER Frakt;<\/p>\n<p>Q8<br \/>\nV\u00c4LJ \u00c5r, avg(DepDelay) FR\u00c5N ontime GRUPPERA EFTER \u00c5r;<\/p>\n<p>Q9<br \/>\nv\u00e4lj \u00c5r, count(*) som c1 FR\u00c5N ontime GRUPPERA EFTER \u00c5r;<\/p>\n<p>Q10<br \/>\nV\u00c4LJ avg(cnt) FR\u00c5N (V\u00c4LJ \u00c5r,M\u00e5nad,count(*) AS cnt FR\u00c5N ontime D\u00c4R DepDel15=1 GRUPPERA EFTER \u00c5r,M\u00e5nad) a;<\/p>\n<p>Q11<br \/>\nv\u00e4lj avg(c1) fr\u00e5n (v\u00e4lj \u00c5r,M\u00e5nad,count(*) som c1 FR\u00c5N ontime GRUPPERA EFTER \u00c5r,M\u00e5nad) a;<\/p>\n<p>Q12<br \/>\nV\u00c4LJ Ursprung stadsnamn, Dest stadsnamn, count(*) AS c FR\u00c5N ontime GRUPPERA EFTER Ursprung stadsnamn, Dest stadsnamn BEST\u00c4LL EFTER c DESC BEGR\u00c4NSA TILL 10;<\/p>\n<p>Q13<br \/>\nV\u00c4LJ Ursprung stadsnamn, count(*) AS c FR\u00c5N ontime GRUPPERA EFTER Ursprung stadsnamn BEST\u00c4LL EFTER c DESC BEGR\u00c4NSA TILL 10;<\/p>\n<p><strong>Fr\u00e5gan Inneh\u00e5ller F\u00f6reningar<\/strong><\/p>\n<p>Q14<br \/>\nV\u00c4LJ a.\u00c5r, c1\/c2 FR\u00c5N ( v\u00e4lj \u00c5r, count(<em>)<\/em>1000 som c1 FR\u00c5N ontime D\u00c4R DepDelay&gt;10 GRUPPERA EFTER \u00c5r) a INRE F\u00d6RENING (v\u00e4lj \u00c5r, count(*) som c2 FR\u00c5N ontime GRUPPERA EFTER \u00c5r ) b p\u00e5 a.\u00c5r=b.\u00c5r BEST\u00c4LL EFTER a.\u00c5r;<\/p>\n<p>Q15<br \/>\nV\u00c4LJ a.\u201d\u00c5r\u201d, c1\/c2 FR\u00c5N ( v\u00e4lj \u201c\u00c5r\u201d, count(<em>)<\/em>1000 som c1 FR\u00c5N fontime D\u00c4R \u201cDepDelay\u201d&gt;10 GRUPPERA EFTER \u201c\u00c5r\u201d) a INRE F\u00d6RENING (v\u00e4lj \u201c\u00c5r\u201d, count(*) som c2 FR\u00c5N fontime GRUPPERA EFTER \u201c\u00c5r\u201d ) b p\u00e5 a.\u201d\u00c5r\u201d=b.\u201d\u00c5r\u201d;<\/p>\n<p><\/p>\n<p><em>Tabell-1: Fr\u00e5gor som anv\u00e4nds i benchmark<\/em><\/p>\n<p><\/p>\n<h4 id=\"query-executions\">Fr\u00e5geexekveringar<\/h4>\n<p><\/p>\n<p>H\u00e4r \u00e4r resultaten f\u00f6r varje fr\u00e5ga n\u00e4r den k\u00f6rdes under olika inst\u00e4llningar av databasen: PostgreSQL med och utan index, egen ClickHouse och clickhousedb_fdw. Tiden visas i millisekunder.<\/p>\n<p><\/p>\n<p><strong>Q#<\/strong><br \/>\n<strong>PostgreSQL<\/strong><br \/>\n<strong>PostgreSQL (Indexerad)<\/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>Tabell-1: Tid som kr\u00e4vs f\u00f6r att k\u00f6ra de fr\u00e5gor som anv\u00e4nds i benchmark<\/em><\/p>\n<p><\/p>\n<p>Visa resultat<\/p>\n<p><\/p>\n<p>Grafen visar tiden f\u00f6r att k\u00f6ra fr\u00e5gan i millisekunder, X-axeln visar nummer p\u00e5 fr\u00e5gan fr\u00e5n tabellerna ovan, och Y-axeln visar tiden f\u00f6r att k\u00f6ra i millisekunder. Resultaten fr\u00e5n ClickHouse och data som erh\u00e5llits fr\u00e5n postgres med hj\u00e4lp av clickhousedb_fdw visas. Tabellen visar att det finns en enorm skillnad mellan PostgreSQL och ClickHouse, men en minimal skillnad mellan ClickHouse och clickhousedb_fdw.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Prestandatest av analytiska fr\u00e5gor i PostgreSQL, ClickHouse och clickhousedb_fdw (PostgreSQL)\" src=\"\/wp-content\/uploads\/2020\/07\/e084243ea7b327f30de5cb78339d3d3a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Denna graf visar skillnaden mellan ClickhouseDB och clickhousedb_fdw. F\u00f6r de flesta fr\u00e5gor \u00e4r overheadkostnaderna f\u00f6r FDW inte s\u00e5 stora och knappt m\u00e4rkbara, f\u00f6rutom f\u00f6r Q12. Denna fr\u00e5ga inkluderar f\u00f6reningar och ORDER BY-klausulen. P\u00e5 grund av ORDER BY GROUP\/BY och ORDER BY hoppar inte ner till ClickHouse.<\/p>\n<p><\/p>\n<p>I tabell 2 ser vi en \u00f6kning av tiden f\u00f6r f\u00f6rfr\u00e5gningarna Q12 och Q13. Jag upprepar, detta orsakas av ORDER BY-satsen. F\u00f6r att bekr\u00e4fta detta har jag utf\u00f6rt f\u00f6rfr\u00e5gningarna Q-14 och Q-15 med och utan ORDER BY-sats. Utan ORDER BY-satsen tar det 259 ms, medan det med ORDER BY tar 1364212 ms. F\u00f6r att fels\u00f6ka denna f\u00f6rfr\u00e5gan f\u00f6rklarar jag b\u00e5da f\u00f6rfr\u00e5gningarna, och h\u00e4r \u00e4r resultaten av f\u00f6rklaringen.<\/p>\n<p><\/p>\n<p>Q15: Utan ORDER BY-sats<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">bm=# EXPLAIN VERBOSE SELECT a.&quot;\u00c5r&quot;, c1\/c2 \n     FROM (SELECT &quot;\u00c5r&quot;, count(*)*1000 AS c1 FROM fontime WHERE &quot;DepDelay&quot; &gt; 10 GROUP BY &quot;\u00c5r&quot;) a\n     INNER JOIN(SELECT &quot;\u00c5r&quot;, count(*) AS c2 FROM fontime GROUP BY &quot;\u00c5r&quot;) b ON a.&quot;\u00c5r&quot;=b.&quot;\u00c5r&quot;;<\/code><\/pre>\n<p><\/p>\n<p>Q15: F\u00f6rfr\u00e5gan utan ORDER BY-sats<\/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;\u00c5r&quot;, (((count(*) * 1000)) \/ b.c2)  \nInner Unique: true   Hash Cond: (fontime.&quot;\u00c5r&quot; = b.&quot;\u00c5r&quot;)  \n-&gt;  Foreign Scan  (cost=1.00..-1.00 rows=100000 width=12)        \nOutput: fontime.&quot;\u00c5r&quot;, ((count(*) * 1000))        \nRelations: Aggregate on (fontime)        \nRemote SQL: SELECT &quot;\u00c5r&quot;, (count(*) * 1000) FROM &quot;default&quot;.ontime WHERE ((&quot;DepDelay&quot; &gt; 10)) GROUP BY &quot;\u00c5r&quot;  \n-&gt;  Hash  (cost=999.00..999.00 rows=100000 width=12)        \nOutput: b.c2, b.&quot;\u00c5r&quot;        \n-&gt;  Subquery Scan on b  (cost=1.00..999.00 rows=100000 width=12)              \nOutput: b.c2, b.&quot;\u00c5r&quot;              \n-&gt;  Foreign Scan  (cost=1.00..-1.00 rows=100000 width=12)                    \nOutput: fontime_1.&quot;\u00c5r&quot;, (count(*))                    \nRelations: Aggregate on (fontime)                    \nRemote SQL: SELECT &quot;\u00c5r&quot;, count(*) FROM &quot;default&quot;.ontime GROUP BY &quot;\u00c5r&quot;(16 rows)<\/code><\/pre>\n<p><\/p>\n<p>Q14: F\u00f6rfr\u00e5gan med ORDER BY-sats<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">bm=# EXPLAIN VERBOSE SELECT a.&quot;\u00c5r&quot;, c1\/c2 FROM(SELECT &quot;\u00c5r&quot;, count(*)*1000 AS c1 FROM fontime WHERE &quot;DepDelay&quot; &gt; 10 GROUP BY &quot;\u00c5r&quot;) a \n     INNER JOIN(SELECT &quot;\u00c5r&quot;, count(*) as c2 FROM fontime GROUP BY &quot;\u00c5r&quot;) b  ON a.&quot;\u00c5r&quot;= b.&quot;\u00c5r&quot; \n     ORDER BY a.&quot;\u00c5r&quot;;<\/code><\/pre>\n<p><\/p>\n<p>Q14: F\u00f6rfr\u00e5gningsplan med ORDER BY-sats<\/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;\u00c5r&quot;, (((count(*) * 1000)) \/ (count(*)))\u00a0\u00a0 \nInner Unique: true\u00a0\u00a0 Merge Cond: (fontime.&quot;\u00c5r&quot; = fontime_1.&quot;\u00c5r&quot;)\u00a0\u00a0 \n-&gt;\u00a0 GroupAggregate\u00a0 (cost=1.00..499.01 rows=1 width=12)\u00a0 \u00a0 \u00a0 \u00a0 \nOutput: fontime.&quot;\u00c5r&quot;, (count(*) * 1000)\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \nGroup Key: fontime.&quot;\u00c5r&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;\u00c5r&quot; FROM &quot;default&quot;.ontime WHERE ((&quot;DepDelay&quot; &gt; 10)) \n            ORDER BY &quot;\u00c5r&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;\u00c5r&quot;, count(*)\u00a0\u00a0 \u00a0 \u00a0 \u00a0 Group Key: fontime_1.&quot;\u00c5r&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;\u00c5r&quot; FROM &quot;default&quot;.ontime ORDER BY &quot;\u00c5r&quot; ASC(16 rows)<\/code><\/pre>\n<p><\/p>\n<p>Utdata<\/p>\n<p><\/p>\n<p>Resultaten av dessa experiment visar att ClickHouse verkligen erbjuder god prestanda, och att clickhousedb_fdw ger prestandaf\u00f6rdelar fr\u00e5n ClickHouse till PostgreSQL. \u00c4ven om det finns vissa overheadkostnader med att anv\u00e4nda clickhousedb_fdw, \u00e4r dessa marginella och j\u00e4mf\u00f6rbara med den prestanda som uppn\u00e5s vid direkt anv\u00e4ndning av ClickHouse-databasen. Detta bekr\u00e4ftar ocks\u00e5 att fdw i PostgreSQL ger imponerande resultat.<\/p>\n<p><\/p>\n<p>Telegramchatt f\u00f6r Clickhouse <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/clickhouse_ru\">https:\/\/t.me\/clickhouse_ru<\/a><\/noindex><br \/>\nTelegramchatt f\u00f6r PostgreSQL <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/pgsql\">https:\/\/t.me\/pgsql<\/a><\/noindex><\/p>\n<p>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/testirovanie-proizvoditelnosti-analiticheskih-zaprosov-v-postgresql-clickhouse-i-clickhousedb_fdw-postgresql\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47Prestandatest av analytiska f\u00f6rfr\u00e5gningar i PostgreSQL, ClickHouse och clickhousedb_fdw (PostgreSQL) | ProHoster","description":"I denna studie ville jag unders\u00f6ka vilka prestandaf\u00f6rb\u00e4ttringar som kan uppn\u00e5s genom att anv\u00e4nda ClickHouse som datak\u00e4lla ist\u00e4llet f\u00f6r PostgreSQL.","canonical_url":"https:\/\/prohoster.info\/sv\/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":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/89498","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=89498"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/89498\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/89499"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=89498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=89498"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=89498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}