Te whakamatautau i te mahinga o nga patai tātari i PostgreSQL, ClickHouse me clickhousedb_fdw (PostgreSQL)

I roto i tenei rangahau, i hiahia ahau ki te kite he aha nga whakapainga mahi ka taea ma te whakamahi i te puna raraunga ClickHouse kaua ko PostgreSQL. E mohio ana ahau ki nga hua hua ka whiwhi ahau mai i te whakamahi ClickHouse. Ka haere tonu enei painga ki te uru ahau ki te ClickHouse mai i PostgreSQL ma te whakamahi i te Taapaki Raraunga Tawahi (FDW)?

Ko nga taiao papaa raraunga i akohia ko PostgreSQL v11, clickhousedb_fdw me ClickHouse pātengi raraunga. I te mutunga, mai i te PostgreSQL v11 ka whakahaerehia e matou nga momo patai SQL ka tukuna mai i to maatau clickhousedb_fdw ki te paataka korero ClickHouse. Ka kite tatou me pehea te whakataurite o nga mahi a FDW ki nga patai e rere ana i roto i te PostgreSQL taketake me te ClickHouse taketake.

Pātengi Raraunga Clickhouse

Ko te ClickHouse he punaha whakahaere papaaarangi puna tuwhera ka taea te whakatutuki i nga mahi 100-1000 nga wa tere atu i nga huarahi tuku iho, ka taea te tukatuka i runga i te piriona rarangi i roto i te iti iho i te rua.

Clickhousedb_fdw

clickhousedb_fdw - Ko te takai raraunga o waho mo te patengi raraunga ClickHouse, FDW ranei, he kaupapa puna tuwhera mai i Percona. Anei he hononga ki te putunga putunga GitHub o te kaupapa.

I te marama o Poutu-te-rangi i tuhia e ahau he blog e korero atu ana ki a koe mo to maatau FDW.

Ka kite koe, ka whakaratohia he FDW mo ClickHouse e taea ai te SELECT mai, me te INSERT INTO, te paataka ClickHouse mai i te PostgreSQL v11 tūmau.

Ka tautokohia e FDW nga ahuatanga matatau penei i te whakahiato me te hono. Ka tino pai ake te mahi ma te whakamahi i nga rauemi o te tūmau mamao mo enei mahi whakakaha rawa.

Te taiao tohu

  • tūmau Supermicro:
    • Intel® Xeon® CPU E5-2683 v3 @ 2.00GHz
    • 2 turanga / 28 matua / 56 miro
    • Mahinga: 256GB o RAM
    • Rokiroki: Samsung SM863 1.9TB Enterprise SSD
    • Pūnaha Kōnae: ext4/xfs
  • OS: Linux smblade01 4.15.0-42-generic #45~16.04.1-Ubuntu
  • PostgreSQL: putanga 11

Nga whakamatautau tohu

Engari i te whakamahi i etahi huinga raraunga i hangaia e te miihini mo tenei whakamatautau, i whakamahia e matou nga raraunga "Productivity by Time Reported Operator Time" mai i te 1987 ki te 2018. Ka taea e koe te uru ki nga raraunga te whakamahi i ta maatau tuhinga kei konei.

He 85 GB te rahinga putunga raraunga, e whakarato ana i te tepu kotahi o nga pou 109.

Uiui Paerewa

Anei nga patai i whakamahia e au ki te whakataurite i a ClickHouse, clickhousedb_fdw me PostgreSQL.

Q#
Uiui kei roto nga whakahiato me te whakaropu a

Q1
KŌWHIRINGA RāOfWeek, tatau(*) AS c FROM inawa WHERE Tau >= 2000 ME Tau <= 2008 Rōpū MA DayOfWeek ORDER NA c DESC;

Q2
KŌWHIWHIRIA RāOfWeek, tatau(*) AS c MAI i te wā WHERE DepDelay>10 ME Tau >= 2000 ME Tau <= 2008 Rōpū MA DayOfWeek ORDER NA c DESC;

Q3
SELECT Origin, tatau(*) AS c FROM ontime WHERE DepDelay>10 AND Year >= 2000 AND Year <= 2008 Rōpū BY Origin ORDER BY c DESC LIMIT 10;

Q4
Tīpakohia Kaikawe, tatau() MAI i te waa WHERE DepDelay>10 ME te Tau = 2007 RUPAPA MA TE Kaikawe ORDER MA TE tatau() DESC;

Q5
PILIhia a.Kaikawe, c, c2, c1000/c2 hei c3 MAI ( TĪPAHI Kawe, tatau() AS c MAI i te wa WHERE DepDelay>10 ME Tau=2007 RUPAPA MA TE Kaikawe ) a ROTO KAUPAPA ( TIKA KAUPAPA, tatau(*) AS c2 MAI i te wa I WHERE Tau=2007 RUPAPA MA TE Kaikawe)b i runga i a.Kaikawe=b.Kaikawe OTA NA c3 DESC;

Q6
PILIhia a.Kaikawe, c, c2, c1000/c2 hei c3 MAI ( TĪPAHI Kawe, tatau() AS c MAI i te waa WHERE DepDelay>10 ME Te Tau >= 2000 ME Te Tau <= 2008 RUPAPA MA TE Kaikauwhau) he KAUPAPA KAUPAPA ( KORERO Kaikawe, tatau(*) AS c2 MAI i te waa WHERE Tau >= 2000 ME te Tau <= 2008 Rōpū MA Kaikawe ) b i runga i a.Kaikawe=b.Kaikawe ORDER BY c3 DESC;

