Su'ega le fa'atinoga o su'esu'ega fa'atatau ile PostgreSQL, ClickHouse ma clickhousedb_fdw (PostgreSQL)

I lenei suʻesuʻega, na ou manaʻo e vaʻai pe o le a le faʻaleleia atili o faʻatinoga e mafai ona ausia e ala i le faʻaaogaina o se faʻamatalaga faʻamatalaga ClickHouse nai lo PostgreSQL. Ou te iloa le aoga o le gaosiga ou te maua mai le faʻaaogaina o le ClickHouse. O le a fa'aauau pea nei fa'amanuiaga pe a ou fa'aogaina le ClickHouse mai le PostgreSQL e fa'aoga ai le Fa'auma Fa'amaumauga a Fa'aifo (FDW)?

O siosiomaga faʻamaumauga o loʻo suʻesuʻeina o PostgreSQL v11, clickhousedb_fdw ma ClickHouse database. Mulimuli ane, mai le PostgreSQL v11 o le a matou faʻatautaia fesili SQL eseese e ala i la matou clickhousedb_fdw i le ClickHouse database. O le a tatou vaʻai pe faʻafefea ona faʻatusatusa le faʻatinoga a le FDW i fesili tutusa o loʻo faʻatautaia i le PostgreSQL ma le ClickHouse.

Clickhouse Database

ClickHouse o se faʻamatalaga faʻapipiʻi punaʻoa faʻapipiʻi faʻamaumauga e mafai ona ausia le faʻatinoga 100-1000 taimi vave nai lo faʻamatalaga masani faʻamaumauga, e mafai ona faʻagasolo i luga o le piliona laina i lalo ifo o le lua.

Clickhousedb_fdw

clickhousedb_fdw - O le afifiina o faʻamatalaga i fafo mo le ClickHouse database, poʻo le FDW, o se poloketi tatala mai Percona. Ole feso'ota'iga lea ile fale teuoloa GitHub ole poloketi.

Ia Mati na ou tusia ai se blog e taʻu atu ia te oe nisi mea e uiga i la matou FDW.

E pei ona e vaʻaia, o loʻo tuʻuina atu se FDW mo ClickHouse e mafai ai ona FILIFILI mai, ma INSERT INTO, le ClickHouse database mai le PostgreSQL v11 server.

E lagolagoina e le FDW foliga faʻapitoa e pei o le tuʻufaʻatasia ma le faʻatasi. O lenei mea e faʻaleleia atili ai le faʻatinoga e ala i le faʻaaogaina o punaoa a le server mamao mo nei faʻagaioiga-malosi.

Siosiomaga fa'ailoga

  • Supermicro server:
    • Intel® Xeon® CPU E5-2683 v3 @ 2.00GHz
    • 2 sockets / 28 cores / 56 filo
    • Manatua: 256GB o RAM
    • Teuina: Samsung SM863 1.9TB Enterprise SSD
    • Faiga faila: ext4/xfs
  • OS: Linux smblade01 4.15.0-42-generic #45~16.04.1-Ubuntu
  • PostgreSQL: lomiga 11

Su'ega fa'atatau

Nai lo le faʻaaogaina o faʻamaumauga faʻapipiʻi masini mo lenei suʻega, na matou faʻaogaina le "Productivity by Time Reported Operator Time" faʻamaumauga mai le 1987 i le 2018. E mafai ona e mauaina faʻamatalaga fa'aaoga la matou tusitusiga o lo'o maua iinei.

Ole tele ole database ole 85 GB, e maua ai le laulau e tasi ole 109 koluma.

Fesili Fa'atatau

O fesili ia na ou faʻaaogaina e faʻatusatusa ai ClickHouse, clickhousedb_fdw ma PostgreSQL.

Q#
Ole Su'esu'ega o lo'o i ai fa'atasiga ma fa'avasegaga ile

Q1
FILIFILI AsoOfWeek, faitau(*) AS c MAI taimi taimi WHERE Tausaga >= 2000 MA Tausaga <= 2008 VAEGA I LE DayOfWeek ORDER BY c DESC;

Q2
FILIFILI AsoOfWeek, faitau(*) AS c MAI le taimi taimi WHERE DepDelay>10 MA Tausaga >= 2000 MA Tausaga <= 2008 VAEGA I LE DayOfWeek ORDER BY c DESC;

Q3
FILIFILI Origin, faitau(*) AS c MAI le taimi taimi WHERE DepDelay>10 MA Tausaga >= 2000 MA Tausaga <= 2008 VAEGA I LE AUAAGA ORDER BY c DESC LIMIT 10;

Q4
FILIFILI le ave, faitau() MAI le taimi taimi WHERE DepDelay>10 MA Tausaga = 2007 FA'AVAE E LE LA'U FA'A'UINA O'OGA I LE faitauga() DESC;

Q5
FILIFILI a.Taavale, c, c2, c1000/c2 e pei o le c3 MAI ( FILIFILI Avea, faitau() AS c MAI le taimi taimi WHERE DepDelay>10 MA Tausaga=2007 GROUP BY Carrier ) a INNER SOI ( FILIFILI Carrier, faitau(*) AS c2 MAI le taimi taimi WHERE Tausaga=2007 GROUP BY Carrier)b on a.Carrier=b.Carrier ORDER SAUNIA E c3 DESC;

