لین دین اور ان کے کنٹرول کے طریقہ کار

معاملات

ٹرانزیکشن ڈیٹا پر کارروائیوں کا ایک سلسلہ ہے جس کا آغاز اور اختتام ہوتا ہے۔

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

لین دین کو ACID کی خصوصیات کو پورا کرنا چاہیے۔

جوہری لین دین یا تو مکمل ہو گیا ہے یا بالکل نہیں ہے۔

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

علیحدگی. متوازی طور پر چلنے والے لین دین کو ایک دوسرے پر اثر انداز نہیں ہونا چاہئے، مثال کے طور پر، دوسرے ٹرانزیکشن کے ذریعہ استعمال کردہ ڈیٹا کو تبدیل کریں۔ متوازی لین دین کو انجام دینے کا نتیجہ وہی ہونا چاہئے جیسے لین دین کو ترتیب وار انجام دیا گیا ہو۔

پائیداری۔ ایک بار ارتکاب، تبدیلیوں کو ضائع نہیں ہونا چاہئے.

لین دین لاگ

لاگ ان لین دین کے ذریعے کی جانے والی تبدیلیوں کو اسٹور کرتا ہے، سسٹم کی ناکامی کی صورت میں ڈیٹا کی ایٹمیسیٹی اور استحکام کو یقینی بناتا ہے۔

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

ریکوری کے لیے صرف ناکام ٹرانزیکشنز کو دوبارہ چلانا کافی نہیں ہے۔

مثال. صارف کے اکاؤنٹ میں $500 ہے اور صارف اسے اے ٹی ایم سے نکالنے کا فیصلہ کرتا ہے۔ دو ٹرانزیکشنز جاری ہیں۔ پہلا بیلنس ویلیو پڑھتا ہے اور اگر بیلنس پر کافی فنڈز ہیں تو یہ صارف کو رقم جاری کرتا ہے۔ دوسرا بیلنس سے مطلوبہ رقم کو گھٹاتا ہے۔ ہم کہتے ہیں کہ سسٹم کریش ہو گیا اور پہلا آپریشن ناکام ہو گیا، لیکن دوسرا ہوا۔ اس صورت میں، ہم مثبت توازن کے ساتھ سسٹم کو اس کی اصل حالت میں واپس کیے بغیر صارف کو رقم دوبارہ جاری نہیں کر سکتے۔

موصلیت کی سطح

پرعزم پڑھیں

ڈرٹی ریڈ مسئلہ یہ ہے کہ ایک ٹرانزیکشن کسی دوسرے لین دین کا انٹرمیڈیٹ نتیجہ پڑھ سکتا ہے۔

مثال. ابتدائی بیلنس کی قیمت $0 ہے۔ T1 آپ کے بیلنس میں $50 کا اضافہ کرتا ہے۔ T2 بیلنس ویلیو ($50) پڑھتا ہے۔ T1 تبدیلیوں کو رد کرتا ہے اور باہر نکلتا ہے۔ T2 غلط بیلنس ڈیٹا کے ساتھ عملدرآمد جاری رکھتا ہے۔

حل یہ ہے کہ فکسڈ ڈیٹا (ریڈ کمٹڈ) کو پڑھا جائے، جو ٹرانزیکشن کے ذریعے تبدیل کیے گئے ڈیٹا کو پڑھنے سے منع کرتا ہے۔ اگر ٹرانزیکشن A نے ڈیٹا کے ایک مخصوص سیٹ کو تبدیل کیا ہے، تو ٹرانزیکشن B، اس ڈیٹا تک رسائی حاصل کرتے وقت، ٹرانزیکشن A کے مکمل ہونے کا انتظار کرنے پر مجبور ہوتا ہے۔

دوبارہ پڑھنے کے قابل

گمشدہ اپڈیٹس کا مسئلہ۔ T1 تبدیلیوں کو T2 کی تبدیلیوں کے اوپر محفوظ کرتا ہے۔

مثال. ابتدائی بیلنس ویلیو $0 ہے اور بیک وقت دو ٹرانزیکشنز بیلنس کو بھرتی ہیں۔ T1 اور T2 $0 کا بیلنس پڑھتے ہیں۔ T2 پھر $200 سے $0 کا اضافہ کرتا ہے اور نتیجہ بچاتا ہے۔ T1 $100 سے $0 کا اضافہ کرتا ہے اور نتیجہ بچاتا ہے۔ حتمی نتیجہ $100 کے بجائے $300 ہے۔

ناقابل تکرار پڑھنے کا مسئلہ۔ ایک ہی ڈیٹا کو بار بار پڑھنے سے مختلف قدریں واپس آتی ہیں۔

