په PostgreSQL، ClickHouse او clickhousedb_fdw (PostgreSQL) کې د تحلیلي پوښتنو د فعالیت ازموینه

په دې څیړنه کې، ما غوښتل وګورم چې د PostgreSQL پرځای د ClickHouse ډیټا سرچینې په کارولو سره د فعالیت ښه والی ترلاسه کیدی شي. زه د محصولاتو ګټې پوهیږم چې زه د ClickHouse کارولو څخه ترلاسه کوم. ایا دا ګټې به دوام ومومي که زه د PostgreSQL څخه د بهرني ډیټا ریپر (FDW) په کارولو سره ClickHouse ته لاسرسی وموم؟

د ډیټابیس چاپیریال مطالعه شوي د PostgreSQL v11، clickhousedb_fdw او ClickHouse ډیټابیس دي. په نهایت کې، د PostgreSQL v11 څخه به موږ د کلک هاؤس ډیټابیس ته زموږ د clickhousedb_fdw له لارې مختلف SQL پوښتنې پرمخ یوسو. بیا به موږ وګورو چې څنګه د FDW فعالیت د ورته پوښتنو سره پرتله کوي چې په اصلي PostgreSQL او اصلي ClickHouse کې روان دي.

د کلک هاؤس ډیټابیس

ClickHouse د خلاصې سرچینې کالمر ډیټابیس مدیریت سیسټم دی چې کولی شي د دودیز ډیټابیس لیدونو په پرتله 100-1000 ځله ګړندي فعالیت ترلاسه کړي ، له یوې ثانیې څخه لږ وخت کې د ملیارد قطارونو پروسس کولو وړ.

Clickhousedb_fdw

clickhousedb_fdw - د Clickhouse ډیټابیس یا FDW لپاره د بهرني ډیټا ریپر د پرکونا څخه د خلاصې سرچینې پروژه ده. دلته د پروژې GitHub ذخیره کولو لینک دی.

په مارچ کې ما یو بلاګ ولیکه چې تاسو ته زموږ د FDW په اړه نور معلومات درکوي.

لکه څنګه چې تاسو به وګورئ، دا د ClickHouse لپاره FDW چمتو کوي چې د PostgreSQL v11 سرور څخه د ClickHouse ډیټابیس څخه SELECT، او INSERT INTO ته اجازه ورکوي.

FDW د پرمختللي ب featuresو ملاتړ کوي لکه مجموعي او یوځای کیدل. دا د پام وړ فعالیت ته وده ورکوي د ریموټ سرور د سرچینو په کارولو سره د دې سرچینو پراخه عملیاتو لپاره.

د بنچمارک چاپیریال

  • سوپر مایکرو سرور:
    • Intel® Xeon® CPU E5-2683 v3 @ 2.00GHz
    • 2 ساکټونه / 28 کور / 56 تارونه
    • یادداشت: د 256GB رام
    • ذخیره کول: سیمسنگ SM863 1.9TB Enterprise SSD
    • د فایل سیسټم: ext4/xfs
  • OS: لینکس smblade01 4.15.0-42-عمومي #45~16.04.1-Ubuntu
  • PostgreSQL: 11 نسخه

د بنچمارک ازموینې

د دې ازموینې لپاره د ماشین لخوا رامینځته شوي ځینې ډیټا کارولو پرځای ، موږ د 1987 څخه تر 2018 پورې "د وخت راپور شوي آپریټر وخت لخوا تولید" ډیټا کارولې. تاسو کولی شئ ډاټا ته لاسرسی ومومئ زموږ د سکریپټ کارول دلته شتون لري.

د ډیټابیس اندازه 85 GB ده، د 109 کالمونو یو جدول چمتو کوي.

د بنچمارک پوښتنې

دلته هغه پوښتنې دي چې ما د ClickHouse، clickhousedb_fdw او PostgreSQL پرتله کولو لپاره کارولې.

Q#
پوښتنه د مجموعې او ګروپ لخوا لري

Q1
د اونۍ ورځ وټاکئ، شمېرنه(*) د وخت له وخت څخه چیرته چې کال >= 2000 او کال <= د 2008 ګروپ د اونۍ د ورځې لخوا ترتیب شوی د DESC لخوا؛

Q2
د اونۍ ورځ وټاکئ، شمېرنه(*) د وخت له وخت څخه چیرته چې ځنډول>10 او کال>= 2000 او کال <= د 2008 ګروپ د اونۍ د ورځې لخوا ترتیب کړئ د DESC لخوا؛

Q3
اصليت وټاکئ، شمېرنه(*) د وخت له وخت څخه چیرته چې ځنډول>10 او کال>= 2000 او کال <= 2008 ګروپ د اصلي ترتیب له مخې د DESC LIMIT 10 لخوا؛

Q4
انتخاب کیریر، شمیره() له وخت څخه چیرته ځنډول> 10 او کال = 2007 ګروپ د کیریر لخوا د شمیرې له مخې ترتیب () DESC؛

Q5
انتخاب a.Carrier,c,c2,c1000/c2 لکه د c3 څخه) له وخت څخه چیرته چې ځنډول> 10 او کال = د کیریر لخوا ګروپ 2007) یو داخلي ګډون (کیریر غوره کړئ، شمیره (*) د C2 په توګه له خپل وخت څخه چیرته چې کال = 2007 د کیریر لخوا ګروپ) b د کیریر = بی. BY c3 DESC؛

Q6
انتخاب a.Carrier,c,c2,c1000/c2 لکه د c3 څخه) د وخت له وخت څخه چیرته ځنډول> 10 او کال >= 2000 او کال <= د کیریر لخوا 2008 ګروپ) یو داخلي ګډون (کیریر وټاکئ، شمیره (*) د c2 په توګه د وخت څخه چیرته کال >= 2000 او کال <= 2008 کیریر ) b on a. Carrier=b. کیریر امر د c3 DESC لخوا؛

