ڈیٹا بیس میں لین دین کی تنہائی کی سطح کو کمزور کرنے سے کیا نتیجہ نکل سکتا ہے؟

سب کو سلام. ولادیسلاو روڈن رابطے میں ہیں۔ میں فی الحال OTUS میں ہائی ورک لوڈ آرکیٹیکٹ کورس کا کورس لیڈر ہوں اور سافٹ ویئر آرکیٹیکچر کورسز بھی پڑھاتا ہوں۔

پڑھانے کے علاوہ، جیسا کہ آپ نے دیکھا ہو گا، میں Habré پر OTUS بلاگ کے لیے اصل مواد لکھ رہا ہوں اور میں آج کے مضمون کے ساتھ اس کورس کے آغاز کے ساتھ موافق ہونا چاہتا ہوں۔ "پوسٹگری ایس کیو ایل"، جو ابھی اندراج کے لیے کھلا ہے۔

ڈیٹا بیس میں لین دین کی تنہائی کی سطح کو کمزور کرنے سے کیا نتیجہ نکل سکتا ہے؟

تعارف

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

تنہائی

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

سب سے زیادہ معروف بے ضابطگییں ہیں: گندا پڑھنا، ناقابل تکرار پڑھنا، فینٹم پڑھنا، لیکن درحقیقت 5 مزید ہیں: گندا لکھنا، کرسر کھو گیا اپ ڈیٹ، گمشدہ اپڈیٹ، پڑھنا skew، لکھنا skew۔

گندی تحریر

بے ضابطگی کا نچوڑ یہ ہے کہ لین دین غیر متعلقہ ڈیٹا کو اوور رائٹ کر سکتا ہے۔

ڈیٹا بیس میں لین دین کی تنہائی کی سطح کو کمزور کرنے سے کیا نتیجہ نکل سکتا ہے؟

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

بے ضابطگی کا علاج بہت آسان کیا جا سکتا ہے: ہم ریکارڈنگ شروع کرنے سے پہلے ریکارڈ کے ساتھ ایک تالا لگا دیتے ہیں، دوسرے لین دین کو ریکارڈ کو تبدیل کرنے سے منع کرتے ہیں جب تک کہ تالے کو ہٹا نہیں دیا جاتا۔

گندا پڑھنا

گندے پڑھنے کا مطلب ہے غیر منظم ڈیٹا پڑھنا۔

ڈیٹا بیس میں لین دین کی تنہائی کی سطح کو کمزور کرنے سے کیا نتیجہ نکل سکتا ہے؟

مسائل اس وقت پیدا ہوتے ہیں جب نمونے کی بنیاد پر اعمال یا فیصلے کرنے کی ضرورت ہوتی ہے۔

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

اپ ڈیٹ کھو گیا۔

گمشدہ اپ ڈیٹ کا مطلب ہے گمشدہ اپ ڈیٹس، اور ترجمہ بالکل درست طریقے سے مسئلے کے جوہر کو ظاہر کرتا ہے:

ڈیٹا بیس میں لین دین کی تنہائی کی سطح کو کمزور کرنے سے کیا نتیجہ نکل سکتا ہے؟

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

کرسر کھو گیا اپ ڈیٹ

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

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

ناقابل تکرار پڑھنا

ناقابل تکرار پڑھنا یہ ہے کہ ہمارے لین دین کے عمل کے دوران، ایک ہی ریکارڈ کے 2 لگاتار ریڈز مختلف نتائج کا باعث بنیں گے، کیونکہ ان دونوں ریڈز کے درمیان ایک اور ٹرانزیکشن نے مداخلت کی، ہمارے ڈیٹا کو تبدیل کیا اور ارتکاب کیا گیا۔

ڈیٹا بیس میں لین دین کی تنہائی کی سطح کو کمزور کرنے سے کیا نتیجہ نکل سکتا ہے؟

یہ بھی ایک مسئلہ کیوں ہے؟ تصور کریں کہ تصویر میں ٹرانزیکشن T2 کا مقصد ان تمام سامان کو منتخب کرنا ہے جن کی قیمت 150 USD سے کم ہے۔ کسی اور نے قیمت کو $200 تک اپ ڈیٹ کر دیا۔ اس طرح، نصب فلٹر کام نہیں کیا.

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

پریت پڑھا۔

فینٹم ڈیٹا کا پڑھنا ہے جو کسی اور لین دین کے ذریعے شامل کیا گیا تھا۔

ڈیٹا بیس میں لین دین کی تنہائی کی سطح کو کمزور کرنے سے کیا نتیجہ نکل سکتا ہے؟

مثال کے طور پر، جب یہ بے ضابطگی ہوتی ہے تو ہم سب سے سستے پروڈکٹ کے غلط انتخاب کا مشاہدہ کر سکتے ہیں۔

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

ترچھا پڑھیں

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

ہم کہتے ہیں کہ ہمارے پاس پوسٹس اور ان کی میٹا معلومات کی نمائندگی کرنے والی میزیں ہیں:

ڈیٹا بیس میں لین دین کی تنہائی کی سطح کو کمزور کرنے سے کیا نتیجہ نکل سکتا ہے؟

ایک لین دین میزوں سے پڑھتا ہے، دوسرا ان میں ترمیم کرتا ہے:

ڈیٹا بیس میں لین دین کی تنہائی کی سطح کو کمزور کرنے سے کیا نتیجہ نکل سکتا ہے؟

ٹرانزیکشن T1 کے نتیجے میں، پوسٹ میں عنوان = اچھا، اور اپڈیٹ_بائی = T2 ہے، جو کہ ایک طرح کی تضاد ہے۔

درحقیقت، یہ ایک ناقابل دہرایا جانے والا پڑھا ہے، لیکن کئی جدولوں کے حصے کے طور پر۔

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

ترچھا لکھیں۔

اس بے ضابطگی کو مثال کے ساتھ سمجھانا بھی آسان ہے: فرض کریں کہ ہمارے سسٹم میں کم از کم ایک ڈاکٹر ڈیوٹی پر ہونا چاہیے، لیکن دونوں ڈاکٹروں نے اپنی ڈیوٹی منسوخ کرنے کا فیصلہ کیا:

ڈیٹا بیس میں لین دین کی تنہائی کی سطح کو کمزور کرنے سے کیا نتیجہ نکل سکتا ہے؟

ڈیٹا بیس میں لین دین کی تنہائی کی سطح کو کمزور کرنے سے کیا نتیجہ نکل سکتا ہے؟

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

یہ وہی ناقابل تکرار پڑھنا ہے۔ متبادل طور پر، منتخب افراد ان ریکارڈز پر تالے لگا سکتے ہیں۔

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

ڈیٹا بیس میں لین دین کی تنہائی کی سطح کو کمزور کرنے سے کیا نتیجہ نکل سکتا ہے؟

ڈیٹا بیس میں لین دین کی تنہائی کی سطح کو کمزور کرنے سے کیا نتیجہ نکل سکتا ہے؟

نتیجے کے طور پر، ہمیں مندرجہ ذیل تصویر ملتی ہے: ہر مینیجر نے سوچا کہ ان کی تبدیلی بجٹ سے زیادہ نہیں جائے گی، اس لیے انہوں نے عملے میں تبدیلیاں کیں جو مل کر لاگت میں اضافے کا باعث بنیں۔

مسئلہ کی وجہ بالکل وہی ہے جو پریت پڑھنے میں ہے۔

نتائج

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

کورس کے بارے میں مزید جانیں۔

ماخذ: www.habr.com

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