مثال. T1 $0 کی بیلنس ویلیو پڑھتا ہے۔ T2 پھر بیلنس میں $50 کا اضافہ کرتا ہے اور ختم ہو جاتا ہے۔ T1 ڈیٹا کو دوبارہ پڑھتا ہے اور پچھلے نتائج کے ساتھ تضاد پایا جاتا ہے۔

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

آرڈرڈ ریڈنگ (سیریلائز ایبل)

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

مثال. T1 ان تمام صارفین کی تعداد کی درخواست کرتا ہے جن کا بیلنس $0 سے زیادہ لیکن $100 سے کم ہے۔ T2 $1 کے بیلنس والے صارف سے $101 کاٹتا ہے۔ T1 درخواست کو دوبارہ جاری کرتا ہے۔

پڑھنے کا حکم دیا (Serializable) لین دین کو مکمل طور پر ترتیب وار طور پر انجام دیا جاتا ہے۔ درخواست کی شرائط کے اندر آنے والے ریکارڈ کو اپ ڈیٹ کرنا یا شامل کرنا ممنوع ہے۔ اگر ٹرانزیکشن A نے پورے ٹیبل سے ڈیٹا کی درخواست کی ہے، تو لین دین A مکمل ہونے تک پوری ٹیبل کو دیگر لین دین کے لیے منجمد کر دیا جاتا ہے۔

شیڈولر

اس ترتیب کو متعین کرتا ہے جس میں متوازی لین دین کے دوران آپریشنز کیے جائیں۔

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

متوازی ملازمتوں کو کنٹرول کرنے کا طریقہ کار (کنکرنسی کنٹرول)

پرامید تنازعات کا پتہ لگانے اور حل کرنے پر مبنی ہے، مایوسی کی بنیاد تنازعات کو پیدا ہونے سے روکنے پر ہے۔

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

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

تالا لگانا

اگر ایک ٹرانزیکشن میں ڈیٹا کو لاک کر دیا گیا ہے، تو دوسرے ٹرانزیکشنز کو ڈیٹا تک رسائی کے وقت اسے ان لاک ہونے تک انتظار کرنا چاہیے۔

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

تعطل ایک ایسی صورت حال ہے جہاں لین دین ایک زیر التواء حالت میں ختم ہوتا ہے جو غیر معینہ مدت تک جاری رہتا ہے۔

مثال. پہلی ٹرانزیکشن دوسرے کے ذریعے کیپچر کیے گئے ڈیٹا کے جاری ہونے کا انتظار کرتی ہے، جب کہ دوسری پہلی کے ذریعے حاصل کیے گئے ڈیٹا کے جاری ہونے کا انتظار کرتی ہے۔

تعطل کے مسئلے کا ایک پرامید حل تعطل کو ہونے دیتا ہے، لیکن پھر تعطل میں شامل ٹرانزیکشنز میں سے ایک کو واپس لے کر نظام کو بحال کرتا ہے۔

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

ہر لین دین T ایک ٹائم اسٹیمپ تفویض کیا گیا ہے۔ TS لین دین کے آغاز کے وقت پر مشتمل ہے۔

مرنا۔

اگر TS(Ti) < TS(Tj)پھر Ti انتظار کرتا ہے، دوسری صورت میں Ti واپس لوٹتا ہے اور اسی ٹائم اسٹیمپ کے ساتھ دوبارہ شروع ہوتا ہے۔

اگر ایک نوجوان ٹرانزیکشن نے ایک وسیلہ حاصل کیا ہے اور ایک پرانا ٹرانزیکشن اسی وسائل کی درخواست کرتا ہے، تو پرانے ٹرانزیکشن کو انتظار کرنے کی اجازت ہے۔ اگر کسی پرانے ٹرانزیکشن نے کوئی وسیلہ حاصل کیا ہے، تو اس وسیلہ کی درخواست کرنے والی چھوٹی ٹرانزیکشن کو واپس کر دیا جائے گا۔

زخم - انتظار.

اگر TS(Ti) < TS(Tj)پھر Tj واپس آتا ہے اور اسی ٹائم اسٹیمپ کے ساتھ دوبارہ شروع ہوتا ہے، ورنہ Ti انتظار

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

تعطل کے مسئلے کا مایوس کن حل کسی لین دین کو شروع کرنے کی اجازت نہیں دیتا ہے اگر تعطل کا خطرہ ہو۔

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

دو فیز لاکنگ - ٹرانزیکشن کے شروع میں لین دین کے ذریعے استعمال ہونے والے تمام وسائل کو ضبط کرکے اور آخر میں انہیں جاری کرکے تعطل کو روکتا ہے۔

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

