آرش اقتدار
آرش اقتدار
خواندن ۳ دقیقه·۱۰ ماه پیش

Lock-Free Reservations in Oracle 23

یکی از موضوعات اساسی برای استفاده کنندگان از پایگاه های داده ، مشاهده نسخه یکسان از آخرین تغییرات اعمال شده بر روی داده ها است.

اجازه بدید موضوع را با یک مثال بررسی کنیم.

اگر شما از حساب بانکی خودتون در حال پرداخت هزینه اسنپ به صورت انلاین هستید و همزمان باشما ، همسرتون (دوست ، پارتنر، .... :) ) هم در حال کشیدن کارت متصل به همون حساب ، در یک مغازه باشه، هر چند که این دو تراکنش در دو سشن (فضای ارتباطی با بانک داده) جداگانه به سمت دیتابیس هدایت میشه ،اما دیتابیس تضمین میکنه که یکی از تراکنش ها منتظر تراکنش دوم باقی میمونه، تا تراکنش اول به طور کامل انجام( کامیت)بشه و بعد از اون تراکنش بعدی شروع میکنه به اجرا شدن.

بنا براین اگر مجموع پول مورد نیاز شما و همسرتون بیشتر از موجودی حساب مورد نظر باشه، فقط اونی برنده هست که درخواستش سریعتر به دیتابیس بانک برسه.

بی پولی -  حمید نعمت الله
بی پولی - حمید نعمت الله

این ویژگی که اصطلاحا به Isolation تراکنش ها در دیتابیس اشاره میکنه ، زیر مجموعه ای از خاصیت ACID دیتابیس هاست. و خب دیتابیس ها به این خاصیت خیلی مینازن !

اما اجازه بدید که سناریوی دیگه ای را بررسی کنیم .

ما در حال کار در یک رستوران هستیم و حجم زیادی غذا تولید کردیم و میخواهیم تا قبل از اینکه موقع ناهار بگذره ، تا میتونیم سفارش آن لاین از مشتری هامون بگیریم .

خب این جا هم منطقا هر چه قدر مشتری سفارش بده باید از موجودی اولیه غذای ما (قابل مقایسه با موجودی اولیه عابر بانک در مثال قبل) کاسته بشه . این به این معنی هست که باید قاعده isolation فعال باشه و هر مشتری بعد از مشتری قبلی بتونه سفارشش را ثبت کنه و در واقع چند میلی یا میکرو ثانیه برای ثبت سفارش صبر کنه .

اما اینجا انتظار به نفع ما نیست .

فرض کنید آشپز ما آدم حرفه ای هستش و به ما تضمین داده که نمیذاره غذا کم بیاد. در واقع سرعت عمل ثبت سفارش، برامون خیلی مهمتر از حجم غذای باقی مانده اس.

چه باید کرد ؟

اینجا اوراکل به کمک ما میادش .در ورژن 23 از دیتابیس اوراکل یک ویژگی معرفی شده به اسم :

Lock free reservation

این ویژگی باعث میشه که ستون دیتابیس ما بتونه به صورت همزمان (concurrent) و توسط سشن های مختلف آپدیت بشه و پس از مدت زمان کوتاهی که سطح ترنزکشن ها کمتر میشه مقدار واقعی ستون در دیتابیس به روز بشه.

اوراکل این کار را با استفاده از یک ژورنال تیبل (جداول داخلی اوراکل برای نگهداری اتفاقات جاری در سطح دیتابیس ) که به طور همزمان برای ستون های Lock free ایجاد میکنه انجام میده .

به این ترتیب زمان انتظار لازم برای کامیت شدن اطلاعات از سطح جدول ما به سطح جداول خودش منتقل میشه و تضمین میکنه که در نهایت همه تغییرات را به جدول اصلی هم اعمال میکنه .

بنابراین در نهایت ما یک جدول با اطلاعات صحیح و به روز داریم و همگی هم در ساعت مقرر غذا خوردیم 😊


lock freeoracle databaseoracleoracle apexاوراکل
شاید از این پست‌ها خوشتان بیاید