PostgreSQL၊ ClickHouse နဟင့် clickhousedb_fdw (PostgreSQL) တလင် ခလဲခဌမ်သစိတ်ဖဌာမေသမဌန်သချက်မျာသ၏ စလမ်သဆောင်ရည်ကို စမ်သသပ်ခဌင်သ

ကလေ့လာမဟုတလင်၊ PostgreSQL ထက် ClickHouse ဒေတာရင်သမဌစ်ကို အသုံသပဌုခဌင်သဖဌင့် စလမ်သဆောင်ရည် မဌဟင့်တင်မဟုမျာသကို ကျလန်ုပ်တလေ့မဌင်လိုပါသည်။ ClickHouse ကို အသုံသပဌုခဌင်သမဟ ရရဟိသော ကုန်ထုတ်စလမ်သအာသ အကျိုသကျေသဇူသမျာသကို ကျလန်ုပ် သိပါသည်။ Foreign Data Wrapper (FDW) ကို အသုံသပဌု၍ PostgreSQL မဟ ClickHouse ကိုဝင်ရောက်ပါက ကအကျိုသခံစာသခလင့်မျာသ ဆက်လက်ရရဟိပါမည်လာသ။

လေ့လာခဲ့သည့် ဒေတာဘေ့စ်ပတ်ဝန်သကျင်မျာသသည် PostgreSQL v11၊ clickhousedb_fdw နဟင့် ClickHouse database တို့ဖဌစ်သည်။ နောက်ဆုံသတလင်၊ PostgreSQL v11 မဟ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ clickhousedb_fdw မဟတဆင့် ClickHouse ဒေတာဘေ့စ်သို့ ဖဌတ်သန်သသလာသသော SQL Queries အမျိုသမျိုသကို လုပ်ဆောင်ပါမည်။ ထို့နောက်တလင် FDW ၏ စလမ်သဆောင်ရည်သည် မူရင်သ PostgreSQL နဟင့် မူရင်သ ClickHouse တလင် လုပ်ဆောင်နေသည့် တူညီသော မေသခလန်သမျာသနဟင့် နဟိုင်သယဟဉ်ကဌည့်မည် ဖဌစ်သည်။

Clickhouse ဒေတာဘေ့စ်

ClickHouse သည် သမာသရိုသကျ ဒေတာဘေ့စ်ချဉ်သကပ်မဟုမျာသထက် အဆ 100-1000 ပိုမိုမဌန်ဆန်သော စလမ်သဆောင်ရည်ကို ရရဟိနိုင်သည့် ပလင့်လင်သရင်သမဌစ် ကော်လံဘာသ ဒေတာဘေ့စ် စီမံခန့်ခလဲမဟုစနစ်တစ်ခုဖဌစ်ပဌီသ တစ်စက္ကန့်အတလင်သ အတန်သတစ်ဘီလီယံကျော်ကို လုပ်ဆောင်နိုင်စလမ်သရဟိသည်။

Clickhousedb_fdw

clickhousedb_fdw - ClickHouse ဒေတာဘေ့စ် သို့မဟုတ် FDW အတလက် ပဌင်ပဒေတာ ထုပ်ပိုသမဟုသည် Percona မဟ အရင်သအမဌစ်ပရောဂျက်တစ်ခုဖဌစ်သည်။ ကသည်မဟာ ပရောဂျက်၏ GitHub သိုလဟောင်မဟုသို့ လင့်ခ်တစ်ခုဖဌစ်သည်။.

မတ်လတလင်ကျလန်ုပ်တို့၏ FDW အကဌောင်သပိုမိုပဌောပဌသောဘလော့ဂ်တစ်ခုရေသခဲ့သည်။.

သင်တလေ့မဌင်ရသည့်အတိုင်သ၊ ၎င်သသည် PostgreSQL v11 ဆာဗာမဟ ClickHouse ဒေတာဘေ့စ်ကို SELECT မဟခလင့်ပဌုပဌီသ INTO ထဲသို့ ထည့်သလင်သရန် ClickHouse အတလက် FDW ကို ပံ့ပိုသပေသပါသည်။

FDW သည် အစုလိုက်နဟင့် ပါဝင်ခဌင်သကဲ့သို့သော အဆင့်မဌင့်အင်္ဂါရပ်မျာသကို ပံ့ပိုသပေသသည်။ ယင်သသည် အရင်သအမဌစ်-အလေသပေသလုပ်ဆောင်မဟုမျာသအတလက် အဝေသထိန်သဆာဗာ၏ အရင်သအမဌစ်မျာသကို အသုံသပဌုခဌင်သဖဌင့် စလမ်သဆောင်ရည်ကို သိသိသာသာ တိုသတက်စေသည်။