Q7
SELECT Kaiwaea, avg(DepDelay) * 1000 AS c3 FROM ontime WHERE Tau >= 2000 AND Tau <= 2008 RUPAPA BY Kaikawe;

Q8
TŌTAHI Tau, taurite(DepDelay) MAI i te wā o te Rōpū ma te Tau;

Q9
tīpakohia te Tau, tatau(*) hei c1 mai i te roopu i runga i te tau;

Q10
KŌWHIWHI Avg(cnt) MAI (Kīwhiria te Tau,Marama, tatau(*) AS cnt MAI i te wā WHERE DepDel15=1 Rōpū ma te Tau,Marama) a;

Q11
tīpakohia te toharite(c1) mai i te (tīpakohia te Tau,Marama, tatau(*) hei c1 mai i te roopu o te waa ma te Tau,Marama) a;

Q12
KŌWHIWHI IA OriginCityName, DestCityName, tatau(*) AS c MAI i te wā RŌPUNA NA OriginCityName, DestCityName ORATE NA c DESC LIMIT 10;

Q13
Patohia te IngoaOriginCity, tatau(*) AS c mai i te wa o te Rōpū NA OriginCityName ORDER BY c DESC LIMIT 10;

He Hononga kei roto Uiui

Q14
Patohia a.Tau, c1/c2 MAI ( tohua te Tau, tatau()1000 as c1 from ontime WHERE DepDelay>10 GROUP BY Year) a INNER JOIN (tīpakohia te Tau, tatau(*) as c2 from ontime GROUP BY Year ) b on a.Year=b.Year ORDER BY a.Year;

Q15
Patohia a."Tau", c1/c2 MAI ( tohua "Tau", tatau()1000 as c1 FROM fontime WHERE “DepDelay”>10 ROUP BY “Year”) a INNER JOIN (tīpakohia “Year”, tatau(*) as c2 FROM fontime GROUP BY “Year” ) b on a.”Year”=b. "Tau";

Ripanga-1: Uiui e whakamahia ana hei tohu tohu

Nga mahi patai

Anei nga hua o ia patai i te wa e whakahaerea ana i roto i nga tautuhinga papaaarangi rereke: PostgreSQL me nga tohu tohu kore, ClickHouse taketake me clickhousedb_fdw. Ka whakaatuhia te wa i roto i nga manomano.

Q#
PostgreSQL
PostgreSQL (Kua Taupuhia)
PaateneToko
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

Ripanga-1: Te wa i pau ki te mahi i nga patai i whakamahia hei tohu tohu

Tirohia nga hua

Ko te kauwhata e whakaatu ana i te wa mahi uinga i roto i te mitamanono, ko te tuaka X e whakaatu ana i te tau patai mai i nga ripanga o runga ake nei, a ko te tuaka Y e whakaatu ana i te wa mahi i roto i te mirimiakona. Ko nga hua a ClickHouse me nga raraunga i tangohia mai i nga poupou ma te whakamahi clickhousedb_fdw ka whakaatuhia. Mai i te ripanga ka kite koe he nui te rereketanga i waenga i te PostgreSQL me te ClickHouse, engari he iti noa te rereketanga i waenga i te ClickHouse me te clickhousedb_fdw.

Te whakamatautau i te mahinga o nga patai tātari i PostgreSQL, ClickHouse me clickhousedb_fdw (PostgreSQL)

Ko tenei kauwhata e whakaatu ana i te rereketanga o ClickhouseDB me clickhousedb_fdw. I roto i te nuinga o nga patai, ko te FDW i runga ake karekau i te teitei, he iti noa te mea nui engari mo Q12. Kei roto i tenei patai nga hono me tetahi rara ORDER BY. Na te ORDER BY GROUP/BY rara, ORDER BY e kore e taka iho ki ClickHouse.

I te Ripanga 2 ka kite tatou i te peke wa i nga patai Q12 me Q13. Ano ano, na te rara ORDER BY. Hei whakaū i tenei, i whakahaere au i nga patai Q-14 me Q-15 me te kore o te ORDER BY rara. Ki te kore te ORDER BY clause ko te 259ms te wa whakaoti, me te ORDER BY clause ko te 1364212. Hei patuiro i tenei patai kei te whakamarama au i nga patai e rua, a koinei nga hua o te whakamarama.

Q15: Karekau he Ota MA te Rarangi

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";

U15: Uiui Karekau he Ota MA te Rarangi

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)

U14: Uiui me te ORDER BY Clause

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";

U14: Mahere Uiui me te ORDER BY Clause

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)

mutunga

Ko nga hua o enei whakamatautau e whakaatu ana ko ClickHouse e tuku ana i nga mahi tino pai, a ko clickhousedb_fdw e tuku ana i nga painga mahi a ClickHouse mai i PostgreSQL. Ahakoa he nui ake i te wa e whakamahi ana i te clickhousedb_fdw, he iti noa iho, he rite ki nga mahi i tutuki ma te whakahaere taketake i runga i te paataka korero ClickHouse. Ka whakau hoki tenei ko te fdw i PostgreSQL he pai nga hua.

Te korerorero a Telegram ma te Clickhouse https://t.me/clickhouse_ru
Te whakawhitiwhiti korero ma te whakamahi i te PostgreSQL https://t.me/pgsql

Source: will.com

Tāpiri i te kōrero