PostgreSQL، ClickHouse اور clickhousedb_fdw (PostgreSQL) میں تجزیاتی سوالات کی کارکردگی کی جانچ

اس مطالعہ میں، میں یہ دیکھنا چاہتا تھا کہ PostgreSQL کے بجائے 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، Percona کا ایک اوپن سورس پروجیکٹ ہے۔ یہاں پراجیکٹ کے GitHub ذخیرے کا لنک ہے۔.

مارچ میں میں نے ایک بلاگ لکھا جو آپ کو ہمارے FDW کے بارے میں مزید بتاتا ہے۔.

جیسا کہ آپ دیکھیں گے، یہ ClickHouse کے لیے FDW فراہم کرتا ہے جو PostgreSQL v11 سرور سے ClickHouse ڈیٹا بیس سے SELECT from، اور INSERT INTO کی اجازت دیتا ہے۔

FDW اعلی درجے کی خصوصیات کو سپورٹ کرتا ہے جیسے کہ مجموعی اور شمولیت۔ یہ ریموٹ سرور کے وسائل کو ان وسائل سے بھرپور آپریشنز کے لیے استعمال کرکے کارکردگی کو نمایاں طور پر بہتر بناتا ہے۔

بینچ مارک ماحول

  • سپر مائیکرو سرور:
    • Intel® Xeon® CPU E5-2683 v3 @ 2.00GHz
    • 2 ساکٹ / 28 کور / 56 تھریڈز
    • یاد داشت: 256GB رام۔
    • ذخیرہ: 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 تک کا ڈیٹا "وقت رپورٹ شدہ آپریٹر ٹائم کے ذریعے پیداواری صلاحیت" استعمال کیا۔ آپ ڈیٹا تک رسائی حاصل کر سکتے ہیں۔ یہاں دستیاب ہماری اسکرپٹ کا استعمال کرتے ہوئے.

ڈیٹا بیس کا سائز 85 جی بی ہے، جو 109 کالموں کا ایک ٹیبل فراہم کرتا ہے۔

بینچ مارک کے سوالات

یہاں وہ سوالات ہیں جو میں ClickHouse، clickhousedb_fdw اور PostgreSQL کا موازنہ کرنے کے لیے استعمال کرتا ہوں۔

Q#
استفسار میں مجموعے اور گروپ بذریعہ شامل ہیں۔

Q1
ہفتہ کے دن کا انتخاب کریں، شمار (*) کو وقت کے مطابق کریں جہاں سال >= 2000 اور سال <= 2008 گروپ بذریعہ ڈے آف ویک آرڈر بذریعہ c DESC؛

Q2
ہفتہ کا دن منتخب کریں، آن ٹائم سے شمار کریں

Q3
اصل کا انتخاب کریں، شمار (*) بطور c آن ٹائم سے جہاں DepDelay>10 اور سال>= 2000 اور سال <= 2008 گروپ بذریعہ اصل ترتیب c DESC LIMIT 10؛

Q4
کیریئر منتخب کریں، شمار () آن ٹائم سے جہاں DepDelay>10 اور سال = 2007 گروپ بذریعہ کیریئر آرڈر شمار کے لحاظ سے() DESC؛

Q5
SELECT a.Carier, c, c2, c1000/c2 بطور c3 FROM ( منتخب کریں کیریئر، شمار () بطور c آن ٹائم کہاں DepDelay> 10 اور سال = 2007 گروپ بذریعہ کیریئر) ایک اندرونی شمولیت (کیرئیر کو منتخب کریں، شمار (*) بحیثیت c2 آن ٹائم سے جہاں سال = 2007 گروپ بذریعہ کیریئر) b a.Carrier=b.ORDERCar بذریعہ c3 DESC؛

Q6
SELECT a.Carier, c, c2, c1000/c2 بطور c3 FROM ( منتخب کریں کیریئر، شمار () بحیثیت c آن ٹائم سے جہاں DepDelay> 10 اور سال >= 2000 اور سال <= 2008 گروپ بذریعہ کیریئر) ایک اندرونی شمولیت (کیرئیر کو منتخب کریں، شمار کریں کیریئر ) b پر a.Carrier=b.Carrier ORDER BY c2 DESC؛

Q7
کیریئر کا انتخاب کریں، اوسط (ڈیپ ڈیلے) * 1000 AS c3 آن ٹائم سے جہاں سال >= 2000 اور سال <= 2008 گروپ بذریعہ کیریئر؛

