پروتکل های کنترل همزمانی ارائه اول پايگاه داده پيشرفته علی عباس ی
Download
Report
Transcript پروتکل های کنترل همزمانی ارائه اول پايگاه داده پيشرفته علی عباس ی
پروتکل های کنترل همزمانی
ارائه اول پايگاه داده پيشرفته
علی عباس ی
•
•
•
•
•
•
•
•
پروتکل های براساس قفل
پروتکل های بر اساس
پروتکل های برمبنای تعيين اعتبار
دانه بندی چند گانه
الگوی چند نسخه ای
بن بست
اعمال حذف و اضافه
همزمانی در ساختار انديس
پروتکل های براساس قفل
•
•
قفل مکانيزمی برای کنترل دسترس ی به عناصرداده است
عناصر داده می توانند در دو مد قفل شوند
.1
قفل انحصاری :عنصر داده می تواند هم خوانده شود و هم نوشته شود
.2
قفل اشتراکی :عنصر داده تنها می تواند خوانده شود
•
درخواست های قفل به مدير کنترل همزمانی داده می شود و تراکنش تنها در
صورتی ادامه می يابد که درخواست آن پاسخ داده شود .
پروتکل های براساس قفل-ادامه
• ماتريس سازگاری قفل
• به يک تراکنش تنها در صورتی قفل داده می شود که قفل درخواستی با بقيه قفل های موجود روی
عنصر داده توسط تراکنش های ديگر ناسازگاری نداشته باشد .
• هرتعدادی تراکنش می توانند روی عنصر داده قفل اشتراکی داشته باشند ،اما درصورتی که يک
تراکنش روی يک عنصر داده قفل انحصاری داشته باشد ،تراکنش ديگری نمی تواند روی آن هيچ
نوع قفلی داشته باشد .
• اگر امکان دادن يک قفل نباشد ،تراکنش درخواست کننده مجبور به انتظار می شود تا هنگامی که
تمامی قفل های ناسازگار آزاد شوند
پروتکل های براساس قفل-ادامه
• قفل کردن برای اطمينان از سريالی بودن کافی نيست
• برای اطمينان از سريالی بودن بايد مجموعه ای از قوانين برای مکانهای گرفتن و آزاد
کردن قفل ها رعايت شود که پروتکل قفل کردن ناميده می شوند .
معايب قفل کردن
• ترتيب اجرای جزيی زير را در نظر بگيريد .
• هيچکدام از تراکنش ها نمی توانند ادامه يابند .اين وضعيت بن بست ناميده می
شود .
• روش برخورد با اين وضعيت بازگرداندن يکی از تراکنش هاست .
پروتکل های براساس قفل-ادامه
•
•
•
امکان بن بست در بيشتر پروتکل های قفل کردن وجود دارد .
امکان گرسنگی هم در صورت طراحی بد مدير کنترل همزمانی وجود دارد .
–
–
يک تراکنش ممکن است در انتظار قفل انحصاری روی يک عنصر باشد درصورتی که
يک سری از تراکنش ها ممکن درخواست قفل اشتراکی داده باشند و قفل به آنها اعطا
شود و به امکان دادن قفل به تراکنش ی که درخواست قفل انحصاری کرده نباشد
–
تراکنش مشابه ای ممکن است برای مکررا برای رهايي از بن بست برگردانده شود .
مدير کنترل همزمانی می تواند به گونه ای طراحی شود که از گرسنگی اجتناب
شود
پروتکل قفل کردن دو مرحله ای
• اين پروتکل تضمين می کند که ترتيب اجراها conflict serializableباشند .
• اين پروتکل تراکنش را به دو فاز تقسيم می کند
– . Growingکه در آن تراکنش قفل ها را بدست می آورد و قفلی از دست نمی دهد
– . Shrinkingکه تراکنش قفل ها را آزاد می کند و قفلی بدست نمی آورد
• اين پروتکل سريالی بودن را تضمين می کند .و تراکنش ها می توانند به ترتيب
( lock pointsنقطه ايکه تراکنش قفل آخر را می کيرد ) ،سريالی شوند .
پروتکل قفل کردن دو مرحله ای-ادامه
• قفل کردن دو مرحله ای رهايی از بن بست را تضمين نمی کند .
• برگرداندن آبشاری تحت قفل کردن دو مرحله امکان پذير است .و برای جلوگيذی از
می توان از strict two phase lockingاستفاده کرد .که در اين پروتکل
تراکنش ها بايد تا پايان تراکنش قفل های انحصاری را نگه دارند .
• نوع ديگری از اين پروتکل rigorous two phase lockingاست که
تراکنش تمام قفل ها را تا پايان تراکنش نگه می دارد .
پروتکل قفل کردن دو مرحله ای-ادامه
• قفل کردن دو مرحله ای تمام ترتيب اجراهای سريالی را توليد نمی کند .
• درنبود اطالعات اضافی (ترتيب دسترس ی به داده ها ) قفل کردن دو مرحله ای برای
اطمينان از سريالی بودن الزم است .
• زيرا اگر تراکنش Tiقفل کردن دو مرحله ای را رعايت نکرده باشد ،می توانيم
تراکنش ی مانند Tjبيابيم که قفل کردن دو مرحله ای را رعايت کرده باشد و ترتيب
اجرايی از آنها conflict serializableنباشد .
پروتکل های براساس گراف
•
•
•
•
يک ترتيب جزيی را برمجموعه تمامی داده های پايگاه داده اعمال می کند .
اگر di -> djتراکنش ی که به هر دو داده دسترس ی می يابد بايد به diقبل از dj
دسترس ی پيذل کند .
به اين معنی استکه مجموعه تمامی داده ها می تواند بصورت يک گراف جهت دار
بدون دور بنام database graphديده شود .
Tree protocolنوع ساده ای از graph protocolاست.
پروتکل درخت
• تنها قفل های انحصاری موجود هستند .
• اولين قفل ممکن است روی هر عنصر داده ای باشد .در دفعات بعدی قفل ها در
صورتی داده می شوند که پدر نود نيز توسط تراکنش قفل شده باشد.
• عناصر داده در هر زمانی می توانند آزاد شوند .
پروتکل های براساس گراف-ادامه
• پروتکل درخت conflict serializabilityو رهايی از بن بست را تضمين می
کند .
• در پروتکل درخت آزاد کردن قفل ها زودتر از قفل کردن دو مرحله ای رخ می دهد .
– زمان انتظار کمتر ،همزمانی بيشتر
– دراين پروتکل بن بست رخ نمی دهد ،و برگشتی مورد نيآز نيست
– بی نتيجه ماندن يک تراکنش ممکن است باعث بازگشت آبشاری شود .
• با اينحال در اين پروتکل نياز است که تراکنش عناثر داده ای را قفل کند که به آنها
دسترس ی پيدا نمی کند .
– سربار قفل بيشتر و زمان انتظار بيشتر
– کاهش در همزمانی
• ترتيب اجراهايی در اين پروتکل امکان پذير است که در قفل کردن دو مرحله ای
امکان پذير نيست و برعکس
پروتکل های براساس timestamp
• به هر تراکنش هنگام ورود به سيستم يک timestampنسبت داده می شود .
بين تراکنش قديمی Tiکه timestampآن ) TS(Tiمی باشد و تراکنش
جديد Tjکه timestampآن ) TS(Tjاست رابطه زير برقرار است .
اين پروتکل بصورتی همزمانی را کنترل می کند که timestampها ترتيب سريالی را
تعيين می کنند .
• برای پياده سازی اين الگو ،به هرعنصر داده Qدو مقدار timestampنسبت
می دهيم:
– ) W-timestamp(Qکه بزرگترين مقدار timestampهايی را که
عمل ) write(Qرا به
صورت مؤفقيت آميز انجام داده اند نشان می دهد .
– R-timestampکه بزرگترين مقدار timestampهايی را که عمل
) read(Qرا به صورت
مؤفقيت آميز انجام داده اند نشان می دهد .
پروتکل های براساس -timestampادامه
• اين پروتکل تضمين می کند که هر عمل ناسازگار نوشتن و خواندن به ترتيب
timestampها اجرا شوند .
• -فرض کنيد که تراکنش Tiدرخواست )read(Qرا می دهد.
– اگر ) ، TS(Ti) < W-timestamp(Qدرنتيجه Tiنياز به خواندن داده ای دارد که
قبال دوباره نويس ی شده است .بنابراين ،عمل خواندن رد می شود ،و Tiبرگردانده می شود.
– اگر ) ، TS(Ti) W-timestamp(Qعمل خواندن اجرا می شود و R-
) timestamp(Qبرابر مقدار بيشينه ) R-timestamp(Qو ) TS(Tiفرار
داده می شود .
پروتکل های براساس -timestampادامه
•
فرض کنيد که تراکنش Tiدرخواست ) write(Qرا می دهد.
– اگر ) ، TS(Ti) < R-timestamp(Qپس مقدار Qايکه Tiتوليد می کند قبال مورد نياز بوده
است ،وسيستم فرض می کند که مقدار هيچگاه توليد نشده است .بنابراين سيستم عمل نوشتن را رد
می کند و Tiرا برمی گرداند .
– اگر ) ،TS(Ti) < W-timestamp(Qپس Tiسعی می کند که يک مقدار قديمی را روی Q
بنويسد .بنابراين سيستم عمل نوشتن را رد می کند و Tiرا برمی گرداند .
– در غير اينصورت ،سيستم عمل نوشتن را اجرا می کند و مقدار ) W-timestamp(Qرا برابر با
) TS(Tiقرار می دهد .
صحت پروتکل ترتيب دهی براساس
timestamp
• پروتکل ترتيب دهی براساس ، timestampسريالی بودن را تضمين می کند زيرا
که تمام يالهای گراف الويت به شکل زير می باشند .
تراکنش با
timestamp
بزرگتر
تراکنش با
timestamp
کوچکتر
بنابراين هيچ دوری در گراف الويت بوجود نمی آيد .
پروتکل ترتيب دهی براساس ، timestampرهايی از بن بست را تضمين می کند زيرا
هيچ تراکنش ی منتظر نمی ماند .
اما ترتيب های اجرا ممکن است cascadelessو recoverableنباشند .
قانون نوشتن Thomas
• نوع اصالح شده پروتکل ترتيب دهی براساس timestampکه در آن از نوشتن
های قديمی تحت شرايط خاص ی صرف نظر کرد .
• هنگامی که تراکنش سعی می کند عنصر داده Qرا بنويسد ،اگر
) ، TS(Ti) < w-timestamp(Qدرنتيجه Tiتالش می کند که
مقداری قديمی را روی Qبنويسد .بنابراين بجای برگرداندن تراکنش همانگونه که
در پروتکل ترتيب دهی براساس timestampانجام می شد ،می توانيم از انجام
عمل نوشتن صرف نظر کنيم .
• قانون نوشتن Thomasهمزمانی بيشتری اجازه می دهد .در اين پروتکل برخالف
پروتکل های قبلی ترتيب اجراهای view serializableنيز اجازه داده می شود
.
پروتکل براساس تعييين اعتبار
• اجرای تراکنش در سه مرحله انجام می شود .
– فاز خواندن واجرا .که در آن تراکنش اجرا می شود ،اما اعمال نوشتن در متغيرهای محلی
انجام می شوند .
– فاز تعيين اعتبار .تراکنش يک تست تعيين اعتبار انجام می دهد تا تعيين کند که می توان
اعمال نوشتن را بدون نقض سريالی بودن به پايگاه داده منتقل کرد يا نه .
– فاز نوشتن .تراکنش به روز رسانی ها را درپايگاه داده اعمال می کند .
• optimistic concurrency controlنيزناميده می شود .زيرا که
تراکنش انجام می شود به اميد اينکه از مرحله تعيين اعتبار گذر کند .
پروتکل براساس تعييين اعتبار-ادامه
• به هر تراکنش سه timestampنسبت داده می شود .
– ) .Start(Tiزمانيکه تراکنش شروع به اجرا می کند .
– ) . Validation(Tiزمانيکه تراکنش وارد فاز تعيين اعتبار می شود .
– ) . Finish(Tiزمانيکه فاز نوشتن به پايان می رسد .
• ترتيب سريالی با استفاده از timestampايکه در زمان تعيين اعتبار داده می شود
تعيين می شود .
•
اين پروتکل در زمانيکه احتمال ناسازگاری پايين است مناسب است و همزمانی باالتری را موجب می
شود .
پروتکل براساس تعييين اعتبار-ادامه
•
•
•
•
تست اعتبار برای هر تراکنش Tjنياز دارد که برای هر تراکنش Tiکه شرط TS
) (Ti) < TS (Tjبرقرار باشد
يکی از شرايط زير موجود باشد :
) .finish(Ti) < start(Tjاز آنجا که Tiقبل از آغاز Tjپايان يافته
است ،تزتيب سريالی برقرار است.
مجموعه عناصر داده نوشته شده توسط Tiعضو مشترکی با عناصر داده
خوانده شده توسط Tjنداشته باشد ،و Tiفاز نوشتن را قبل از اينکه Tjفاز
تعيين اعتبار را
آغاز کند به پايان برساند start(Tj) < finish(Ti) < .
).validation(Tj
دانه بندی چند گانه
•
•
•
•
اجازه می دهد که عناصر داده اندازه های متفاوت داشته باشند و يک سلسله مراتب
از دانه بندی داده ها را تعريف می کند ،که در ان عناصر کوچکتر در عناصر بزرگتر
قرار گرفته اند
می تواند از نظر گرافيکی مانند يک درخت نشان داده شود .
هنگامی که يک تراکنش يک نود را بصورت صريح قفل می کند ،تمام نودهای زير آنرا
بصورت ضمنی قفل کرده است .
دانه بندی قفل کردن .
– دانه بندی ريز ( .مراتب پايين تر در درخت ) .همزمانی باالتر ،سربار قفل کردن باالتر.
– دانه بندی درشت ( .مراتب باالتر در درخت ) .همزمانی پايين تر ،سربار قفل کردن پايين تر
مثالی از دانه بندی چند گانه
• باالترين سطح در سلسله مراتب مثال کل پايگاه داده است .
• در سطوح پايين تر حوزه ،فايل و رکورد قرار گرفته اند .
مدهای قفل intention
•
•
•
•
•
عالوه بر قفل انحصاری و اشتراکی سه نوع قفل ديگر هم در دانه بندی چند گانه
وچود دارند .
) . Intention-shared(ISنشان می دهد که در سطوح پايين تر قفل
اشتراکی به صورت صريح انجام شده است .
. Intention-exclusiveنشان می دهد که در سطوح پايين تر قفل اشتراکی
يا انحصاری به صورت صريح انجام شده است .
. Shared and Intention exclusiveزيردرخت با ريشه نود بصورت
صريح در مد اشتراکی قفل شده است وقفل صريح در سطوح پايين تر در مد صريح
رخ داده است
قفل های intentionبه نود اجازه می دهند که در مد انحصاری يا اشتراکی
بدون نياز به چک تمام زير درخت زير آن قفل شوند .
ماتريس سازگاری همراه با قفل های intention
• ماتريس سازگاری برای تمام مد های قفل
S IX
S
IX
IS
IS
IX
S
S IX
X
X
الگوی قفل کردن در دانه بندی چندگانه
•
تراکنش Tiمی تواند نود Qرا با استفاده از قوانين زير قفل کند .
.1
.2
.3
.4
.5
.6
بايد جدول تطابق شکل را رعايت کند
ريشه درخت بايد ابتدا قفل شود ،ودر هر مدی هم می تواند قفل شود .
نود Qرا تنها هنگامی می توان درمد Sيا ISقفل کرد که پدر Qدر يکی از مدهای IXيا
ISقفل باشد.
نود Qرا تنها هنگامی می توان درمد ، SIX ، Xيا IXقفل کرد که پدر Qدر يکی از مد
های IXيا SIXقفل شده باشد .
تراکنش می تواند يک نود را قفل کند ،اکر تاکنون هيچ نودی را آزاد نکرده باشد .
تراکنش تنها هنگامی می تواند قفل نود Qرا باز کند که هيچ فرزندی از نود Qرا قفل نکرده
باشد.
الگوی چندنسخه ای
• الگوی چند نسخه ای ،نسخه های قديمی عناصر داده را برای افزايش همزمانی نگه
می دارد .
•
•
•
•
– ترتيب دهی براساس timestampچند دسخه ای
– قفل کردن دومرحله چند نسخه ای
هر نوشتن موفق منجر به ايجاد نسخه جديدی از داده ندشته شده می شود .
از timestampها برای برچسب گذاری نسخه ها استفاده می شود .
هرگاه درخواست خواندن داده می شود ،نسخه ای مناسب از داده براساس
timestampتراکنش خوانده می شود .
درخواست های خواندن هيچگاه درانتظار باقی نمی مانند .زيرا که هميشه نسخه
مناسب بازگردانده می شود .
ترتيب دهب براساس timestampچند
نسخه ای
• به هر عنصر داده Qيک ترتيب از نسخه ها > <Q1, Q2,...., Qmمنسوب می شود .و هر
نسخه Qkسه فيلد داده دارد :
– محتوی ( ) Contentکه مقدار نسخه Qرا داراست .
– ) W-timestamp(Qkکه timestampتراکنش ی را که نسخه Qkرا بوجود
آورده نشان می دهد .
– ) R-timestamp(Qkکه بزرگترين timestampتراکنش هايی را که عمل خواندن
را بصورت مؤفقيت آميز انجام داده اند نشان می دهد .
• هنگامی که تراکنش Tiنسخه جديد Qkاز عنصر داده Qرا ايجاد می کند R-timestampو
W-timestampبرابر با ) TS(Tiقرار داده می شود .
• ) R-timestamp(Qkهر زمان که توسط تراکنش Tjخوانده می شود TS(Tj) > R-
) timestamp(Qkبه روزرسانی می شود .
ترتيب دهب براساس timestampچند
نسخه ای
• الگوی ترتيب دهی timestampچندنسخه ای که در ادامه می آيد سريالی بودن
را تضمين می کند .
• فرض کنيد که تراکنش Tiدرخواست ) read(Qيا ) write(Qرا بدهد .و Qkنسخه ای
از Qرا نشان دهد که W-timestampآن بزرگترين W-timestampکوچکتريا
مساوی ) TS(Tiباشد .
– اگر Tiدرخواست ) read(Qرا بدهد ،مقدار برگردانده شده محتوی نسخه Qkمی
باشد.
– اگر Tiدرخواست ) write(Qرابدهد ،و )TS(Ti) < R-timestamp(Q
سيستم تراکنش Tiرابرمی گرداند .از طرف ديگر اگر
) ، R-timestamp(Qk) = TS(Tiسيستم محتوی Qkرا دوباره نويس ی می کند؛
درغيراينصورت نسخه جديدی از Qرا می سازد .
قفل کردن دو مرحله ای چند نسخه ای
• بين تراکنش های تنها خواندنی و به روز رسانی تفاوت می گذارد .
• تراکنش های به روز رسانی قفل های خواندن ونوشتن را بدست می آورند و آنها را تا
پايان تراکنش نگه می دارند .يعنی rigorous two phaselockingرا اجرا
می -کنند .
– هر نوشتن مؤفقی نسخه جديدی از داده را ايجاد می کند .
– هر نسخه از عنصر داده يک timestampمستقل دارد که مقدار آن از
خواندن شمارنده ، ts-counterکه مقدار آن هنگام عمليات پايان افزوده
می شود بدست می آيد .
• به تراکنش های تنها خواندنی با خواندن مقدار کنونی ts-counterو قبل از
شروع به اجرای آنها timestampنسبت داده می شود .آنها از پروتکل ترتيب دهی
براساس timestampبرای عمل خواندن پيروی می کنند .
قفل کردن دو مرحله ای چند نسخه ای-ادامه
•
•
•
•
•
•
–
–
هنگامی که يک تراکنش به روزرسانی می خواهد داده ای را بخواند ابتدا يک قفل اشتراکی
روی آن بدست می آورد.و آخرين نسخه آن را می خواند .
هنگامی که می خواهد داده ای را بنويسد قفل انحصاری روی آن بدست می آورد و سپس
نسخه جديدی از آن را ايجاد می کند و timestampاين نسخه زا برابر با
قرار می دهد .
هنگامی که تراکنش به پايان می رسد پردازش پايان انجام می شود :
timestamp، Tiنسخه هايی را که ايجاد کرده برابر با ts-counter+1قرار می دهد .
Ts-counterرا يکی افزايش می دهد .
تراکنش های تنها خواندنی که بعد از اينکه ts-counter ، Tiرا افزايش داد شروع شده
اند ،مقادير به روز رسانی شده توسط Tiمی بينند .
تراکنش های تنها خواندنی که قبل از اينکه ts-counter ، Tiرا افزايش دهد شروع
شده اند ،مقادير قبل از به روز رساني های Tiمی بينند .
تنها ترتيب اجراهای سريال ايجاد می شوند .
سطوح ضعيف سازگاری
• سازگاری درجه دو .با قفل کردن دو مرحله ای در اين تفاوت دارد که قفل های
اشتراکی در هر زمانی می توانند آزاد شوند .و قفل ها در هر زمانی می توانند گرفته
شوند.بنابراين برگشت آبشاری رخ نمی دهد
– قفل های انحصاری بايد تا پايان تراکنش نگه داشته شوند .
– سريالی بودن تضمين نشده است ،و برنامه نويس بايد اينکه حالت های خطا در پايگاه داده رخ
ندهند مطمئن شود .
• . cursor stability
– برای خواندن هر چند تايی قفل می شود ،خوانده می شود ،و قفل فورا آزاد می شود .
– قفل های انحصاری بايد تا هايان تراکنش نگه داشته شوند .
– نوع خاص ی از سازگاری درجه دو .
همزمانی در ساختارهای انديس
•
•
•
•
•
•
انديس ها از اين نظر متفاوت از ديگر عناصر پايگاه داده هستند که کارشان تنها
کمک به دسترس ی به داده ها است .
بسيار بيشتر از عناصر ديگر پايگاه داده مورد دسترس ی قرار می گيرند .
برخورد با آنها مشابه به ديگر عناصر داده موجب همزمانی پايين می شود .
دسترس ی غير سريالی به انديس تا هنگاميکه درستی انديس حفظ شود پذيرفته است
.
بويژه مقادير دقيق خوانده شده در يک ، B+-treeتا هنگاميکه به نود برگ
درست برسيم اهميتی ندارند .
پروتکل هايی وجود دارند که در آنها قفل های روی نودهای ميانی زود رها می شوند
،ومانند مدل دو مرحله نيستند .
همزمانی در ساختارهای انديس
• مثالی از همزمانی در انديس
• استفاده از crabbingبه جای قفل کردن دو مرحله ای روی نودهای B+-
treeبه صورت زير .هنگام چستچو ،اضافه و حذف :
–
–
–
–
ابتدا نود ريشه در مد اشتراکی قفل می شود .
بعد از قفل کردن نود فرزند موردنياز ،قفل نود آزاد می شود .
هنگام حذف و اضافه قفل نود برگ به مد انحصاری به روز می شود .
هنگاميکه تقسيم يا ادغام نياز به تغيير در نود پدر دارد ،پدر در مد انحصاری قفل می شود