Q6
FILIFILI a.Taavale, c, c2, c1000/c2 e pei o le c3 MAI ( FILIFILI Avea, faitau() AS c MAI le taimi taimi WHERE DepDelay>10 MA Tausaga >= 2000 MA Tausaga <= 2008 GROUP BY Carrier) a INNER SOI ( FILIFILI le Va'a, faitau (*) AS c2 MAI le taimi taimi WHERE Tausaga >= 2000 MA Tausaga <= 2008 GROUP BY Carrier ) b on a.Carrier=b.Carrier POLOA E C3 DESC;

Q7
FILIFILI le Va'a, avefe'au(DepDelay) * 1000 AS c3 MAI le taimi ole WHERE Tausaga >= 2000 MA Tausaga <= 2008 FA'AVAE E FA'AVAE;

Q8
FILIFILI Tausaga, ave(DepDelay) MAI le taimi taimi GROUP I LE Tausaga;

Q9
filifili le Tausaga, faitau(*) e pei o le c1 mai le kulupu fa'atasi ile Tausaga;

Q10
FILIFILI fua(cnt) MAI (FILIFILI Tausaga,Masina, faitau(*) AS cnt MAI le taimi FEIA DepDel15=1 VAEGA I Tausaga,Masina) a;

Q11
filifili avg(c1) mai (filifili Tausaga,Masina, faitau(*) e pei o le c1 mai le taimi taimi vaega i le Tausaga,Masina) a;

Q12
FILIFILI OriginCityName, DestCityName, faitau(*) AS c MAI le taimi taimi GROUP BY OriginCityName, DestCityName ORDER BY c DESC LIMIT 10;

Q13
FILIFILI OriginCityName, faitau(*) AS c MAI le taimi taimi GROUP BY OriginCityName ORDER BY c DESC LIMIT 10;

Fesili o lo'o i ai So'ai

Q14
FILIFILI a. Tausaga, c1/c2 MAI ( filifili Tausaga, faitau()1000 e pei o le c1 mai le taimi taimi WHERE DepDelay>10 GROUP I LE Tausaga) a INNER JOIN (filifili Tausaga, faitau (*) e pei o le c2 mai taimi taimi GROUP BY Year ) b i luga ole a.Year=b.Year ORDER BY a.Year;

Q15
FILIFILI a.” Tausaga”, c1/c2 MAI ( filifili “Tausaga”, faitau()1000 as c1 MAI fontime WHERE “DepDelay”>10 GROUP I “Year”) a INNER JOIN (filifili “Year”, faitau(*) as c2 MAI fontime GROUP I “Year” ) b i luga o le a.”Tausaga”=b. "Tausaga";

Laulau-1: Fa'amatalaga fa'aoga ile fa'ailoga

Fa'asalaga fa'atatau

O fa'ai'uga nei o fesili ta'itasi pe a fa'atautaia i fa'amaumauga tu'ufa'atasiga eseese: PostgreSQL fa'atasi ma le leai o ni fa'asinomaga, tagatanu'u ClickHouse ma clickhousedb_fdw. Ua fa'aalia le taimi ile milliseconds.

Q#
PostgreSQL
PostgreSQL (Fa'asinotonu)
Kiliki Fale
clickhousedb_fdw

Q1
27920
19634
23
57

Q2
35124
17301
50
80

Q3
34046
15618
67
115

Q4
31632
7667
25
37

Q5
47220
8976
27
60

Q6
58233
24368
55
153

Q7
30566
13256
52
91

Q8
38309
60511
112
179

Q9
20674
37979
31
81

Q10
34990
20102
56
148

Q11
30489
51658
37
155

Q12
39357
33742
186
1333

Q13
29912
30709
101
384

Q14
54126
39913
124
1364212

Q15
97258
30211
245
259

Laulau-1: Taimi e fa'atino ai fa'amatalaga o lo'o fa'aogaina ile fa'ailoga

Va'ai i'uga

O le kalafi o loʻo faʻaalia ai le taimi o le faʻatinoina o fesili i milliseconds, o le X axis o loʻo faʻaalia ai le numera o fesili mai laulau i luga, ma le Y axis o loʻo faʻaalia le taimi faʻatino i milliseconds. ClickHouse i'uga ma fa'amaumauga na maua mai postgres fa'aaoga clickhousedb_fdw o lo'o fa'aalia. Mai le laulau e mafai ona e vaʻaia o loʻo i ai se eseesega tele i le va o PostgreSQL ma ClickHouse, ae laʻititi le eseesega i le va o ClickHouse ma clickhousedb_fdw.

Su'ega le fa'atinoga o su'esu'ega fa'atatau ile PostgreSQL, ClickHouse ma clickhousedb_fdw (PostgreSQL)

O lenei kalafi o loʻo faʻaalia ai le eseesega i le va o ClickhouseDB ma clickhousedb_fdw. I le tele o fesili, o le FDW overhead e le maualuga ma e tau le taua vagana ai le Q12. O lenei fesili e aofia ai faʻatasi ma se ORDER BY clause. Ona o le ORDER BY GROUP/BY clause, ORDER BY e le pa'ū i lalo ile ClickHouse.

I le Laulau 2 matou te vaʻai i le oso o le taimi i fesili Q12 ma Q13. Toe fo'i, e mafua mai i le ORDER BY clause. Ina ia faʻamaonia lenei mea, na ou faʻatautaia fesili Q-14 ma Q-15 faʻatasi ma le leai o le ORDER BY clause. A aunoa ma le ORDER BY clause o le taimi e maeʻa ai o le 259ms ma le ORDER BY clause o le 1364212. Ina ia debug lenei fesili o loʻo ou faʻamatalaina uma fesili ma o taunuuga ia o le faʻamatalaga.

Q15: A aunoa ma le ORDER BY Fuaiupu

bm=# EXPLAIN VERBOSE SELECT a."Year", c1/c2 
     FROM (SELECT "Year", count(*)*1000 AS c1 FROM fontime WHERE "DepDelay" > 10 GROUP BY "Year") a
     INNER JOIN(SELECT "Year", count(*) AS c2 FROM fontime GROUP BY "Year") b ON a."Year"=b."Year";

Q15: Su'esu'ega e aunoa ma se ORDER BY Fuaiupu

QUERY PLAN                                                      
Hash Join  (cost=2250.00..128516.06 rows=50000000 width=12)  
Output: fontime."Year", (((count(*) * 1000)) / b.c2)  
Inner Unique: true   Hash Cond: (fontime."Year" = b."Year")  
->  Foreign Scan  (cost=1.00..-1.00 rows=100000 width=12)        
Output: fontime."Year", ((count(*) * 1000))        
Relations: Aggregate on (fontime)        
Remote SQL: SELECT "Year", (count(*) * 1000) FROM "default".ontime WHERE (("DepDelay" > 10)) GROUP BY "Year"  
->  Hash  (cost=999.00..999.00 rows=100000 width=12)        
Output: b.c2, b."Year"        
->  Subquery Scan on b  (cost=1.00..999.00 rows=100000 width=12)              
Output: b.c2, b."Year"              
->  Foreign Scan  (cost=1.00..-1.00 rows=100000 width=12)                    
Output: fontime_1."Year", (count(*))                    
Relations: Aggregate on (fontime)                    
Remote SQL: SELECT "Year", count(*) FROM "default".ontime GROUP BY "Year"(16 rows)

Q14: Fesili ma le ORDER BY Fuaiupu

bm=# EXPLAIN VERBOSE SELECT a."Year", c1/c2 FROM(SELECT "Year", count(*)*1000 AS c1 FROM fontime WHERE "DepDelay" > 10 GROUP BY "Year") a 
     INNER JOIN(SELECT "Year", count(*) as c2 FROM fontime GROUP BY "Year") b  ON a."Year"= b."Year" 
     ORDER BY a."Year";

Q14: Fuafuaga Su'esu'e ma ORDER BY Fuaiupu

QUERY PLAN 
Merge Join  (cost=2.00..628498.02 rows=50000000 width=12)   
Output: fontime."Year", (((count(*) * 1000)) / (count(*)))   
Inner Unique: true   Merge Cond: (fontime."Year" = fontime_1."Year")   
->  GroupAggregate  (cost=1.00..499.01 rows=1 width=12)        
Output: fontime."Year", (count(*) * 1000)         
Group Key: fontime."Year"         
->  Foreign Scan on public.fontime  (cost=1.00..-1.00 rows=100000 width=4)               
Remote SQL: SELECT "Year" FROM "default".ontime WHERE (("DepDelay" > 10)) 
            ORDER BY "Year" ASC   
->  GroupAggregate  (cost=1.00..499.01 rows=1 width=12)         
Output: fontime_1."Year", count(*)         Group Key: fontime_1."Year"         
->  Foreign Scan on public.fontime fontime_1  (cost=1.00..-1.00 rows=100000 width=4) 
              
Remote SQL: SELECT "Year" FROM "default".ontime ORDER BY "Year" ASC(16 rows)

iʻuga

O faʻaiʻuga o nei suʻega o loʻo faʻaalia ai o le ClickHouse e ofoina atu le lelei tele, ma o le clickhousedb_fdw e ofoina atu faʻamanuiaga faʻatinoga o ClickHouse mai PostgreSQL. E ui o loʻo i ai se faʻauluuluga pe a faʻaaoga clickhousedb_fdw, e faʻatauvaʻa ma faʻatusatusa i le faʻatinoga na ausia e ala i le taʻavale faʻapitoa i luga o le ClickHouse database. E faʻamaonia ai foi o le fdw i PostgreSQL e maua ai faʻamanuiaga sili.

Telegram talatalanoaga e ala ile Clickhouse https://t.me/clickhouse_ru
Telegram talatalanoaga faʻaaoga PostgreSQL https://t.me/pgsql

puna: www.habr.com

Faaopoopo i ai se faamatalaga