{"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\/it\/blog\/administrirovanie\/testirovanie-proizvoditelnosti-analiticheskih-zaprosov-v-postgresql-clickhouse-i-clickhousedb_fdw-postgresql","title":{"rendered":"Test di performance delle query analitiche in PostgreSQL, ClickHouse e clickhousedb_fdw (PostgreSQL)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>In questa ricerca volevo esaminare quali miglioramenti delle prestazioni si possono ottenere utilizzando la sorgente dati ClickHouse anzich\u00e9 PostgreSQL. So quali vantaggi in termini di prestazioni ho con ClickHouse. Questi vantaggi saranno mantenuti se accedo a ClickHouse da PostgreSQL tramite un collegamento ai dati esterni (FDW)? <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Gli ambienti di database esaminati sono PostgreSQL v11, clickhousedb_fdw e il database ClickHouse. In definitiva, da PostgreSQL v11 eseguiremo diverse query SQL, instradate tramite il nostro clickhousedb_fdw al database ClickHouse. Poi vedremo come le prestazioni di FDW si confrontano con le stesse query eseguite in nativo su PostgreSQL e su ClickHouse nativo.<\/p>\n<p><\/p>\n<h3 id=\"baza-dannyh-clickhouse\">Database Clickhouse<\/h3>\n<p><\/p>\n<p>ClickHouse \u00e8 un sistema di gestione di database basato su colonne open source che pu\u00f2 raggiungere prestazioni 100-1000 volte superiori rispetto agli approcci tradizionali ai database, in grado di gestire pi\u00f9 di un miliardo di righe in meno di un secondo.<\/p>\n<p><\/p>\n<h3 id=\"clickhousedb_fdw\">Clickhousedb_fdw<\/h3>\n<p><\/p>\n<p>clickhousedb_fdw \u00e8 una shell per dati esterni del database ClickHouse, o FDW, ed \u00e8 un progetto open source di Percona. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Percona-Lab\/clickhousedb_fdw\">Ecco il link al repository del progetto 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\/\">In marzo ho scritto un blog che ti racconta di pi\u00f9 sul nostro FDW<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Come vedrai, questo fornisce un FDW per ClickHouse che consente di SELECT from e INSERT INTO il database ClickHouse da un server PostgreSQL v11.<\/p>\n<p><\/p>\n<p>FDW supporta funzionalit\u00e0 avanzate come aggregate e join. Questo aumenta significativamente le prestazioni facendo uso delle risorse del server remoto per queste operazioni intensive.<\/p>\n<p><\/p>\n<h3 id=\"benchmark-environment\">Benchmark environment<\/h3>\n<p><\/p>\n<ul>\n<li>Server Supermicro:\n<ul>\n<li>Intel\u00ae Xeon\u00ae CPU E5-2683 v3 @ 2.00GHz<\/li>\n<li>2 socket \/ 28 core \/ 56 thread<\/li>\n<li>Memoria: 256GB di RAM<\/li>\n<li>Storage: Samsung SM863 1.9TB Enterprise SSD<\/li>\n<li>Filesystem: 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: versione 11<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"benchmark-tests\">Benchmark tests<\/h3>\n<p><\/p>\n<p>Invece di utilizzare un insieme di dati generato dalla macchina per questo test, abbiamo utilizzato i dati 'Performance per tempo riportata sull'operatore' dal 1987 al 2018. Puoi accedere ai dati <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Percona-Lab\/ontime-airline-performance\/blob\/master\/download.sh\">utilizzando il nostro script disponibile qui<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>La dimensione del database \u00e8 di 85 GB, fornendo una tabella con 109 colonne.<\/p>\n<p><\/p>\n<h4 id=\"benchmark-queries\">Benchmark Queries<\/h4>\n<p><\/p>\n<p>Ecco le query che ho usato per confrontare ClickHouse, clickhousedb_fdw e PostgreSQL.<\/p>\n<p><\/p>\n<p><strong>Q#<\/strong><br \/>\n<strong>Query contiene aggregate e Group By<\/strong><\/p>\n<p>Q1<br \/>\nSELEZIONA GiornoDellaSettimana, count(*) AS c DA ontime DOVE Anno &gt;= 2000 E Anno &lt;= 2008 RAGGRUPPA PER GiornoDellaSettimana ORDINARE PER c DESC;<\/p>\n<p>Q2<br \/>\nSELEZIONA GiornoDellaSettimana, count(*) AS c DA ontime DOVE DepDelay &gt; 10 E Anno &gt;= 2000 E Anno &lt;= 2008 RAGGRUPPA PER GiornoDellaSettimana ORDINARE PER c DESC;<\/p>\n<p>Q3<br \/>\nSELEZIONA Origine, count(*) AS c DA ontime DOVE DepDelay &gt; 10 E Anno &gt;= 2000 E Anno &lt;= 2008 RAGGRUPPA PER Origine ORDINARE PER c DESC LIMIT 10;<\/p>\n<p>Q4<br \/>\nSELEZIONA Vettore, count(<em>) DA ontime DOVE DepDelay &gt; 10 E Anno = 2007 RAGGRUPPA PER Vettore ORDINARE PER count(<\/em>) DESC;<\/p>\n<p>Q5<br \/>\nSELEZIONA a.Vettore, c, c2, c<em>1000\/c2 come c3 DA ( SELEZIONA Vettore, count(<\/em>) AS c DA ontime DOVE DepDelay &gt; 10 E Anno = 2007 RAGGRUPPA PER Vettore ) a INNER JOIN ( SELEZIONA Vettore,count(*) AS c2 DA ontime DOVE Anno = 2007 RAGGRUPPA PER Vettore ) b ON a.Vettore = b.Vettore ORDINARE PER c3 DESC;<\/p>\n<p>Q6<br \/>\nSELEZIONA a.Vettore, c, c2, c<em>1000\/c2 come c3 DA ( SELEZIONA Vettore, count(<\/em>) AS c DA ontime DOVE DepDelay &gt; 10 E Anno &gt;= 2000 E Anno = 2000 E Anno &lt;= 2008 RAGGRUPPA PER Vettore ) b ON a.Vettore = b.Vettore ORDINARE PER c3 DESC;<\/p>\n<p>Q7<br \/>\nSELEZIONA Vettore, avg(DepDelay) * 1000 AS c3 DA ontime DOVE Anno &gt;= 2000 E Anno &lt;= 2008 RAGGRUPPA PER Vettore;<\/p>\n<p>Q8<br \/>\nSELEZIONA Anno, avg(DepDelay) DA ontime RAGGRUPPA PER Anno;<\/p>\n<p>Q9<br \/>\nSELEZIONA Anno, count(*) AS c1 DA ontime RAGGRUPPA PER Anno;<\/p>\n<p>Q10<br \/>\nSELEZIONA avg(cnt) DA (SELEZIONA Anno, Mese, count(*) AS cnt DA ontime DOVE DepDel15 = 1 RAGGRUPPA PER Anno, Mese) a;<\/p>\n<p>Q11<br \/>\nSELEZIONA avg(c1) DA (SELEZIONA Anno, Mese, count(*) AS c1 DA ontime RAGGRUPPA PER Anno, Mese) a;<\/p>\n<p>Q12<br \/>\nSELEZIONA NomeCitt\u00e0Origine, NomeCitt\u00e0Destinazione, count(*) AS c DA ontime RAGGRUPPA PER NomeCitt\u00e0Origine, NomeCitt\u00e0Destinazione ORDINARE PER c DESC LIMIT 10;<\/p>\n<p>Q13<br \/>\nSELEZIONA NomeCitt\u00e0Origine, count(*) AS c DA ontime RAGGRUPPA PER NomeCitt\u00e0Origine ORDINARE PER c DESC LIMIT 10;<\/p>\n<p><strong>La query contiene join<\/strong><\/p>\n<p>Q14<br \/>\nSELEZIONA a.Anno, c1\/c2 DA ( SELEZIONA Anno, count(<em>)<\/em>1000 AS c1 DA ontime DOVE DepDelay &gt; 10 RAGGRUPPA PER Anno) a INNER JOIN (SELEZIONA Anno, count(*) AS c2 DA ontime RAGGRUPPA PER Anno) b ON a.Anno = b.Anno ORDINARE PER a.Anno;<\/p>\n<p>Q15<br \/>\nSELEZIONA a.\"Anno\", c1\/c2 DA ( SELEZIONA \"Anno\", count(<em>)<\/em>1000 AS c1 DA fontime DOVE \"DepDelay\" &gt; 10 RAGGRUPPA PER \"Anno\") a INNER JOIN (SELEZIONA \"Anno\", count(*) AS c2 DA fontime RAGGRUPPA PER \"Anno\") b ON a.\"Anno\" = b.\"Anno\";<\/p>\n<p><\/p>\n<p><em>Tabella-1: Query utilizzate nel benchmark<\/em><\/p>\n<p><\/p>\n<h4 id=\"query-executions\">Esecuzioni delle query<\/h4>\n<p><\/p>\n<p>Ecco i risultati di ciascuna delle query eseguite in diverse configurazioni del database: PostgreSQL con e senza indici, ClickHouse proprietario e clickhousedb_fdw. Il tempo \u00e8 mostrato in millisecondi.<\/p>\n<p><\/p>\n<p><strong>Q#<\/strong><br \/>\n<strong>PostgreSQL<\/strong><br \/>\n<strong>PostgreSQL (Indicizzato)<\/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>Tabella-1: Tempo impiegato per eseguire le query utilizzate nel benchmark<\/em><\/p>\n<p><\/p>\n<p>Visualizzazione dei risultati<\/p>\n<p><\/p>\n<p>Il grafico mostra il tempo di esecuzione della query in millisecondi, l'asse X mostra il numero della query dalle tabelle sopra, mentre l'asse Y mostra il tempo di esecuzione in millisecondi. I risultati di ClickHouse e i dati ottenuti da postgres tramite clickhousedb_fdw sono mostrati. Dalla tabella si pu\u00f2 notare che esiste una grande differenza tra PostgreSQL e ClickHouse, ma una minima differenza tra ClickHouse e clickhousedb_fdw.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Test di performance delle query analitiche in PostgreSQL, ClickHouse e clickhousedb_fdw (PostgreSQL)\" src=\"\/wp-content\/uploads\/2020\/07\/e084243ea7b327f30de5cb78339d3d3a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Questo grafico mostra la differenza tra ClickhouseDB e clickhousedb_fdw. Nella maggior parte delle query, i costi aggiuntivi di FDW non sono cos\u00ec elevati e sono appena significativi, tranne che per Q12. Questa query comporta join e una clausola ORDER BY. A causa della clausola ORDER BY GROUP\/BY e di ORDINARE PER non vengono omessi per ClickHouse.<\/p>\n<p><\/p>\n<p>Nella tabella 2 vediamo un picco nei tempi delle query Q12 e Q13. Ripeto, questo \u00e8 causato dalla clausola ORDER BY. Per confermare questo, ho eseguito le query Q-14 e Q-15 con e senza la clausola ORDER BY. Senza la clausola ORDER BY, il tempo di completamento \u00e8 di 259 ms, mentre con la clausola ORDER BY \u00e8 di 1364212. Per il debug di questa query, spiego entrambe le query, e qui vengono mostrati i risultati dell'analisi.<\/p>\n<p><\/p>\n<p>Q15: Senza clausola ORDER BY<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">bm=# EXPLAIN VERBOSE SELECT a.\"Year\", c1\/c2 \n     FROM (SELECT \"Year\", count(*)*1000 AS c1 FROM fontime WHERE \"DepDelay\" &gt; 10 GROUP BY \"Year\") a\n     INNER JOIN(SELECT \"Year\", count(*) AS c2 FROM fontime GROUP BY \"Year\") b ON a.\"Year\"=b.\"Year\";<\/code><\/pre>\n<p><\/p>\n<p>Q15: Query senza clausola 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.\"Year\", (((count(*) * 1000)) \/ b.c2)  \nInner Unique: true   Hash Cond: (fontime.\"Year\" = b.\"Year\")  \n-&gt;  Foreign Scan  (cost=1.00..-1.00 rows=100000 width=12)        \nOutput: fontime.\"Year\", ((count(*) * 1000))        \nRelations: Aggregate on (fontime)        \nRemote SQL: SELECT \"Year\", (count(*) * 1000) FROM \"default\".ontime WHERE ((\"DepDelay\" &gt; 10)) GROUP BY \"Year\"  \n-&gt;  Hash  (cost=999.00..999.00 rows=100000 width=12)        \nOutput: b.c2, b.\"Year\"        \n-&gt;  Subquery Scan on b  (cost=1.00..999.00 rows=100000 width=12)              \nOutput: b.c2, b.\"Year\"              \n-&gt;  Foreign Scan  (cost=1.00..-1.00 rows=100000 width=12)                    \nOutput: fontime_1.\"Year\", (count(*))                    \nRelations: Aggregate on (fontime)                    \nRemote SQL: SELECT \"Year\", count(*) FROM \"default\".ontime GROUP BY \"Year\"(16 rows)<\/code><\/pre>\n<p><\/p>\n<p>Q14: Query con clausola ORDER BY<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">bm=# EXPLAIN VERBOSE SELECT a.\"Year\", c1\/c2 FROM(SELECT \"Year\", count(*)*1000 AS c1 FROM fontime WHERE \"DepDelay\" &gt; 10 GROUP BY \"Year\") a \n     INNER JOIN(SELECT \"Year\", count(*) as c2 FROM fontime GROUP BY \"Year\") b  ON a.\"Year\"= b.\"Year\" \n     ORDER BY a.\"Year\";<\/code><\/pre>\n<p><\/p>\n<p>Q14: Piano della query con clausola ORDER BY<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">QUERY PLAN \nMerge Join  (cost=2.00..628498.02 rows=50000000 width=12)   \nOutput: fontime.\"Year\", (((count(*) * 1000)) \/ (count(*)))   \nInner Unique: true   Merge Cond: (fontime.\"Year\" = fontime_1.\"Year\")   \n-&gt;  GroupAggregate  (cost=1.00..499.01 rows=1 width=12)        \nOutput: fontime.\"Year\", (count(*) * 1000)        \nGroup Key: fontime.\"Year\"        \n-&gt;  Foreign Scan on public.fontime  (cost=1.00..-1.00 rows=100000 width=4)            \nRemote SQL: SELECT \"Year\" FROM \"default\".ontime WHERE ((\"DepDelay\" &gt; 10)) \n            ORDER BY \"Year\" ASC   \n-&gt;  GroupAggregate  (cost=1.00..499.01 rows=1 width=12)        \nOutput: fontime_1.\"Year\", count(*)        \nGroup Key: fontime_1.\"Year\"        \n-&gt;  Foreign Scan on public.fontime fontime_1  (cost=1.00..-1.00 rows=100000 width=4)  \n            \nRemote SQL: SELECT \"Year\" FROM \"default\".ontime ORDER BY \"Year\" ASC(16 rows)<\/code><\/pre>\n<p><\/p>\n<p>Conclusione<\/p>\n<p><\/p>\n<p>I risultati di questi esperimenti mostrano che ClickHouse offre davvero buone prestazioni e che clickhousedb_fdw offre i vantaggi delle prestazioni di ClickHouse a PostgreSQL. Sebbene vi siano alcune spese generali nell'uso di clickhousedb_fdw, sono trascurabili e comparabili alle prestazioni raggiunte quando si utilizza direttamente il database ClickHouse. Questo conferma anche che fdw in PostgreSQL fornisce risultati notevoli.<\/p>\n<p><\/p>\n<p>Chat Telegram su Clickhouse <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/clickhouse_ru\">https:\/\/t.me\/clickhouse_ru<\/a><\/noindex><br \/>\nChat Telegram su PostgreSQL <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/pgsql\">https:\/\/t.me\/pgsql<\/a><\/noindex><\/p>\n<p>Fonte: <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.1.1 - 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\/it\/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.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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 di prestazioni delle query analitiche in PostgreSQL, ClickHouse e clickhousedb_fdw (PostgreSQL) - ProHoster","description":"In questa ricerca volevo vedere quali miglioramenti delle prestazioni si possono ottenere utilizzando la sorgente dati ClickHouse anzich\u00e9 PostgreSQL.","canonical_url":"https:\/\/prohoster.info\/it\/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":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/89498","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=89498"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/89498\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/89499"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=89498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=89498"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=89498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}