Q7
کیریر وټاکئ، اوسط (ډیپ ډیلي) * 1000 AS c3 له وخت څخه چیرته چې کال >= 2000 او کال <= د کیریر لخوا 2008 ګروپ؛

Q8
کال وټاکئ، اوسط (ډیپ ډیلي) له وخت څخه د کال په اساس ګروپ؛

Q9
کال غوره کړئ، د کال په اساس د وخت ګروپ څخه د c1 په توګه حساب کړئ (*)

د ایکس ایکس ایم ایکس ایکس
د اوسط (cnt) څخه وټاکئ (کال، میاشت، شمیره (*) د cnt په څیر د وخت څخه وټاکئ چیرته چې DepDel15 = 1 ګروپ د کال، میاشتې په اساس) a؛

د ایکس ایکس ایم ایکس ایکس
اوسط (c1) غوره کړئ (د کال، میاشت، شمیره (*) څخه د C1 په توګه د کال، میاشتې له مخې د وخت ګروپ څخه غوره کړئ؛

د ایکس ایکس ایم ایکس ایکس
د اصلي ښار نوم، د ښار نوم، شمېرنه(*) د وخت څخه د اصلي ښار نوم، د ښار د نوم د ترتیب له مخې د DESC LIMIT 10 لخوا ترتیب کړئ.

د ایکس ایکس ایم ایکس ایکس
د اصلي ښار نوم وټاکئ، شمیره (*) د وخت څخه د ګروپ لخوا د اصلي ښار نوم په ترتیب سره د سی ډیسک حد 10؛

پوښتنلیک شامل دي

د ایکس ایکس ایم ایکس ایکس
کال انتخاب کړئ، c1/c2 څخه (کال غوره کړئ، شمیره))1000 د c1 په توګه له وخت څخه چیرته DepDelay> د کال په اساس 10 ګروپ) یو داخلي ګډون (کال غوره کړئ، شمیره (*) د c2 په توګه د وخت له وخت څخه د کال په اساس ګروپ) b د a.Cear=b.کال په اساس د کال په اساس;

د ایکس ایکس ایم ایکس ایکس
a."کال" وټاکئ، c1/c2 څخه ("کال" غوره کړئ، شمیره))1000 د فونټیم څخه د c1 په توګه چیرې چې "DepDelay">10 ګروپ د "کال" په واسطه) یو داخلي ګډون ("کال" غوره کړئ، شمیره (*) د فونټایم ګروپ څخه د "کال" لخوا c2 په توګه ) b په a."کال"=b. "کال"؛

جدول-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

د ایکس ایکس ایم ایکس ایکس
34990
20102
56
148

د ایکس ایکس ایم ایکس ایکس
30489
51658
37
155

د ایکس ایکس ایم ایکس ایکس
39357
33742
186
1333

د ایکس ایکس ایم ایکس ایکس
29912
30709
101
384

د ایکس ایکس ایم ایکس ایکس
54126
39913
124
1364212

د ایکس ایکس ایم ایکس ایکس
97258
30211
245
259

جدول-1: په بنچمارک کې کارول شوي پوښتنو پلي کولو لپاره وخت نیول شوی

پایلې وګورئ

ګراف د پوښتنې د اجرا وخت په ملی ثانیو کې ښیي، د ایکس محور د پورته جدولونو څخه د پوښتنې شمیره ښیي، او Y محور په ملی ثانیو کې د اجرا کولو وخت ښیي. د Clickhouse پایلې او د پوسټګریس څخه ترلاسه شوي ډاټا د clickhousedb_fdw په کارولو سره ښودل شوي. له جدول څخه تاسو لیدلی شئ چې د PostgreSQL او ClickHouse ترمنځ لوی توپیر شتون لري، مګر د ClickHouse او clickhousedb_fdw ترمنځ لږ توپیر.

په PostgreSQL، ClickHouse او clickhousedb_fdw (PostgreSQL) کې د تحلیلي پوښتنو د فعالیت ازموینه

دا ګراف د ClickhouseDB او clickhousedb_fdw ترمنځ توپیر ښیې. په ډیری پوښتنو کې، د FDW سر سر دومره لوړ ندی او د Q12 پرته په سختۍ سره د پام وړ دی. په دې پوښتنه کې شاملول او د حکم له مخې بند شامل دي. د ORDER BY GROUP/BY بند له امله، ORDER BY ClickHouse ته نه ښکته کیږي.

په 2 جدول کې موږ د Q12 او Q13 پوښتنو کې د وخت کود ګورو. یوځل بیا ، دا د ORDER BY بند له امله رامینځته کیږي. د دې تصدیق کولو لپاره، ما د ORDER BY بند سره او پرته د Q-14 او Q-15 پوښتنې وکړې. د ORDER BY فقرې پرته د بشپړیدو وخت 259ms دی او د ORDER BY فقرې سره دا 1364212 دی. د دې پوښتنې ډیبګ کولو لپاره زه دواړه پوښتنې تشریح کوم او دلته د توضیحاتو پایلې دي.

پوښتنه 15: پرته له بندې حکم څخه

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

پوښتنه 15: پرته د بند له حکم څخه پوښتنه

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)

14 پوښتنه: د بند په واسطه د ترتیب سره پوښتنه

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

14 پوښتنه: د فقرې لخوا د ترتیب سره د پوښتنې پلان

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 عالي پایلې وړاندې کوي.

د کلک هاؤس له لارې د ټیلیګرام چیٹ https://t.me/clickhouse_ru
د PostgreSQL په کارولو سره د ټیلیګرام چیٹ https://t.me/pgsql

سرچینه: www.habr.com

Add a comment