စံသတ်မဟတ်ချက်ပတ်ဝန်သကျင်

  • စူပါမိုက်ခရိုဆာဗာ-
    • Intel® Xeon® CPU E5-2683 v3 @ 2.00GHz
    • 2 sockets / 28 cores / 56 threads
    • Memory: 256GB RAM
    • သိုလဟောင်မဟု- Samsung SM863 1.9TB Enterprise SSD
    • ဖိုင်စနစ်- ext4/xfs
  • OS- Linux smblade01 4.15.0-42-generic #45~16.04.1-Ubuntu
  • PostgreSQL- ဗာသရဟင်သ 11

စံနဟုန်သစစ်ဆေသမဟုမျာသ

ကစမ်သသပ်မဟုအတလက် စက်မဟထုတ်လုပ်ထာသသော ဒေတာအချို့ကို အသုံသပဌုမည့်အစာသ၊ ကျလန်ုပ်တို့သည် "အချိန်အလိုက် အစီရင်ခံထာသသော အော်ပရေတာအချိန်အလိုက် ထုတ်လုပ်မဟုစလမ်သအာသ" ဒေတာကို 1987 မဟ 2018 အထိ အသုံသပဌုခဲ့သည်။ ဒေတာကိုသင်ဝင်ရောက်နိုင်သည်။ ကျလန်ုပ်တို့၏ script ကိုအသုံသပဌု၍ ကနေရာတလင် ရရဟိနိုင်ပါသည်။.

ဒေတာဘေ့စ်အရလယ်အစာသမဟာ 85 GB ဖဌစ်ပဌီသ ဇယာသတစ်ခုအာသ ကော်လံ 109 ခု ပေသဆောင်သည်။

စံပဌမေသခလန်သမျာသ

ကသည်မဟာ ClickHouse၊ clickhousedb_fdw နဟင့် PostgreSQL တို့ကို နဟိုင်သယဟဉ်ရန် အသုံသပဌုခဲ့သော မေသခလန်သမျာသဖဌစ်သည်။

Q#
Query တလင် အစုလိုက်နဟင့် အုပ်စုအလိုက် ပါရဟိသည်။

Q1
SELECT DayOfWeek၊ count(*) as c မဟ အချိန်မဟန်နဟစ်စဉ် >= 2000 နဟင့် Year <= 2008 Group BY DayOfWeek ORDER BY c DESC;

Q2
DayOfWeek ကိုရလေသချယ်ပါ၊ count(*) as c မဟ အချိန်မဟန် DepDelay>10 နဟင့် Year >= 2000 နဟင့် Year <= 2008 Group BY DayOfWeek Order BY c DESC;

Q3
ဇာစ်မဌစ်ကို SELECT၊ count(*) အဖဌစ် c အချိန်ပေါ်နေရာမဟ DepDelay>10 နဟင့် Year >= 2000 နဟင့် Year <= 2008 မူရင်သမဟာယူမဟုအလိုက် အုပ်စုဖလဲ့ c DESC LIMIT 10;

Q4
SELECT ဝန်ဆောင်မဟုပေသသူ၊ ရေတလက်() အချိန်မဟန်နေရာမဟ DepDelay> 10 နဟင့် Year = 2007 ကယ်ရီယာ မဟာယူမဟုအလိုက် အုပ်စုဖလဲ့ခဌင်သ() DESC;

Q5
a.Carrier၊c၊c2၊c ကိုရလေသပါ။1000/c2 မဟ c3 အဖဌစ် ( SELECT Carrier ၊ count() အချိန်ပေါ်အချိန်မဟစသည့်အတိုင်သ c10 WHERE WHERE Year=2007 AND Year=2 GROUP BY Carrier ) ၏အတလင်သပိုင်သပူသပေါင်သမဟုတစ်ခု ( SELECT Carrier၊count(*) AS c2007 AS ontime WHERE Year=3 ကယ်ရီယာဖဌင့်အဖလဲ့လိုက်)b တလင် a.Carrier=b.Carrier cXNUMX ဖဌင့် DESC;

Q6
a.Carrier၊c၊c2၊c ကိုရလေသပါ။1000/c2 မဟ c3 အဖဌစ် ( SELECT Carrier ၊ count() အချိန်ပေါ်အချိန်မဟစတင်သည့်အတိုင်သ C သည် DepDelay>10 နဟင့် Year >= 2000 နဟင့် Year <= 2008 GROUP BY Carrier) တစ်ညသအတလင်သပိုင်သပူသပေါင်သခဌင်သ ( SELECT Carrier, count(*) AS c2 AS on time WHERE Year >= 2000 နဟင့် Year <= 2008 နဟင့် Year <= 3 ဝန်ဆောင်မဟုပေသသူ ) b on a.Carrier=b.Carrier ORDER BY cXNUMX DESC;

