இந்த ஆய்வில், PostgreSQL ஐ விட ClickHouse தரவு மூலத்தைப் பயன்படுத்துவதன் மூலம் என்ன செயல்திறன் மேம்பாடுகளை அடைய முடியும் என்பதைப் பார்க்க விரும்பினேன். ClickHouse ஐப் பயன்படுத்துவதன் மூலம் நான் பெறும் உற்பத்தித்திறன் நன்மைகளை நான் அறிவேன். நான் ஒரு வெளிநாட்டு டேட்டா ரேப்பரை (FDW) பயன்படுத்தி PostgreSQL இலிருந்து ClickHouse ஐ அணுகினால் இந்த நன்மைகள் தொடருமா?
ஆய்வு செய்யப்பட்ட தரவுத்தள சூழல்கள் PostgreSQL v11, clickhousedb_fdw மற்றும் ClickHouse தரவுத்தளமாகும். இறுதியில், PostgreSQL v11 இலிருந்து நாங்கள் எங்கள் clickhousedb_fdw மூலம் ClickHouse தரவுத்தளத்திற்கு பல்வேறு SQL வினவல்களை இயக்குவோம். FDW இன் செயல்திறன் நேட்டிவ் PostgreSQL மற்றும் நேட்டிவ் ClickHouse இல் இயங்கும் அதே வினவல்களுடன் எவ்வாறு ஒப்பிடுகிறது என்பதைப் பார்ப்போம்.
கிளிக்ஹவுஸ் தரவுத்தளம்
ClickHouse என்பது ஒரு திறந்த மூல நிரல் தரவுத்தள மேலாண்மை அமைப்பாகும், இது பாரம்பரிய தரவுத்தள அணுகுமுறைகளை விட 100-1000 மடங்கு வேகமாக செயல்திறனை அடைய முடியும், ஒரு வினாடிக்கும் குறைவான நேரத்தில் ஒரு பில்லியன் வரிசைகளை செயலாக்கும் திறன் கொண்டது.
Clickhousedb_fdw
clickhousedb_fdw - ClickHouse தரவுத்தளத்திற்கான வெளிப்புற தரவு ரேப்பர் அல்லது FDW என்பது பெர்கோனாவின் திறந்த மூல திட்டமாகும்.
நீங்கள் பார்ப்பது போல், இது ClickHouse க்கான FDW ஐ வழங்குகிறது, இது PostgreSQL v11 சேவையகத்திலிருந்து ClickHouse தரவுத்தளத்திலிருந்து SELECT மற்றும் INSERT ஐ அனுமதிக்கிறது.
ஒருங்கிணைத்தல் மற்றும் இணைத்தல் போன்ற மேம்பட்ட அம்சங்களை FDW ஆதரிக்கிறது. ரிமோட் சர்வரின் வளங்களை இந்த வள-தீவிர செயல்பாடுகளுக்குப் பயன்படுத்துவதன் மூலம் இது செயல்திறனை கணிசமாக மேம்படுத்துகிறது.
பெஞ்ச்மார்க் சூழல்
- சூப்பர் மைக்ரோ சர்வர்:
- Intel® Xeon® CPU E5-2683 v3 @ 2.00GHz
- 2 சாக்கெட்டுகள் / 28 கோர்கள் / 56 நூல்கள்
- நினைவகம்: 256 ஜிபி ரேம்
- சேமிப்பு: Samsung SM863 1.9TB எண்டர்பிரைஸ் SSD
- கோப்பு முறைமை: ext4/xfs
- OS: Linux smblade01 4.15.0-42-generic #45~16.04.1-Ubuntu
- PostgreSQL: பதிப்பு 11
பெஞ்ச்மார்க் சோதனைகள்
இந்தச் சோதனைக்காக சில இயந்திரத்தால் உருவாக்கப்பட்ட தரவுத் தொகுப்பைப் பயன்படுத்துவதற்குப் பதிலாக, 1987 முதல் 2018 வரையிலான "நேரம் அறிக்கையிடப்பட்ட ஆபரேட்டர் நேரத்தின் மூலம் உற்பத்தித்திறன்" தரவைப் பயன்படுத்தினோம். நீங்கள் தரவை அணுகலாம்
தரவுத்தள அளவு 85 ஜிபி ஆகும், இது 109 நெடுவரிசைகளைக் கொண்ட ஒரு அட்டவணையை வழங்குகிறது.
பெஞ்ச்மார்க் வினவல்கள்
ClickHouse, clickhousedb_fdw மற்றும் PostgreSQL ஐ ஒப்பிட நான் பயன்படுத்திய வினவல்கள் இதோ.
Q#
வினவல் தொகுப்பையும் குழுவையும் கொண்டுள்ளது
Q1
DayOfWeek ஐத் தேர்ந்தெடுங்கள், எண்ணி(*) AS AS INTIM
Q2
DayOfWeek ஐத் தேர்ந்தெடுங்கள், DepDelay>10 மற்றும் ஆண்டு >= 2000 மற்றும் ஆண்டு <= 2008 குழுவில் இருந்து டேஆஃப்வீக் ஆர்டர் மூலம் c DESC மூலம் எண்ணி(*) என எண்ணவும்;
Q3
பிறப்பிடத்தைத் தேர்ந்தெடுங்கள், நேரத்திலிருந்து (*) என எண்ணுங்கள், எங்கே DepDelay>10 மற்றும் ஆண்டு >= 2000 மற்றும் ஆண்டு <= 2008 குழுவின் தோற்றத்தின்படி ஆணை c DESC LIMIT 10;
Q4
கேரியரைத் தேர்ந்தெடு, எண்ணிக்கை() நேரத்திலிருந்து எங்கே DepDelay>10 மற்றும் ஆண்டு = 2007 குழுவின் மூலம் கேரியர் ஆர்டர் எண்ணிக்கை () DESC;
Q5
SELECT a.Carrier, c, c2, c1000/c2 இலிருந்து c3 ஆக (கேரியரைத் தேர்ந்தெடு, எண்ணிக்கை() கேரியர் ஆன் டைமில் இருந்து டிப்டிலே>10 மற்றும் ஆண்டு=2007 கேரியர் மூலம் குழு ) ஒரு உள் சேர் (கேரியரைத் தேர்ந்தெடு, எண்ணிக்கை(*) என c2 ஆன் டைமில் இருந்து எங்கே ஆண்டு=2007 கேரியர் மூலம் குழு) b இல் a.Carrier=b.Carrier Order C3 DESC மூலம்;
Q6
SELECT a.Carrier, c, c2, c1000/c2 இலிருந்து c3 ஆக (கேரியரைத் தேர்ந்தெடு, எண்ணிக்கை() AS AS IN time from on time Dhere DepDelay>10 மற்றும் ஆண்டு >= 2000 மற்றும் ஆண்டு <= 2008 குழு மூலம் கேரியர்) ஒரு உள் சேர் ( கேரியரைத் தேர்ந்தெடு, எண்ணி(*) c2 ஆக இருக்கும் நேரத்திலிருந்து எங்கே ஆண்டு >= 2000 மற்றும் ஆண்டு <= 2008 கேரியர் ) b on a.Carrier=b.Carrier ஆர்டர் மூலம் c3 DESC;
Q7
கேரியரைத் தேர்ந்தெடுங்கள், சராசரி (DepDelay) * 1000 AS c3 நேரத்திலிருந்து எங்கிருந்து ஆண்டு >= 2000 மற்றும் ஆண்டு <= 2008 குழு மூலம் கேரியர்;
Q8
ஆன்டைம் குழுவில் இருந்து ஆண்டு, சராசரி (DepDelay) ஆண்டு வாரியாக தேர்ந்தெடுக்கவும்;
Q9
ஆண்டைத் தேர்ந்தெடுக்கவும், ஆண்டு வாரியாக நேரக் குழுவிலிருந்து c1 ஆக எண்ணுங்கள் (*);
Q10
சராசரி(சிஎன்டி) இலிருந்து (ஆண்டு,மாதம்,எண்ணிக்கை(*) தேர்வு நேரத்திலிருந்து தேர்ந்தெடுக்கவும் DepDel15=1 குழு ஆண்டு,மாதம்) a;
Q11
இலிருந்து சராசரி(c1) ஐ தேர்ந்தெடு (ஆண்டு,மாதம்,எண்ணிக்கை(*)ஐ ஆண்டு,மாதம் வாரியாக நேரக் குழுவிலிருந்து c1 ஆக தேர்ந்தெடுக்கவும்) a;
Q12
OriginCityName, DestCityName, எண்ணிக்கை (*) AS C AS CROUP BY OriginCityName, DestCityName ஆர்டர் c DESC LIMIT 10;
Q13
OriginCityName ஐத் தேர்ந்தெடுங்கள், C DESC LIMIT 10ன்படி OriginCityName ஆர்டர் மூலம் ஆன்டைம் குழுவிலிருந்து எண்ணி(*) ஆகவும்;
வினவல் இணைப்புகளைக் கொண்டுள்ளது
Q14
ஒரு.ஆண்டு, c1/c2 ஐத் தேர்ந்தெடு (ஆண்டு, எண்ணிக்கையைத் தேர்ந்தெடுக்கவும்()1000 ஆன்டைம் எங்கிருந்து டிப்டெலே>ஆண்டு வாரியாக 1 குழு) ஒரு உள் சேர்ப்பு (ஆண்டைத் தேர்ந்தெடுங்கள், ஆன்டைம் குரூப்பில் இருந்து c10 ஆக எண்ணி(*) ஆண்டு ) b இல்.
Q15
ஒரு.”ஆண்டு”, c1/c2 இலிருந்து (“ஆண்டு” என்பதைத் தேர்ந்தெடுக்கவும், எண்ணிக்கை ()"DepDelay"> 1000 குழுவில் இருந்து c1 ஆக 10 "ஆண்டு";
அட்டவணை-1: அளவுகோலில் பயன்படுத்தப்படும் வினவல்கள்
வினவல் மரணதண்டனை
வெவ்வேறு தரவுத்தள அமைப்புகளில் இயங்கும் போது ஒவ்வொரு வினவல்களின் முடிவுகள் இங்கே உள்ளன: PostgreSQL இன்டெக்ஸ்கள் மற்றும் இல்லாமல், சொந்த ClickHouse மற்றும் clickhousedb_fdw. நேரம் மில்லி விநாடிகளில் காட்டப்படுகிறது.
Q#
போஸ்ட்கெரே
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
அட்டவணை-1: அளவுகோலில் பயன்படுத்தப்படும் வினவல்களைச் செயல்படுத்த எடுக்கும் நேரம்
முடிவுகளைக் காண்க
வினவல் செயல்படுத்தும் நேரத்தை வரைபடம் மில்லி விநாடிகளில் காட்டுகிறது, X அச்சு மேலே உள்ள அட்டவணையில் இருந்து வினவல் எண்ணைக் காட்டுகிறது, Y அச்சு மில்லி விநாடிகளில் செயல்படுத்தும் நேரத்தைக் காட்டுகிறது. Clickhousedb_fdwஐப் பயன்படுத்தி postgres இல் இருந்து பெறப்பட்ட ClickHouse முடிவுகள் மற்றும் தரவு காட்டப்படுகின்றன. PostgreSQL க்கும் ClickHouse க்கும் இடையே ஒரு பெரிய வித்தியாசம் இருப்பதை அட்டவணையில் இருந்து நீங்கள் காணலாம், ஆனால் ClickHouse மற்றும் clickhousedb_fdw க்கு இடையே குறைந்த வேறுபாடு உள்ளது.
இந்த வரைபடம் ClickhouseDB மற்றும் clickhousedb_fdw இடையே உள்ள வேறுபாட்டைக் காட்டுகிறது. பெரும்பாலான வினவல்களில், FDW மேல்நிலை அவ்வளவு அதிகமாக இல்லை மற்றும் Q12 தவிர, குறிப்பிடத்தக்கதாக இல்லை. இந்த வினவலில் இணைத்தல் மற்றும் ஒரு ஆர்டர் ஆகியவை அடங்கும். ஆர்டர் மூலம் குழு/மூலம் பிரிவின் காரணமாக, ஆர்டர் மூலம் கிளிக்ஹவுஸ் கைவிடப்படாது.
அட்டவணை 2 இல் Q12 மற்றும் Q13 வினவல்களில் நேரம் தாண்டுவதைக் காண்கிறோம். மீண்டும், இது ஆர்டர் பை ஷரத்தால் ஏற்படுகிறது. இதை உறுதிப்படுத்த, நான் Q-14 மற்றும் Q-15 வினவல்களை ஆர்டர் மூலம் ஆர்டர் செய்தேன். ஆர்டர் பை ஷரத்து இல்லாமல் நிறைவு நேரம் 259எம்எஸ் மற்றும் ஆர்டர் பை ஷரத்துடன் 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: பிரிவின்படி ஆர்டருடன் கூடிய வினவல் திட்டம்
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 ஐப் பயன்படுத்தும் போது சில மேல்நிலைகள் இருந்தாலும், கிளிக்ஹவுஸ் தரவுத்தளத்தில் இயல்பாக இயங்குவதன் மூலம் அடையப்பட்ட செயல்திறனுடன் ஒப்பிடத்தக்கது. PostgreSQL இல் உள்ள fdw சிறந்த முடிவுகளை வழங்குகிறது என்பதையும் இது உறுதிப்படுத்துகிறது.
Clickhouse வழியாக டெலிகிராம் அரட்டை
PostgreSQL ஐப் பயன்படுத்தி டெலிகிராம் அரட்டை
ஆதாரம்: www.habr.com