{"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\/da\/blog\/administrirovanie\/testirovanie-proizvoditelnosti-analiticheskih-zaprosov-v-postgresql-clickhouse-i-clickhousedb_fdw-postgresql","title":{"rendered":"Test af ydelsen af analytiske foresp\u00f8rgsler i PostgreSQL, ClickHouse og clickhousedb_fdw (PostgreSQL)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>I denne unders\u00f8gelse \u00f8nskede jeg at se, hvilke pr\u00e6stationsforbedringer der kan opn\u00e5s ved at bruge ClickHouse som datakilde i stedet for PostgreSQL. Jeg kender de pr\u00e6stationsfordele, jeg f\u00e5r ved at bruge ClickHouse. Vil disse fordele blive bevaret, hvis jeg f\u00e5r adgang til ClickHouse fra PostgreSQL ved hj\u00e6lp af en ekstern dataskal (FDW)? <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>De databaser, der bliver unders\u00f8gt, er PostgreSQL v11, clickhousedb_fdw og ClickHouse-databasen. I sidste ende vil vi fra PostgreSQL v11 k\u00f8re forskellige SQL-foresp\u00f8rgsler, der styres gennem vores clickhousedb_fdw til ClickHouse-databasen. Derefter vil vi se, hvordan FDWs pr\u00e6station sammenlignes med de samme foresp\u00f8rgsler, der k\u00f8res i nativ PostgreSQL og nativ ClickHouse.<\/p>\n<p><\/p>\n<h3 id=\"baza-dannyh-clickhouse\">Clickhouse-database<\/h3>\n<p><\/p>\n<p>ClickHouse er et open source kolonne-baseret databasesystem, der kan n\u00e5 pr\u00e6stationer, der er 100-1000 gange hurtigere end traditionelle databasemetoder, i stand til at h\u00e5ndtere over en milliard r\u00e6kker p\u00e5 mindre end et sekund.<\/p>\n<p><\/p>\n<h3 id=\"clickhousedb_fdw\">Clickhousedb_fdw<\/h3>\n<p><\/p>\n<p>clickhousedb_fdw er en ekstern dataskal til ClickHouse-databasen, eller FDW, som er et open source-projekt fra Percona. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Percona-Lab\/clickhousedb_fdw\">Her er et link til projektets GitHub-repositorium<\/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 marts skrev jeg en blog, der fort\u00e6ller dig mere om vores FDW<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Som du vil se, leverer dette en FDW for ClickHouse, der muligg\u00f8r SELECT from og INSERT INTO ClickHouse-databasen fra PostgreSQL v11-serveren.<\/p>\n<p><\/p>\n<p>FDW underst\u00f8tter avancerede funktioner som aggregater og join. Dette \u00f8ger betydeligt ydeevnen ved at udnytte ressourcerne fra den eksterne server til disse ressourcekr\u00e6vende operationer.<\/p>\n<p><\/p>\n<h3 id=\"benchmark-environment\">Benchmark-milj\u00f8<\/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 sokler \/ 28 kerner \/ 56 tr\u00e5de<\/li>\n<li>Hukommelse: 256GB RAM<\/li>\n<li>Lager: 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-tests<\/h3>\n<p><\/p>\n<p>I stedet for at bruge et maskin-genereret datas\u00e6t til denne test, brugte vi data \"Performance Over Time, Reported Operator Time\" fra 1987 til 2018. Du kan f\u00e5 adgang til dataene <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Percona-Lab\/ontime-airline-performance\/blob\/master\/download.sh\">med vores script, der er tilg\u00e6ngeligt her<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Databasens st\u00f8rrelse er 85 GB, hvilket sikrer en tabel med 109 kolonner.<\/p>\n<p><\/p>\n<h4 id=\"benchmark-queries\">Benchmark-foresp\u00f8rgsler<\/h4>\n<p><\/p>\n<p>Her er de foresp\u00f8rgsler, jeg brugte til at sammenligne ClickHouse, clickhousedb_fdw og PostgreSQL.<\/p>\n<p><\/p>\n<p><strong>Q#<\/strong><br \/>\n<strong>Foresp\u00f8rgsel indeholder aggregater og 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\u00c6LG DayOfWeek, count(*) AS c FRA ontime HVOR DepDelay&gt;10 OG \u00c5R &gt;= 2000 OG \u00c5R &lt;= 2008 GRUPPERING EFTER DayOfWeek BESTIL c DESC;<\/p>\n<p>Q3<br \/>\nV\u00c6LG Oprindelse, count(*) AS c FRA ontime HVOR DepDelay&gt;10 OG \u00c5R &gt;= 2000 OG \u00c5R &lt;= 2008 GRUPPERING EFTER Oprindelse BESTIL c DESC BEGR\u00c6NS 10;<\/p>\n<p>Q4<br \/>\nV\u00c6LG Transport\u00f8r, count(<em>) FRA ontime HVOR DepDelay&gt;10 OG \u00c5R = 2007 GRUPPERING EFTER Transport\u00f8r BESTIL count(<\/em>) DESC;<\/p>\n<p>Q5<br \/>\nV\u00c6LG a.Transport\u00f8r, c, c2, c<em>1000\/c2 som c3 FRA ( V\u00c6LG Transport\u00f8r, count(<\/em>) AS c FRA ontime HVOR DepDelay&gt;10 OG \u00c5R=2007 GRUPPERING EFTER Transport\u00f8r ) a INDRE JOIN ( V\u00c6LG Transport\u00f8r,count(*) AS c2 FRA ontime HVOR \u00c5R=2007 GRUPPERING EFTER Transport\u00f8r) b ON a.Transport\u00f8r=b.Transport\u00f8r BESTIL c3 DESC;<\/p>\n<p>Q6<br \/>\nV\u00c6LG a.Transport\u00f8r, c, c2, c<em>1000\/c2 som c3 FRA ( V\u00c6LG Transport\u00f8r, count(<\/em>) AS c FRA ontime HVOR DepDelay&gt;10 OG \u00c5R &gt;= 2000 OG \u00c5R = 2000 OG \u00c5R &lt;= 2008 GRUPPERING EFTER Transport\u00f8r ) b ON a.Transport\u00f8r=b.Transport\u00f8r BESTIL c3 DESC;<\/p>\n<p>Q7<br \/>\nV\u00c6LG Transport\u00f8r, avg(DepDelay) * 1000 AS c3 FRA ontime HVOR \u00c5R &gt;= 2000 OG \u00c5R &lt;= 2008 GRUPPERING EFTER Transport\u00f8r;<\/p>\n<p>Q8<br \/>\nV\u00c6LG \u00c5R, avg(DepDelay) FRA ontime GRUPPERING EFTER \u00c5R;<\/p>\n<p>Q9<br \/>\nV\u00c6LG \u00c5R, count(*) som c1 FRA ontime GRUPPERING EFTER \u00c5R;<\/p>\n<p>Q10<br \/>\nV\u00c6LG avg(cnt) FRA (V\u00c6LG \u00c5R,M\u00e5ned,count(*) AS cnt FRA ontime HVOR DepDel15=1 GRUPPERING EFTER \u00c5R,M\u00e5ned) a;<\/p>\n<p>Q11<br \/>\nV\u00c6LG avg(c1) FRA (V\u00c6LG \u00c5R,M\u00e5ned,count(*) som c1 FRA ontime GRUPPERING EFTER \u00c5R,M\u00e5ned) a;<\/p>\n<p>Q12<br \/>\nV\u00c6LG Oprindelsesbyens navn, DestCityName, count(*) AS c FRA ontime GRUPPERING EFTER Oprindelsesbyens navn, DestCityName BESTIL c DESC BEGR\u00c6NS 10;<\/p>\n<p>Q13<br \/>\nV\u00c6LG Oprindelsesbyens navn, count(*) AS c FRA ontime GRUPPERING EFTER Oprindelsesbyens navn BESTIL c DESC BEGR\u00c6NS 10;<\/p>\n<p><strong>Sp\u00f8rgning indeholder sammenk\u00e6dninger<\/strong><\/p>\n<p>Q14<br \/>\nV\u00c6LG a.\u00c5R, c1\/c2 FRA ( V\u00c6LG \u00c5R, count(<em>)<\/em>1000 som c1 FRA ontime HVOR DepDelay&gt;10 GRUPPERING EFTER \u00c5R) a INDRE JOIN (V\u00c6LG \u00c5R, count(*) som c2 FRA ontime GRUPPERING EFTER \u00c5R ) b ON a.\u00c5R=b.\u00c5R BESTIL a.\u00c5R;<\/p>\n<p>Q15<br \/>\nV\u00c6LG a.\u201e\u00c5R\u201d, c1\/c2 FRA ( V\u00c6LG \u201e\u00c5R\u201d, count(<em>)<\/em>1000 som c1 FRA ontime HVOR \u201eDepDelay\u201d&gt;10 GRUPPERING EFTER \u201e\u00c5R\u201d) a INDRE JOIN (V\u00c6LG \u201e\u00c5R\u201d, count(*) som c2 FRA ontime GRUPPERING EFTER \u201e\u00c5R\u201d ) b ON a.\u201e\u00c5R\u201d=b.\u201e\u00c5R\u201d;<\/p>\n<p><\/p>\n<p><em>Tabel-1: Sp\u00f8rgsm\u00e5l anvendt i benchmark<\/em><\/p>\n<p><\/p>\n<h4 id=\"query-executions\">Sp\u00f8rgninger udf\u00f8rt<\/h4>\n<p><\/p>\n<p>Her er resultaterne for hver af foresp\u00f8rgslerne ved udf\u00f8relsen i forskellige databaseindstillinger: PostgreSQL med indekser og uden dem, egen ClickHouse og clickhousedb_fdw. Tiden vises i millisekunder.<\/p>\n<p><\/p>\n<p><strong>Q#<\/strong><br \/>\n<strong>PostgreSQL<\/strong><br \/>\n<strong>PostgreSQL (Indexerede)<\/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>Tabel-1: Tiden taget til at udf\u00f8re de foresp\u00f8rgsler, der blev anvendt i benchmark<\/em><\/p>\n<p><\/p>\n<p>Se resultater<\/p>\n<p><\/p>\n<p>Grafen viser tiderne for udf\u00f8relse af foresp\u00f8rgsler i millisekunder, X-aksen viser foresp\u00f8rgselsnummeret fra tabellerne ovenfor, mens Y-aksen viser udf\u00f8relsestid i millisekunder. Resultaterne fra ClickHouse og data opn\u00e5et fra postgres via clickhousedb_fdw vises. Tabellen viser, at der er en enorm forskel mellem PostgreSQL og ClickHouse, men en minimal forskel mellem ClickHouse og clickhousedb_fdw.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Test af ydelsen af analytiske foresp\u00f8rgsler i PostgreSQL, ClickHouse og clickhousedb_fdw (PostgreSQL)\" src=\"\/wp-content\/uploads\/2020\/07\/e084243ea7b327f30de5cb78339d3d3a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Denne graf viser forskellen mellem ClickhouseDB og clickhousedb_fdw. I de fleste foresp\u00f8rgsler er FDW-omkostningerne ikke s\u00e5 store og knap betydelige, undtagen Q12. Denne foresp\u00f8rgsel inkluderer sammenk\u00e6dninger og en ORDER BY-klausul. P\u00e5 grund af ORDER BY GRUPPERING\/BY og ORDER BY springes ikke til ClickHouse.<\/p>\n<p><\/p>\n<p>I tabel 2 ser vi et spring i tiden for foresp\u00f8rgslerne Q12 og Q13. Jeg gentager, at dette skyldes foresp\u00f8rgslen ORDER BY. For at bekr\u00e6fte dette har jeg udf\u00f8rt foresp\u00f8rgslerne Q-14 og Q-15 med og uden foresp\u00f8rgslen ORDER BY. Uden foresp\u00f8rgslen ORDER BY er sluttiden 259 ms, mens den med foresp\u00f8rgslen ORDER BY er 1364212. For at fejlfinde denne foresp\u00f8rgsel forklarer jeg begge foresp\u00f8rgsler, og her er resultaterne af forklaringen.<\/p>\n<p><\/p>\n<p>Q15: Uden ORDER BY-klausul<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">bm=# FORKLARE VERBOSE SELECT a.&quot;\u00c5r&quot;, c1\/c2 \n     FRA (SELECT &quot;\u00c5r&quot;, count(*)*1000 AS c1 FRA fontime HVIS &quot;DepDelay&quot; &gt; 10 GRUPPER EFTER &quot;\u00c5r&quot;) a\n     INNER JOIN(SELECT &quot;\u00c5r&quot;, count(*) AS c2 FRA fontime GRUPPER EFTER &quot;\u00c5r&quot;) b P\u00c5 a.&quot;\u00c5r&quot;=b.&quot;\u00c5r&quot;;<\/code><\/pre>\n<p><\/p>\n<p>Q15: Foresp\u00f8rgsel uden ORDER BY-klausul<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">SP\u00d8RGSM\u00c5LSPLAN                                                      \nHash Join  (omkostning=2250.00..128516.06 r\u00e6kker=50000000 bredde=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  (omkostning=1.00..-1.00 r\u00e6kker=100000 bredde=12)        \nOutput: fontime.&quot;\u00c5r&quot;, ((count(*) * 1000))        \nRelationer: Aggregate p\u00e5 (fontime)        \nRemote SQL: SELECT &quot;\u00c5r&quot;, (count(*) * 1000) FRA &quot;default&quot;.ontime HVOR ((&quot;DepDelay&quot; &gt; 10)) GRUPPER EFTER &quot;\u00c5r&quot;  \n-&gt;  Hash  (omkostning=999.00..999.00 r\u00e6kker=100000 bredde=12)        \nOutput: b.c2, b.&quot;\u00c5r&quot;        \n-&gt;  Subquery Scan p\u00e5 b  (omkostning=1.00..999.00 r\u00e6kker=100000 bredde=12)              \nOutput: b.c2, b.&quot;\u00c5r&quot;              \n-&gt;  Foreign Scan  (omkostning=1.00..-1.00 r\u00e6kker=100000 bredde=12)                    \nOutput: fontime_1.&quot;\u00c5r&quot;, (count(*))                    \nRelationer: Aggregate p\u00e5 (fontime)                    \nRemote SQL: SELECT &quot;\u00c5r&quot;, count(*) FRA &quot;default&quot;.ontime GRUPPER EFTER &quot;\u00c5r&quot;(16 r\u00e6kker)<\/code><\/pre>\n<p><\/p>\n<p>Q14: Foresp\u00f8rgsel med ORDER BY-klausul<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">bm=# FORKLARE VERBOSE SELECT a.&quot;\u00c5r&quot;, c1\/c2 FRA(SELECT &quot;\u00c5r&quot;, count(*)*1000 AS c1 FRA fontime HVIS &quot;DepDelay&quot; &gt; 10 GRUPPER EFTER &quot;\u00c5r&quot;) a \n     INNER JOIN(SELECT &quot;\u00c5r&quot;, count(*) som c2 FRA fontime GRUPPER EFTER &quot;\u00c5r&quot;) b  P\u00c5 a.&quot;\u00c5r&quot;= b.&quot;\u00c5r&quot; \n     SORTER EFTER a.&quot;\u00c5r&quot;;<\/code><\/pre>\n<p><\/p>\n<p>Q14: Foresp\u00f8rgselsplan med ORDER BY-klausul<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">SP\u00d8RGSM\u00c5LSPLAN \nMerge Join\u00a0 (omkostning=2.00..628498.02 r\u00e6kker=50000000 bredde=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 (omkostning=1.00..499.01 r\u00e6kker=1 bredde=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 (omkostning=1.00..-1.00 r\u00e6kker=100000 bredde=4)\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \nRemote SQL: SELECT &quot;\u00c5r&quot; FRA &quot;default&quot;.ontime HVIS ((&quot;DepDelay&quot; &gt; 10)) \n            SORTER EFTER &quot;\u00c5r&quot; ASC\u00a0\u00a0 \n-&gt;\u00a0 GroupAggregate\u00a0 (omkostning=1.00..499.01 r\u00e6kker=1 bredde=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 (omkostning=1.00..-1.00 r\u00e6kker=100000 bredde=4)\u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \nRemote SQL: SELECT &quot;\u00c5r&quot; FRA &quot;default&quot;.ontime SORTER EFTER &quot;\u00c5r&quot; ASC(16 r\u00e6kker)<\/code><\/pre>\n<p><\/p>\n<p>Output<\/p>\n<p><\/p>\n<p>Resultaterne af disse eksperimenter viser, at ClickHouse tilbyder virkelig god ydeevne, og clickhousedb_fdw giver fordelene ved ClickHouse-ydeevne fra PostgreSQL. Selvom der er nogle omkostninger forbundet med brugen af clickhousedb_fdw, er de ubetydelige og sammenlignelige med den ydeevne, der opn\u00e5s ved at k\u00f8re direkte p\u00e5 databasen ClickHouse. Dette bekr\u00e6fter ogs\u00e5, at fdw i PostgreSQL giver fremragende resultater.<\/p>\n<p><\/p>\n<p>Telegram chat om Clickhouse <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/clickhouse_ru\">https:\/\/t.me\/clickhouse_ru<\/a><\/noindex><br \/>\nTelegram chat om PostgreSQL <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/pgsql\">https:\/\/t.me\/pgsql<\/a><\/noindex><\/p>\n<p>Kilde: <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.3 - 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\/da\/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.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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 af ydeevne for analytiske foresp\u00f8rgsler i PostgreSQL, ClickHouse og clickhousedb_fdw (PostgreSQL) | ProHoster","description":"I dette studie \u00f8nskede jeg at se, hvilke forbedringer i ydeevne der kan opn\u00e5s ved at bruge datakilden ClickHouse i stedet for PostgreSQL.","canonical_url":"https:\/\/prohoster.info\/da\/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":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/89498","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=89498"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/89498\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/89499"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=89498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=89498"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=89498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}