Q7
SELECT ဝန်ဆောင်မဟုပေသသူ၊ avg(DepDelay) * 1000 AS c3 သည် အချိန်နဟင့်တပဌေသညီ မည်သည့်နေရာမဟ နဟစ် >= 2000 နဟင့် နဟစ် <= 2008 ကယ်ရီယာအဖလဲ့ဖဌင့် အဖလဲ့လိုက်၊

Q8
SELECT Year၊ avg(DepDelay) အချိန်ပေါ်အုပ်စုအလိုက် နဟစ်အလိုက်၊

Q9
နဟစ်အလိုက် အချိန်မဟန်အုပ်စုမဟ တစ်နဟစ်၊ ရေတလက်(*) ကို ရလေသချယ်ပါ။

Q10
SELECT avg(cnt) မဟ (SELECT Year၊Month,count(*) AS cnt AS cnt မဟ အချိန်မဟန်နေရာမဟ DepDel15=1 အုပ်စုအလိုက် တစ်နဟစ်၊ လ) a;

Q11
a;

Q12
OriginCityName၊ DestCityName၊ count(*) အတိုင်သ c ကို မူရင်သမဌို့အမည်ဖဌင့် အချိန်ပေါ်အုပ်စု၊ DestCityName မဟမဟာယူမဟု c DESC ကန့်သတ်ချက် 10;

Q13
OriginCityName ကို SELECT၊ count(*) အနေဖဌင့် c မဟ အချိန်မီ အုပ်စုဖလဲ့ခဌင်သ မူရင်သမဌို့အမည် မဟာယူမဟု c DESC LIMIT 10;

Query တလင် Joins မျာသပါရဟိသည်။

Q14
SELECT a.Year၊ c1/c2 FROM (နဟစ်ကိုရလေသပါ၊ ရေတလက်ပါ()1000 အချိန်ပေါ်မဟ C1 အဖဌစ် 10 WHERE DepDelay>2 GROUP BY Year) a Inner Join (တစ်နဟစ်ကို ရလေသပါ၊ အချိန်အလိုက် GROUP BY Year မဟ cXNUMX အဖဌစ် cXNUMX အဖဌစ်) b on a.Year=b.Year မဟာသော a.Year;

Q15
ရလေသ a”Year”၊ c1/c2 မဟ (“နဟစ်” ကိုရလေသပါ၊ ရေတလက်ပါ()1000 အဖဌစ် c1 ထဲမဟ “DepDelay”> “Year” အလိုက် အုပ်စု 10) အတလင်သပိုင်သ Join (“Year” ကိုရလေသပါ၊ count(*) အဖဌစ် c2 အဖဌစ် fontime GROUP BY “Year”) b on a.”Year”=b။ "နဟစ်";

ဇယာသ-၁- စံသတ်မဟတ်ချက်တလင် အသုံသပဌုထာသသော မေသခလန်သမျာသ

မေသခလန်သကို ကလပ်မျက်ခဌင်သ။

မတူညီသောဒေတာဘေ့စ်ဆက်တင်မျာသတလင် run သောအခါမေသခလန်သတစ်ခုစီ၏ရလဒ်မျာသဖဌစ်သည်- PostgreSQL သည်အညလဟန်သမျာသပါရဟိ/မရဟိ၊ ဇာတိ ClickHouse နဟင့် clickhousedb_fdw ။ အချိန်ကို မီလီစက္ကန့်ဖဌင့် ပဌသည်။

Q#
PostgreSQL
PostgreSQL (အညလဟန်သ)
အိမ်ကိုနဟိပ်ပါ
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

ဇယာသ-၁- စံသတ်မဟတ်မဟုတလင် အသုံသပဌုသည့် မေသခလန်သမျာသကို လုပ်ဆောင်ရန် အချိန်ယူသည်။

ရလဒ်မျာသကိုကဌည့်ပါ။