دو فیز کمٹ اس بات کو یقینی بناتا ہے کہ کمٹ کو تمام ڈیٹا بیس ریپلیکس پر عمل میں لایا گیا ہے۔

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

ٹائم اسٹیمپ کا طریقہ

ایک پرانی ٹرانزیکشن کو واپس لوٹا دیا جاتا ہے جب کسی چھوٹے ٹرانزیکشن میں شامل ڈیٹا تک رسائی حاصل کرنے کی کوشش کی جاتی ہے۔

ہر ٹرانزیکشن کو ٹائم اسٹیمپ تفویض کیا جاتا ہے۔ TS عملدرآمد کے آغاز کے وقت کے مطابق۔ اگر Ti پرانا Tjپھر TS(Ti) < TS(Tj).

جب کوئی لین دین واپس کر دیا جاتا ہے، تو اسے ایک نیا ٹائم اسٹیمپ تفویض کیا جاتا ہے۔ ہر ڈیٹا آبجیکٹ Q لین دین میں ملوث دو لیبل کے ساتھ نشان لگا دیا گیا ہے. W-TS(Q) - سب سے کم عمر لین دین کا ٹائم اسٹیمپ جس نے کامیابی کے ساتھ ایک ریکارڈ اوور مکمل کیا۔ Q. R-TS(Q) - سب سے کم عمر لین دین کا ٹائم اسٹیمپ جس نے پڑھنے کا ریکارڈ انجام دیا۔ Q.

جب لین دین T ڈیٹا پڑھنے کی درخواست کرتا ہے۔ Q دو آپشنز ہیں۔

اگر TS(T) < W-TS(Q)، یعنی، ڈیٹا کو ایک چھوٹی ٹرانزیکشن، پھر ٹرانزیکشن کے ذریعے اپ ڈیٹ کیا گیا تھا۔ T واپس رول.

اگر TS(T) >= W-TS(Q)، پھر پڑھا جاتا ہے اور R-TS(Q) ہو رہا ہے MAX(R-TS(Q), TS(T)).

جب لین دین T ڈیٹا میں تبدیلی کی درخواست کرتا ہے۔ Q دو آپشنز ہیں۔

اگر TS(T) < R-TS(Q)، یعنی، ڈیٹا کو پہلے ہی ایک چھوٹی ٹرانزیکشن کے ذریعہ پڑھ لیا گیا ہے اور اگر کوئی تبدیلی کی جاتی ہے تو، ایک تنازعہ پیدا ہوگا۔ لین دین T واپس رول.

اگر TS(T) < W-TS(Q)، یعنی، ٹرانزیکشن ایک نئی قدر کو اوور رائٹ کرنے کی کوشش کرتا ہے، ٹرانزیکشن T کو واپس کر دیا جاتا ہے۔ دوسرے معاملات میں، تبدیلی کی جاتی ہے اور W-TS(Q) برابر ہو جاتا ہے TS(T).

کسی مہنگے انتظار کے گراف کی تعمیر کی ضرورت نہیں ہے۔ پرانے لین دین کا انحصار نئے پر ہوتا ہے، اس لیے انتظار کے گراف میں کوئی سائیکل نہیں ہے۔ کوئی تعطل نہیں ہے کیونکہ لین دین کا انتظار نہیں کیا جاتا بلکہ فوری طور پر واپس کر دیا جاتا ہے۔ کاسکیڈنگ رول بیکس ممکن ہیں۔ اگر Ti دور لڑھک گیا اور Tj میں نے وہ ڈیٹا پڑھا جسے میں نے تبدیل کیا۔ Tiپھر Tj بھی واپس لوٹنا چاہئے. اگر ایک ہی وقت میں Tj پہلے ہی ارتکاب کیا گیا ہے، پھر استحکام کے اصول کی خلاف ورزی ہوگی.

کاسکیڈنگ رول بیکس کے حل میں سے ایک۔ ایک ٹرانزیکشن اختتام پر تمام تحریری کارروائیوں کو مکمل کرتا ہے، اور دیگر لین دین کو اس آپریشن کے مکمل ہونے کا انتظار کرنا چاہیے۔ لین دین پڑھنے سے پہلے ارتکاب کا انتظار کریں۔

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

لین دین T ڈیٹا میں تبدیلی کی درخواست کرتا ہے۔ Q. اگر TS(T) < W-TS(Q)، یعنی، ٹرانزیکشن ایک نئی قدر کو اوور رائٹ کرنے کی کوشش کرتا ہے، ٹرانزیکشن T کو ٹائم اسٹیمپ کے طریقہ کار کی طرح واپس نہیں کیا جاتا ہے۔

ماخذ: www.habr.com

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