عام آدمی کی شرائط میں ، ڈیٹا بیس میں تیز اور تقسیم کرنے میں کیا فرق ہے؟


جواب 1:

صرف NoSQL ڈیٹا بیس کے سلسلے میں شیئرنگ کے بارے میں بات کرنے کی کوئی خاص وجہ نہیں ہے۔ جہاں تک میں سمجھتا ہوں ، نو ایس کیو ایل کی تحریک کارکردگی ، اسکیل ایبلٹی اور اعلی دستیابی سے کارفرما ہے۔ لہذا یہ ڈیزائن تکنیک زیادہ تر NSQL ڈیٹا بیس میں کسی نہ کسی طرح یا کسی اور طرح سے بہت عمومی ہے جو افقی اسکیل ایبلٹی - ایک سے زیادہ مشینوں (نوڈس) کو اسکیلنگ کی حمایت کرتی ہے۔

ہاں ، متعدد مشینوں میں ڈیٹا کی تقسیم عام ہے یا کم سے کم رشتہ دار ڈیٹا بیس کے لئے نان اسٹارٹر نہیں۔ میں نے جواب کے آخر میں ایک مثال دی ہے۔

تقسیم اور شیڈنگ جیسی شرائط پر آتے ہوئے ، میں دیکھ رہا ہوں کہ مختلف ادبیات میں اس کے مضمر معنی اور استعمال میں ایک وورلیپ ہے۔ مثال کے طور پر ، DynamoDB پر SOSP کاغذ واضح طور پر تذکرہ کرتا ہے:

"ڈیٹا تقسیم کاری کا استعمال کرتے ہوئے متعدد سرورز میں تقسیم کیا جاتا ہے ، اور ہر تقسیم کو دستیابی فراہم کرنے کے لئے دوبارہ نقل تیار کیا جاتا ہے۔ تقسیم کرنے کی تکنیک (ارف تقسیم) مستقل ہیشنگ ہے۔

اگر آپ دیکھتے ہیں کہ منگو ڈی بی کا آن لائن دستی:

"شیئرنگ ایک سے زیادہ مختلف سرورز میں ڈیٹا تقسیم کرنے کا ایک طریقہ ہے۔ ہم تیزنگ کے ذریعہ افقی اسکیل ایبلٹی حاصل کرتے ہیں۔

مجھے واقعتا database دو مختلف ڈیٹا بیس پر ادب کی طرف سے ان دو بیانات کے مضمر معنی میں کوئی فرق نظر نہیں آتا ہے۔ دونوں متعدد مشینوں میں ڈیٹا تقسیم کرنے اور ڈیٹا بیس فن تعمیر کو پیمانے پر بنانے کی کوشش کر رہے ہیں۔

اسکیلنگ کی بنیادی وجوہات ایک جیسی ہیں: ڈیٹا سیٹ میں اضافے ، صارف کی درخواستوں (سرور پر بوجھ) ، محدود سی پی یو پروسیسنگ پاور ، اسٹوریج کی ضروریات ، DRAM گنجائش ، I / O بینڈوتھ ایک ہی مشین پر ، ناکامی کا واحد نقطہ اور۔ کوئی غلطی رواداری وغیرہ۔

لہذا یہ دونوں ڈیٹا بیس (اور بہت سے دوسرے نمبر ایس کیو ایل ڈیٹا بیس) کلسٹرڈ تعیناتی میں متعدد مختلف مشینوں میں ڈیٹا تقسیم کرتے ہیں۔ تقسیم کے لئے استعمال ہونے والی حکمت عملی کے بارے میں بات کرنا بے معنی ہے۔

سمجھنے کے لئے بنیادی چیز یہ ہے۔ آئیے ابھی پارٹیشن کا لفظ استعمال کریں۔