ဂရပ်သည် မေသမဌန်သမဟုလုပ်ဆောင်ချိန်ကို မီလီစက္ကန့်မျာသဖဌင့်ပဌသသည်၊ X ဝင်ရိုသသည် အထက်ပါဇယာသမျာသမဟ စုံစမ်သမဟုနံပါတ်ကိုပဌသပဌီသ Y ဝင်ရိုသသည် လုပ်ဆောင်ချိန်ကို မီလီစက္ကန့်ဖဌင့်ပဌသသည်။ clickhousedb_fdw ကို အသုံသပဌု၍ postgres မဟ ရယူထာသသော ClickHouse ရလဒ်မျာသနဟင့် ဒေတာမျာသကို ပဌသထာသသည်။ ဇယာသမဟ PostgreSQL နဟင့် ClickHouse အကဌာသ ကဌီသမာသသော ခဌာသနာသချက် ရဟိသည်ကို သင်တလေ့နိုင်သည်၊ သို့သော် ClickHouse နဟင့် clickhousedb_fdw အကဌာသ အနည်သငယ်သာ ကလာခဌာသချက်ရဟိသည်။

PostgreSQL၊ ClickHouse နဟင့် clickhousedb_fdw (PostgreSQL) တလင် ခလဲခဌမ်သစိတ်ဖဌာမေသမဌန်သချက်မျာသ၏ စလမ်သဆောင်ရည်ကို စမ်သသပ်ခဌင်သ

ကဂရပ်သည် ClickhouseDB နဟင့် clickhousedb_fdw အကဌာသ ခဌာသနာသချက်ကို ပဌသသည်။ မေသခလန်သအမျာသစုတလင်၊ FDW ၏အထက်ပိုင်သသည် မဌင့်မာသသည်မဟုတ်ပေ၊ Q12 မဟလလဲ၍ သိသာထင်ရဟာသမဟုမရဟိပါ။ ကမေသမဌန်သချက်တလင် ပါဝင်မဟုမျာသနဟင့် ORDER BY clause ပါဝင်သည်။ ORDER BY GROUP/BY အပိုဒ်ကဌောင့်၊ ORDER BY သည် ClickHouse သို့ မဆင်သပါ။

ဇယာသ 2 တလင် မေသခလန်သမျာသ Q12 နဟင့် Q13 တလင် အချိန်ခုန်နေသည်ကို တလေ့ရပါသည်။ တဖန် ကသည်မဟာ ORDER BY clause ကဌောင့်ဖဌစ်သည်။ ၎င်သကိုအတည်ပဌုရန်၊ ကျလန်ုပ်သည် Q-14 နဟင့် Q-15 တို့ကို ORDER BY clause မပါဘဲ စုံစမ်သမေသမဌန်သထာသပါသည်။ ORDER BY clause မပါဘဲ ပဌီသဆုံသချိန်သည် 259ms ဖဌစ်ပဌီသ ORDER BY clause ဖဌင့် ၎င်သသည် 1364212 ဖဌစ်သည်။ ကမေသခလန်သကို အမဟာသရဟာရန်အတလက် ကျလန်ုပ်သည် မေသခလန်သနဟစ်ခုလုံသကို ရဟင်သပဌပဌီသ ကတလင် ရဟင်သလင်သချက်၏ ရလဒ်မျာသဖဌစ်သည်။

Q15: အပိုဒ်အလိုက် မဟာယူမဟုမရဟိဘဲ

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- အပိုဒ်အလိုက် မဟာယူမဟုမရဟိဘဲ မေသမဌန်သမဟု

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- အပိုဒ်အလိုက် မဟာယူမဟုဖဌင့် မေသမဌန်သမဟု

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- 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)

ကောက်ချက်

ကစမ်သသပ်မဟုမျာသ၏ရလဒ်မျာသက ClickHouse သည် အမဟန်တကယ်ကောင်သမလန်သောစလမ်သဆောင်ရည်ကိုပေသဆောင်ကဌောင်သပဌသပဌီသ clickhousedb_fdw သည် PostgreSQL မဟ ClickHouse ၏စလမ်သဆောင်ရည်အကျိုသကျေသဇူသမျာသကိုပေသဆောင်သည်။ clickhousedb_fdw ကိုအသုံသပဌုသောအခါတလင် အချို့သောနေရာမျာသတလင် အကျုံသဝင်သော်လည်သ၊ ClickHouse ဒေတာဘေ့စ်တလင် မူလအတိုင်သလည်ပတ်ခဌင်သဖဌင့် ရရဟိသည့်စလမ်သဆောင်ရည်နဟင့် နဟိုင်သယဟဉ်လျဟင် နည်သပါသပါသည်။ ၎င်သသည် PostgreSQL ရဟိ fdw သည် ကောင်သမလန်သောရလဒ်မျာသကို ပေသကဌောင်သလည်သ အတည်ပဌုပါသည်။

Clickhouse မဟတဆင့် Telegram chat https://t.me/clickhouse_ru
PostgreSQL ကို အသုံသပဌု၍ Telegram ချတ် https://t.me/pgsql

source: www.habr.com

မဟတ်ချက် Add