430 likes | 714 Views
پروتکل های کنترل همزمانی. ارائه اول پايگاه داده پيشرفته علی عباسی . پروتکل های براساس قفل پروتکل های بر اساس پروتکل های برمبنای تعيين اعتبار دانه بندی چند گانه الگوی چند نسخه ای بن بست اعمال حذف و اضافه همزمانی در ساختار انديس. پروتکل های براساس قفل.
E N D
پروتکل های کنترل همزمانی ارائه اول پايگاه داده پيشرفته علی عباسی
پروتکل های براساس قفل • پروتکل های بر اساس • پروتکل های برمبنای تعيين اعتبار • دانه بندی چند گانه • الگوی چند نسخه ای • بن بست • اعمال حذف و اضافه • همزمانی در ساختار انديس
پروتکل های براساس قفل • قفل مکانيزمی برای کنترل دسترسی به عناصرداده است • عناصر داده می توانند در دو مد قفل شوند • قفل انحصاری : عنصر داده می تواند هم خوانده شود و هم نوشته شود • قفل اشتراکی : عنصر داده تنها می تواند خوانده شود • درخواست های قفل به مدير کنترل همزمانی داده می شود و تراکنش تنها در صورتی ادامه می يابد که درخواست آن پاسخ داده شود .
پروتکل های براساس قفل-ادامه • ماتريس سازگاری قفل • به يک تراکنش تنها در صورتی قفل داده می شود که قفل درخواستی با بقيه قفل های موجود روی عنصر داده توسط تراکنش های ديگر ناسازگاری نداشته باشد . • هرتعدادی تراکنش می توانند روی عنصر داده قفل اشتراکی داشته باشند ، اما درصورتی که يک تراکنش روی يک عنصر داده قفل انحصاری داشته باشد ، تراکنش ديگری نمی تواند روی آن هيچ نوع قفلی داشته باشد . • اگر امکان دادن يک قفل نباشد ، تراکنش درخواست کننده مجبور به انتظار می شود تا هنگامی که تمامی قفل های ناسازگار آزاد شوند
پروتکل های براساس قفل-ادامه • قفل کردن برای اطمينان از سريالی بودن کافی نيست • برای اطمينان از سريالی بودن بايد مجموعه ای از قوانين برای مکانهای گرفتن و آزاد کردن قفل ها رعايت شود که پروتکل قفل کردن ناميده می شوند .
معايب قفل کردن • ترتيب اجرای جزيی زير را در نظر بگيريد . • هيچکدام از تراکنش ها نمی توانند ادامه يابند . اين وضعيت بن بست ناميده می شود . • روش برخورد با اين وضعيت بازگرداندن يکی از تراکنش هاست .
پروتکل های براساس قفل-ادامه • امکان بن بست در بيشتر پروتکل های قفل کردن وجود دارد . • امکان گرسنگی هم در صورت طراحی بد مدير کنترل همزمانی وجود دارد . • يک تراکنش ممکن است در انتظار قفل انحصاری روی يک عنصر باشد درصورتی که • يک سری از تراکنش ها ممکن درخواست قفل اشتراکی داده باشند و قفل به آنها اعطا شود و به امکان دادن قفل به تراکنشی که درخواست قفل انحصاری کرده نباشد • تراکنش مشابه ای ممکن است برای مکررا برای رهايي از بن بست برگردانده شود . • مدير کنترل همزمانی می تواند به گونه ای طراحی شود که از گرسنگی اجتناب شود
پروتکل قفل کردن دو مرحله ای • اين پروتکل تضمين می کند که ترتيب اجراها 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-ادامه • اين پروتکل تضمين می کند که هر عمل ناسازگار نوشتن و خواندن به ترتيب 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 ، رهايی از بن بست را تضمين می کند زيرا هيچ تراکنشی منتظر نمی ماند . اما ترتيب های اجرا ممکن استcascadeless وrecoverable نباشند . تراکنش با timestamp بزرگتر تراکنش با timestamp کوچکتر
قانون نوشتن 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 به نود اجازه می دهند که در مد انحصاری يا اشتراکی بدون نياز به چک تمام زير درخت زير آن قفل شوند .
S IX S IX X IS IS IX S S IX X ماتريس سازگاری همراه با قفل های intention • ماتريس سازگاری برای تمام مد های قفل
الگوی قفل کردن در دانه بندی چندگانه • تراکنش Ti می تواند نود Q را با استفاده از قوانين زير قفل کند . • بايد جدول تطابق شکل را رعايت کند • ريشه درخت بايد ابتدا قفل شود ، ودر هر مدی هم می تواند قفل شود . • نود Q را تنها هنگامی می توان درمد S يا IS قفل کرد که پدر Q در يکی از مدهای IX يا IS قفل باشد. • نود Q را تنها هنگامی می توان درمد X ، SIX ، يا 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 اين نسخه زا برابر با قرار می دهد . • هنگامی که تراکنش به پايان می رسد پردازش پايان انجام می شود : • Ti ،timestamp نسخه هايی را که ايجاد کرده برابر با ts-counter+1 قرار می دهد . • Ts-counter را يکی افزايش می دهد . • تراکنش های تنها خواندنی که بعد از اينکه Ti، ts-counter را افزايش داد شروع شده اند ، مقادير به روز رسانی شده توسط Tiمی بينند . • تراکنش های تنها خواندنی که قبل از اينکه Ti، ts-counter را افزايش دهد شروع شده اند ، مقادير قبل از به روز رساني های Tiمی بينند . • تنها ترتيب اجراهای سريال ايجاد می شوند .
سطوح ضعيف سازگاری • سازگاری درجه دو . با قفل کردن دو مرحله ای در اين تفاوت دارد که قفل های اشتراکی در هر زمانی می توانند آزاد شوند . و قفل ها در هر زمانی می توانند گرفته شوند.بنابراين برگشت آبشاری رخ نمی دهد • قفل های انحصاری بايد تا پايان تراکنش نگه داشته شوند . • سريالی بودن تضمين نشده است ، و برنامه نويس بايد اينکه حالت های خطا در پايگاه داده رخ ندهند مطمئن شود . • cursor stability . • برای خواندن هر چند تايی قفل می شود ، خوانده می شود ، و قفل فورا آزاد می شود . • قفل های انحصاری بايد تا هايان تراکنش نگه داشته شوند . • نوع خاصی از سازگاری درجه دو .
همزمانی در ساختارهای انديس • انديس ها از اين نظر متفاوت از ديگر عناصر پايگاه داده هستند که کارشان تنها کمک به دسترسی به داده ها است . • بسيار بيشتر از عناصر ديگر پايگاه داده مورد دسترسی قرار می گيرند . • برخورد با آنها مشابه به ديگر عناصر داده موجب همزمانی پايين می شود . • دسترسی غير سريالی به انديس تا هنگاميکه درستی انديس حفظ شود پذيرفته است . • بويژه مقادير دقيق خوانده شده در يک B+-tree ، تا هنگاميکه به نود برگ درست برسيم اهميتی ندارند . • پروتکل هايی وجود دارند که در آنها قفل های روی نودهای ميانی زود رها می شوند ،ومانند مدل دو مرحله نيستند .
همزمانی در ساختارهای انديس • مثالی از همزمانی در انديس • استفاده از crabbing به جای قفل کردن دو مرحله ای روی نودهای B+-tree به صورت زير . هنگام چستچو ،اضافه و حذف : • ابتدا نود ريشه در مد اشتراکی قفل می شود . • بعد از قفل کردن نود فرزند موردنياز ، قفل نود آزاد می شود . • هنگام حذف و اضافه قفل نود برگ به مد انحصاری به روز می شود . • هنگاميکه تقسيم يا ادغام نياز به تغيير در نود پدر دارد ،پدر در مد انحصاری قفل می شود