میرے پاس ڈیٹا آئٹم (ریکارڈ) کا ایک سیٹ ہے۔ ہر ریکارڈ میں ایک کلید ہوتی ہے۔ میں اس ریکارڈ کو ایک سے زیادہ مختلف یونٹوں میں تقسیم کرنے (تقسیم کرنے) کے لئے استعمال کرسکتا ہوں۔ اگر ہم اوریکل آر ڈی بی ایم ایس کے بارے میں بات کریں تو ، ٹیبل کی تقسیم کافی عرصے سے موجود ہے۔ پارٹیشن کی کلید کا استعمال کرتے ہوئے ، ٹیبل کے ریکارڈز کو 2 یا اس سے زیادہ پارٹیشنوں میں تقسیم کردیا گیا ہے۔ یہ پارٹیشنز اب بھی اسی ڈی بی مثال کے کنٹرول میں ہیں: وہی سی پی یو ، میموری ، I / O ، اسٹوریج کے وسائل کو دوسرے ہم مرتبہ پارٹیشنوں اور غیر تقسیم شدہ جدولوں کے ساتھ بھی شیئر کریں۔

جب کوئ استفسار آتا ہے تو ہم پہلے طے کرتے ہیں کہ اس سوال پر کون سا پارٹیشن موجود ہے۔ متعلقہ تقسیم کے اعداد و شمار پر اس کے بعد استفسار کے نتائج واپس کرنے کے لئے تیار کیا جاتا ہے۔ دوسرے پارٹیشنوں کو چھونے کی ضرورت نہیں ہے۔

اوریکل ہش ، رینج ، اور لسٹ پر مبنی تقسیم کی حمایت کرتا ہے۔ ان اور بہت ساری تقسیم کاری اسکیموں کا مقصد آسان ہے: کسی ریکارڈ کے لئے کوئی کلیدی دیئے جانے کے بعد ، منزل مقصود کا تعین کریں جس سے اس کا تعلق ہوگا۔

اب تیز کرنے کے بارے میں بات کرتے ہیں۔ نوٹ کریں کہ اوریکل کے تناظر میں بیان کی گئی تقسیم کے تصور میں ایک ہی DB مثال (اسی وجہ سے ایک ہی جسمانی مشین) کی نگرانی میں تمام پارٹیشنز تھے۔

اس سے پتہ چلتا ہے کہ مختلف جسمانی مشینوں / نوڈس میں پارٹشن کو تیز کرنا کہا جاتا ہے۔ اب ہر ایک تقسیم بالکل مختلف جسمانی مشین پر بیٹھتی ہے ، اور اس طرح ایک مختلف اسکیما میں اور ایک الگ ڈیٹا بیس مثال کے کنٹرول میں ہے۔ منگو ڈی بی میں یہی کیا جاتا ہے۔ متعدد مشینوں میں ڈیٹا تقسیم کرنے کے نقطaches نظر ہیش اور رینج ہیں۔

اسی طرح ڈائنوموڈ بی اور کیسینڈرا میں بھی یہی کام کیا جاتا ہے جہاں تقسیم کی تکنیک کا تسلسل ہیشنگ ہوتا ہے۔

تیز اور تقسیم کے مابین یہ فرق قابل قبول ہے۔

"تیز کرنا ایک سے زیادہ مختلف مشینوں میں ڈیٹا کی تقسیم یا تقسیم ہے جبکہ تقسیم اسی مشین پر ڈیٹا کی تقسیم ہے۔"

میں ذاتی طور پر اس فرق کے ساتھ جانا چاہوں گا حالانکہ واقعی میں یہ کہنا کچھ بھی نہیں روکتا ہے کہ "تیز مشینیں مختلف مشینوں میں تقسیم ہو رہی ہیں"۔

دونوں کو تقسیم کی چابی سے کام کرنا ہوگا۔ اب ہم اسے "تیز کلید" یا "پارٹیشن کیجی" کہہ سکتے ہیں۔ واقعی اس سے کوئی فرق نہیں پڑتا ہے۔ در حقیقت منگو ڈی بی کی دستاویزات میں "تقسیم" اور "تیز" دونوں شرائط استعمال کی گئی ہیں۔ ڈائنوموڈبی اور کیسینڈرا صرف "تقسیم" کی اصطلاح استعمال کرتے ہیں۔