Q8
سال منتخب کریں، اوسط (ڈیپ ڈیلے) آن ٹائم سے سال کے لحاظ سے گروپ؛

Q9
سال کا انتخاب کریں، سال کے لحاظ سے آن ٹائم گروپ سے c1 کے طور پر شمار کریں (*)

Q10
منتخب کریں اوسط (cnt) سے (منتخب سال، مہینہ، شمار (*) بطور cnt کے طور پر آن ٹائم سے جہاں DepDel15=1 گروپ بلحاظ سال، ماہ) a؛

Q11
سے اوسط (c1) کو منتخب کریں (سال، مہینہ، شمار (*) بطور c1 آن ٹائم گروپ سے سال، ماہ کے لحاظ سے) a؛

Q12
OriginCityName، DestCityName، شمار(*) کو بطور وقت منتخب کریں۔

Q13
OriginCityName کو منتخب کریں، شمار (*) کو وقت سے پہلے گروپ کے طور پر OriginCityName آرڈر کے ذریعے c DESC LIMIT 10؛

سوال جوائن پر مشتمل ہے۔

Q14
منتخب کریں a.Year, c1/c2 FROM (سال منتخب کریں، شمار کریں))1000 بطور c1 آن ٹائم سے WHERE DepDelay>10 GROUP BY سال) ایک اندرونی شمولیت (سال منتخب کریں، شمار کریں

Q15
منتخب کریں a."سال"، c1/c2 FROM ("سال" کو منتخب کریں، شمار ()فونٹائم سے 1000 بطور c1 جہاں "DepDelay"> 10 گروپ بائے "سال") ایک اندرونی شمولیت ("سال" کو منتخب کریں، فونٹائم گروپ سے "سال" کے حساب سے c2 کے طور پر شمار کریں) b پر a."Year"=b۔ "سال"؛

جدول-1: بینچ مارک میں استعمال شدہ سوالات

استفسار پر عملدرآمد

مختلف ڈیٹا بیس سیٹنگز میں چلنے پر ہر ایک سوال کے نتائج یہ ہیں: 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

جدول-1: بینچ مارک میں استعمال ہونے والے سوالات کو انجام دینے میں لگنے والا وقت

نتائج دیکھیں

گراف استفسار کے عمل کا وقت ملی سیکنڈز میں دکھاتا ہے، X محور اوپر دیے گئے جدولوں سے استفسار کا نمبر دکھاتا ہے، اور Y محور ملی سیکنڈز میں عمل درآمد کا وقت دکھاتا ہے۔ Clickhousedb_fdw کا استعمال کرتے ہوئے پوسٹگریس سے حاصل کردہ کلک ہاؤس کے نتائج اور ڈیٹا دکھایا گیا ہے۔ ٹیبل سے آپ دیکھ سکتے ہیں کہ PostgreSQL اور ClickHouse کے درمیان بہت بڑا فرق ہے، لیکن ClickHouse اور clickhousedb_fdw کے درمیان کم سے کم فرق ہے۔

PostgreSQL، ClickHouse اور clickhousedb_fdw (PostgreSQL) میں تجزیاتی سوالات کی کارکردگی کی جانچ

یہ گراف ClickhouseDB اور clickhousedb_fdw کے درمیان فرق کو ظاہر کرتا ہے۔ زیادہ تر سوالات میں، FDW اوور ہیڈ اتنا زیادہ نہیں ہے اور Q12 کے علاوہ شاید ہی اہم ہے۔ اس استفسار میں شمولیت اور ایک ORDER BY شق شامل ہے۔ ORDER BY GROUP/BY شق کی وجہ سے، ORDER BY کلک ہاؤس پر نہیں آتا۔

جدول 2 میں ہم Q12 اور Q13 کے سوالات میں وقت کی چھلانگ دیکھتے ہیں۔ ایک بار پھر، یہ ORDER BY شق کی وجہ سے ہے۔ اس کی تصدیق کرنے کے لیے، میں نے ORDER BY شق کے ساتھ اور اس کے بغیر سوالات Q-14 اور Q-15 چلائے۔ ORDER BY شق کے بغیر تکمیل کا وقت 259ms ہے اور ORDER BY شق کے ساتھ یہ 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";

سوال 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)

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 بہترین نتائج فراہم کرتا ہے۔

کلک ہاؤس کے ذریعے ٹیلیگرام چیٹ https://t.me/clickhouse_ru
PostgreSQL کا استعمال کرتے ہوئے ٹیلیگرام چیٹ https://t.me/pgsql

ماخذ: www.habr.com

نیا تبصرہ شامل کریں