پروتکل های کنترل همزمانی ارائه اول پايگاه داده پيشرفته علی عباس ی

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‬به صورت زير ‪ .‬هنگام چستچو ‪،‬اضافه و حذف ‪:‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫ابتدا نود ريشه در مد اشتراکی قفل می شود ‪.‬‬
‫بعد از قفل کردن نود فرزند موردنياز ‪ ،‬قفل نود آزاد می شود ‪.‬‬
‫هنگام حذف و اضافه قفل نود برگ به مد انحصاری به روز می شود ‪.‬‬
‫هنگاميکه تقسيم يا ادغام نياز به تغيير در نود پدر دارد ‪،‬پدر در مد انحصاری قفل می شود‬