اس مثال کی طرف آرہا ہے جس کا میں نے جواب کے آغاز میں حوالہ دیا تھا۔ اوریکل آر اے سی اوریکل ڈی بی کی ایک کلسٹرڈ تعیناتی ہے - ہر مثال الگ نوڈ پر چلتی ہے ، اور اس طرح سی پی یو ، میموری وسائل سے الگ ہے۔ اسٹوریج / ڈسک مشترکہ ہے - مشترکہ ڈسک فن تعمیر۔

اوریکل آر اے سی میں ، ہم ڈیٹا کو متعدد مثالوں میں تقسیم کرسکتے ہیں۔ جب ایک ٹی اے سی آر اے سی ماحول میں محفوظ ہوتا ہے تو آر اے ایس نوڈس کے پار ہیش کو تقسیم کیا جاسکتا ہے (پارٹیشن کی کی ہیش ویلیو کا استعمال کرتے ہوئے)۔ ہیش کی قیمت اس بات کا تعین کرے گی کہ کلید (اور اس کا ریکارڈ) کس نوڈ پر جائے گا۔ شارڈنگ کی تعریف کے مطابق ، ہم آر اے سی میں جو کچھ کر سکتے ہیں اس کا ایک طرح سے شرڈنگ سے تعلق ہے لیکن ہم اسے تقسیم کی حیثیت سے کہتے ہیں۔ ایک بار پھر اوورلیپ

ایک کلیدی فرق ہے۔ آر اے سی _ مشترکہ کچھ بھی نہیں ہے۔ یہ ہر چیز کا مشترکہ فن تعمیر بھی نہیں ہے۔ یہ مشترکہ ڈسک کا فن تعمیر ہے ، اور اسی وجہ سے میرے خیال میں یہاں استعمال کرنا شرڈنگ صحیح اصطلاح نہیں ہے حالانکہ ابھی بھی مختلف جسمانی نوڈس میں ڈیٹا تقسیم ہورہا ہے۔

یہی وجہ ہے کہ شارڈنگ کا اشتراک مشترکہ فن تعمیرات سے ہے جہاں ہم متعدد مختلف نوڈس میں تقسیم / تقسیم کا ڈیٹا تقسیم کرتے ہیں ، اور نوڈس کسی بھی قسم کے وسائل کا اشتراک نہیں کرتے ہیں۔ یہ سمجھنے میں کلیدی فرق ہے۔


جواب 2:

پہلے ، آپ کے سوال کا دوسرا حصہ: میں نے یہ بھی دیکھا ہے۔

Netezza یقینی طور پر مشترکہ ہے- کچھ نہیں ، جیسا کہ NoSQL / NewSQL پلیٹ فارم ہیں:

HTTP: //www.idt.mdh.se/kurser/ct3 ...

لیکن مجھے نہیں معلوم کہ اس کو تیز کیوں نہیں کہا جاتا ہے۔ شاید یہ صرف NoSQL چیز ہے۔ اگرچہ مجھے ریڈ شفٹ کے لئے ایسا ہی ایک حوالہ ملا تھا:

ایمیزون ریڈشیفٹ اور تیز سوالات کی خصوصیات اور کارکردگی کا موازنہ کرنا

اب آپ کے سوال کے پہلے حصے کے لئے:

شیئرنگ سے مراد وہ فن تعمیر ہوتا ہے جہاں اعداد و شمار کو تمام سامان (سستے) کمپیوٹرز میں تقسیم کیا جاتا ہے: ایک تقسیم شدہ ، مشترکہ کچھ بھی نہیں فن تعمیر جس میں تمام نوڈس دیئے گئے سوال کو مطمئن کرنے کے لئے کام کرتے ہیں ، لیکن وہ ایک دوسرے سے آزادانہ طور پر کام کرتے ہیں ، کسی ابتدائی یا ماسٹر نوڈ کو واپس اطلاع دیتے ہیں۔ جب کیا نوڈس میموری یا ڈسک کی جگہ کا اشتراک نہیں کرتے ہیں۔ سستے ہونے کے ناطے ، ہم بہت سے نوڈس برداشت کرسکتے ہیں ، جو پلیٹ فارم کو بڑے پیمانے پر متوازی پروسیسنگ (ایم پی پی) بناتا ہے۔ اعداد و شمار عام طور پر نوڈس پر ڈسٹری بیوشن کی کلید (یا حصgmentہ بندی کی شق ، ورٹیکا میں) کے ذریعے تقسیم کیا جاتا ہے۔ لہذا آرڈرز ایک ہی ٹیبل میں موجود ہوں گے ، جسے آرڈرز_ فیکٹ کہتے ہیں ، اور یہ تمام نوڈس میں تقسیم کیا جائے گا ، جس میں ڈسٹری بیوشن کلید کے ذریعہ نوڈ کو تفویض کیا گیا ہے۔

تقسیم: یہاں تین قسمیں ہیں - افقی ، عمودی ، اور ٹیبل تقسیم۔

افقی پارٹیشننگ اعداد و شمار کو منظم کرتی ہے ، پتوں کو کہتے ہیں ، اس معاملے میں پوسٹل کوڈ / جغرافیائی خطہ ہوسکتا ہے ، تاکہ مشرقی پوسٹل کوڈ ایسٹ پوسٹل کوڈ ٹیبل میں ہوں اور مغربی پوسٹل کوڈ ویسٹ پوسٹل کوڈ ٹیبل میں ہوں۔ یہ دونوں میزیں ایک جیسی ہیں لیکن مختلف اعداد و شمار کے ساتھ۔

عمودی تقسیم میں ٹیبل کو دو کالموں کے درمیان تقسیم کرنا شامل ہوتا ہے ، لہذا تقسیم کے بائیں طرف تمام کالم ایک ٹیبل میں ہیں ، اور وہ دوسرے میں دائیں طرف ہیں۔ یہ عمل غیر معمولی ہے۔ استعمال کا معاملہ اس وقت ہوتا ہے جب کچھ کالم شاید ہی استعمال کیے جاتے ہوں یا بہت بڑے ہوں۔

ٹیبل کی تقسیم بھی افقی ہوتی ہے ، لیکن یہ منطقی ہے ، جسمانی نہیں ہے ، اور یہ ایک ہی ٹیبل میں موجود ہے۔ ڈیٹا کو تقسیم کی کلید کے ذریعہ منظم کیا جاتا ہے ، جو نوڈس کے لئے تقسیم کی کلید کی طرح ہوتا ہے۔ اس سے غیر متعلقہ پارٹیشنز کو چھوڑ کر سوالات کو تیزی سے چلانے کی اجازت ملتی ہے۔

ذرائع:

شیئرنگ بمقابلہ افقی تقسیم - تیز (ڈیٹا بیس فن تعمیر):

افقی اور عمودی تقسیم اور مشرق / مغرب زپ کوڈ: (پارٹیشن (ڈیٹا بیس))

ان شرائط کو استعمال کرتے وقت احتیاط کریں۔ انہیں مختلف پلیٹ فارمز میں مختلف طریقے سے استعمال کیا جاسکتا ہے۔ پوائنٹ پوائنٹ ، ویرٹیکا: پارٹیشنگ اور سیگمنٹینگ ڈیٹا

امید ہے یہ مدد کریگا!


جواب 3:

ایک "عام آدمی" کی وضاحت یہ ہے کہ رشتہ دار پارٹیشنگ ایک بڑی لغت میں ٹیبز ہیں جن پر خطوط ہیں - آپ کو وہ خط ٹیب ملتا ہے جسے آپ چاہتے ہیں اور آپ اسے کھول دیتے ہیں ، اور آپ کو ڈکشنری کا ایک سیکشن مل گیا ہے جس کی وجہ سے آپ جلدی سے ہوسکتے ہیں۔ دائیں صفحے پر پلٹائیں اور اپنا لفظ ڈھونڈیں ، یہاں تک کہ اگر لغت ہزاروں صفحات پر لمبی ہو۔

شیئرنگ ایک کثیر حجم کا انسائیکلوپیڈیا ہے۔ اے بی والیوم 1 میں ہیں ، سی ڈی جلد 2 میں ہے ، وغیرہ۔

بطور خاص وضاحت…

رشتہ دار ڈیٹا بیس میں پارٹیشن تقسیم ٹیبل کی سطح پر کی جاتی ہے ، جس میں کسی قسم کا پارٹی اصول ہوتا ہے۔ یہ جدول (اور کچھ ڈی بی کی طرح اوریکل ، انڈیکس) کو الگ الگ اسٹوریج حصوں میں تقسیم کرتا ہے جو قطاروں پر مشتمل ہوتا ہے جو حصہ اصول یا حصہ بندی تقریب کی بنیاد پر کسی خاص قدر کو حل کرتی ہے۔

الجھن سے ، لفظ "پارٹیشننگ" کا استعمال شارڈنگ کے معنی میں بھی کیا جاسکتا ہے ، اور بہت سے نمبر ایس کیو ایل ڈیٹا بیس میں _ڈاؤ_ کا مطلب تیز کرنا ہے۔ یہ ڈی بی عام طور پر رشتہ دار قسم کے ٹیبل لیول حصوں کی حمایت نہیں کرتے ہیں (اور "ٹیبل" کو بالکل بھی سپورٹ نہیں کر سکتے ہیں)۔

رشتہ دار اور NoSQL ڈی بی دونوں میں شراکت کا مطلب عام طور پر ایک "شارڈ قاعدہ" یا "شارڈ کی" استعمال کرتے ہوئے کسی خاص نمبر "نوڈ" کو NoSQL ڈیٹاورلڈ میں واقعہ یا نوڈس کے متعلقہ تالاب میں قطار بھیجنے کے لئے استعمال کرتا ہے۔

زیادہ تر رشتہ دار ماحول میں ، "پالیسی شیڈنگ" وہی ہوتا ہے جو عام طور پر خود کار طریقے سے تیزنگ کے بجائے استعمال ہوتا ہے۔ مثال کے طور پر ، گراہک 1–100 انسٹینس 1 پر ہوسکتے ہیں ، گراہک 101 Inst200 انسٹینس 2 وغیرہ پر ہوسکتے ہیں کیونکہ چونکہ ڈی بی خود شارڈنگ کی سرگرمی کو منظم کرنے کے لئے استعمال نہیں ہوتا ہے ، لہذا کچھ لوگ درخواست کے درجے سے نیچے اس کے بارے میں بات کرتے ہیں۔

NoSQL db جو بڑے پیمانے پر تقسیم شدہ ڈیٹا دنیاوں کی حمایت کرتا ہے اعداد و شمار کو تقسیم کرنے کا طریقہ معلوم کرنے کے لئے آٹو شارڈنگ کا استعمال کرتے ہیں۔ شارڈ کیز عام طور پر اسکیمے کا حصہ ہوتی ہیں۔ اور ان کا انتخاب بہت اہم ہوتا ہے۔ لیکن زیادہ تر NoSQL ڈی بی شارڈ کی پر کچھ قسم کے ہیشنگ استعمال کرتے ہیں تاکہ یہ پتہ لگ سکے کہ کون سا نوڈ ڈیٹا کو بھیجنا ہے یا کہاں سے ڈیٹا لانا ہے۔

ایس کیو ایل اور NoSQL ڈی بی دونوں جہانوں میں ، ایک اچھی تیز حکمت عملی وہ ہے جو کراس نوڈ تلاش کو ختم کرتی ہے یا کم سے کم کرتی ہے۔