ک پرداخت و دانلود *پایین مطلب*
فرمت فایل:Word (قابل ویرایش و آماده پرینت)
تعداد صفحه:19
فهرست مطالب
چکیده : در این گزارش ما به بررسی ویژگی های الگوریتمهای کنترل همروندی توزیعی که بر پایه مکانیزم قفل دو مرحله ای(2 Phase Locking) ایجاد شده اند خواهیم پرداخت. محور اصلی این بررسی بر مبنای تجزیه مساله کنترل همروندی به دو حالت read-wirte و write-write میباشد. در این مقال، تعدادی از تکنیکهای همزمان سازی برای حل هر یک از قسمتهای مساله بیان شده و سپس این تکنیکها برای حل کلی مساله با یکدیگر ترکیب میشوند.
در این گزارش بر روی درستی و ساختار الگوریتمها متمرکز خواهیم شد. در این راستا برای ساختار پایگاه داده توزیعی یک سطحی از انتزاع را در نظر میگیریم تا مساله تا حد ممکن ساده سازی شود.
مقدمه : کنترل همروندی فرآیندی است که طی آن بین دسترسی های همزمان به یک پایگاه داده در یک سیستم مدیریت پایگاه داده چند کاربره هماهنگی بوجود میآید. کنترل همروندی به کاربران اجازه میدهد تا در یک حالت چند برنامگی با سیستم تعامل داشته باشند در حالیکه رفتار سیستم از دیدگاه کاربر به نحو خواهد بود که کاربر تصور میکند در یک محیط تک برنامه در حال فعالیت است. سخت ترین حالت در این سیستم مقابله با بروز آوری های آزار دهنده ای است که یک کاربر هنگام استخراج داده توسط کاربر دیگر انجام میدهد. به دو دلیل ذیل کنترل همروندی در پایگاه داده های توزیعی از اهمیت بالایی برخوردار است: کاربراان ممکن است به داده هایی که در کامپیوترهای مختلف در سیستم قرار دارند دسترسی پیدا کنند.یک مکانیزم کنترل همروندی در یک کامپیوتر از وضعیت دسترسی در سایر کامپیوترها اطلاعی ندارد.
مساله کنترل همروندی در چندین سال قبل کاملا مورد بررسی قرار گفته است و در خصوص پایگاهدادههای متمرکز کاملا شناخته شده است. در خصوص این مسال در پایگاه داده توزیعی با توجه به اینکه مساله در حوزه مساله توزیعی قرار میگیرد بصورت مداوم راهکارهای بهبود مختلف عرضه میشود. یک تئوری ریاضی وسیع برای تحلیل این مساله ارائه شده و یک راهکار قفل دو مرحله ای به عنوان راه حل استاندارد در این خصوص ارائه شده است. بیش از 20 الگوریتم کنترل همروندی توزیعی ارائه شده است که بسیاری از آنها پیاده سازی شده و در حال استفاده میباشند.این الگوریتمها معمولا پیچیده هستند و اثبات درستی آنها بسیار سخت میباشد. یکی از دلایل اینکه این پیچیدگی وجود دارد این است که آنها در اصطلاحات مختلف بیان میشوند و بیان های مختلفی برای آنها وجود دارد. یکی از دلایل اینکه این پیچدگی وجود دارد این است که مساله از زیر قسمتهای مختلف تشکیل شده است و برای هر یک از این زیر قسمتها یک زیر الگوریتم ارائه میشود. بهترین راه برای فائق آمدن بر این پیچدگی این است که زیر مساله ها و الگوریتمهای ارائه شده برای هر یک را در ی.ک سطح از انتزاع نگاه داریم.
با بررسی الگوریتمهای مختلف میتوان به این حقیقت رسید که این الگوریتمها همگی ترکیبی از زیر الگوریتمهای محدودی هستند. در حقیقت این زیر الگوریتمها نسخههای متفاوتی از دو تکنیک اصلی در کنترل همروندی توزیعی به نامهای قفل دو مرحله ای و ترتیب برچسب زمانی میباشند.
همانطور که گفته شد، هدف کنترل همروندی مقابله با تزاحمهایی است که در اثر استفاده چند کاربر از یک سری داده واحد برای کاربران بوجود میآید است. حال ما با ارائه دو مثال در خصوص این مسائل بحث خواهیم نمود. این دو مثال از محک معروف TPC_A مقتبس شده اند. در این مثالها، یک سیستم اطلاعات را از پایگاه داده ها استخراج کرده و محاسبات لازم را انجام داده و در نهایت اطلاعات را در پایگاه داده ذخیره مینماید.
حالت اول را میتوان بروزآوری از دست رفته نامید. حالتی را تصور کنید که دو مشتری از دو سیستم مجزا بخواهند از یک حساب مالی برداشت نمایند. در این حالت فرض کنید در غیاب سیستم کنترل همروندی، هر دو با هم اقدام به خواندن اطلاعات و درج اطلاعات جدید در سیستم میکنند. در این حالت در غیاب سیستم کنترل همروندی تنها آخرین درج در سیستم ثبت میشود. این حالت در شکل 1 نشان داده شده است.
حالت دوم حالتی است که در آن اطلاعات صحیح از پایگاه داده استخراج نمیشود. در این حالت فرض کنید دو مشتری بخواهند کارهای ذیل را انجام دهند.
مشتری 1: بخواهد یک چک 1 میلیونی را به حساب X واریز و از حساب Y برداشت نماید.مشتری 2: بخواهد بیلان حساب مالی X و Y شامل کل موجودی را نمایش دهد.در غیاب کنترل همروندی همانطور که در شکل 2 نشان داده شدهاست، تزاحم بین پروسس ها بوجود خواهد آمد. فرض کنید در زمانی که مشتری 1 اطلاعات را از حساب Y خوانده و اطلاعات حساب X را دریافت نموده و 1 میلیون از حساب Y برداشت نموده ولی هنوز 1 میلیون به حساب X و اریز نکرده مشتری 2 اطلاعات کل دو حساب را دریافت نموده و نتیجه را چاپ نماید. در این حالت مشتری شماره 2 اطلاعاتی را که به عنوان بیلان نمایش میدهد 1 میلیون از مقدار واقعی کمتر است. این حالت یک فرق اساسی با حالت اول دارد و آن این است که در این حالت نتیجه نهایی در پایگاه داده درست خواهد بود در حالیکه اطلاعات دریافت شده بصورت موقت غلط خواهند بود.
مساله کنترل همروندی در پایگاه داده های توزیعی تا حدودی شبیه مساله دوبهدو ناسزگاری در سیستم عامل میباشد. در مساله دوبهدو ناسازگاری، هماهنگی جهت دسترسی به منابع سیستم ائم از حافظه، ابزارهای ورودی و خروجی و CPU و .... بوجود میآید. در این حالت راه حلهای گوناگونی ائم از قفلها، سمافورها، مونیتورها و ... پیشنهاد شده است.
کنرتل همروندی و دوبهدو ناسگاری از این جهت که هر دو دسترسی به منابع مشترک را کنترل میکنند با هم شباهت دارند. با این حال راه حلی که برای یکی بکار میرود قابل بهره برداری برای دیگری نیست. فرض کنید پردازه های P1 و P2 بخواهند از نقاط مختلف کدهای خود به منابع R1 و R2 دسترسی پیدا کنند. در سیستم عامل دسترسی مجزای ذیل قابل قبول است. P2 از R1 استفاده کند، P2 از R1 استفاده کند، P2 از R2 استفاده نموده و سپس P1 از R2 استفاده نماید. در پایگاه داده این روند اجرا مورد قبول نیست و مشکلاتی را ایجاد میکند. فرض کنید P1 بخواهد از R1 مبلغی را به R2 انتقال دهد. در این حالت اگر P2 مقادیر R1 وR2 را چک کند مقادیر غیر صحیح را دریافت میکند.
مدل پردازش تراکنش: برای اینکه روند اجرای عملیات در سیستمهای پایگاه داده های توزیعی برای خواننده مشخص شود ما در اینجا یک مدل از پایگاه دادههای توزیعی را ارائه میدهیم. سپس نحوه عملکرد مکانیزم کنترل همروندی را در این مدل بیان خواهیم نمود. در این مدل پایگاه داده، یک پایگاه داده توزیعی مجموعه از سایتهاست که توسط یک شبکه به هم متصل شدهاند. هر سایت یک کامپیوتر است که یکی یا هر دوی برنامه های ذیل را اجرا میکند. برنامهها شامل یک مدیر تراکنش یا TM و یک مدیر داده یا DM است. TM مسئول مدیریت تعامل کاربر با پایگاه داده است و DM مسئول نگهداری دادهها است. شبکه نیز یک وسیله ارتباطی کامپیوتر – کامپیوتر است. فرض بر این است که شبکه کاملا امن میباشد و پیامها را با همان ترتیبی که وارد سیستم میشوند به مقصد ارسال میشود. فرض بر این است که تعداد داده های موجود در سیستم شامل X ، Y و Z است که داده های منطقی موجود در سیستم را تشکیل میدهند. داده های ذکر شده فقط واحد داده های منطقی هستند و ما با سایز و قالب و جزئیات آنها کاری نخواهیم داشت. هر پایگاه داده در این سیستم یک نسبت دهی مقادیر بصورت منطقی به این داده های منطقی است. هر داده منطقی میتواند در یک یا بیشتر از یک DM ذخیره شود. افزونگی داده در اثر ذخیره داده در چندین DM برای افزایش دسترسی به دادهها است. هر کپی از داده ذخیره شده آیتم داده نامیده میشود. نسخه های متعدد داده X را بصورت X1,X2,... نشان داده میشوند. کاربران با DDBMS از طریق اجرای تراکنشها تعامل دارند. تراکنشها میتوانند پرس و جو های on-line باشند که با زبان استاندارد پرس و جو ارسال شده اند. از طرفی تراکنشها میتوانند عملیاتی باشند که از طریق برنامه های نوشته شده به سیستم داده میشوند. الگوریتمهای کنترل همروندی، کاری با نوع تراکنشهای موجود در سیستم ندارند و محاسبات انحام شده در این تراکنشها تاثیری در روند این الگوریتمها ندارد. بر خلاف اینها این الگوریتمها تمام تصمیم گیری های خود را بر اساس داده هایی که این تراکنشها به آنها دسترسی پیدا میکنند انجام میدهند. دسترسی ها میتوانند از نوع خواندن یا نوشتن باشند. فرض بر این است که محاسبات در تراکنشها کامل بوده و اگر تراکنش در یک پایگاه داده به تنهایی اجرا شود، پایگاه داده در حالت صحیح و مانا قرار گرفته و نتایج کاملا صحیحی در بر خواهد داشت. مجموعه منطقی خواندنی یک تراکنش مجموعه ای از آیتمهای داده ای است که تراکنش میخواند. این امر در شکل 3 نمایش داده شده است.
صحت یک الگوریتم کنترل همروندی بر اساس نیاز کاربران به اجرای تراکنشها تعریف میشود. در اینجا میتوان دو شرط اساسی را میتوان برای اجرای صحیح تراکنشها میتوان در نظر گرفت. شرط اول این است که کاربران انتظار دارند تراکنشهایی را که در سیستم ثبت میکنند، نهایتا اجرا شود. شرط دو م این است که کاربران انتظار دارند تراکنشهای ارسالی دقیقا مانند زمانی که تراکنش در یک سیستم مجزا یا در یک محیط موازی چند برنامه، اجرا میشود اجرا شود و نتایج آن در هر دوحالت کاملا مشابه باشد. تحقق این شرایط دقیقا اهداف یک الگوریتم کنترل همروندی را مشخص میکنند. یک سیستم DDBMS چهار جزء اصلی را در برخواهد داشت: تراکنش، TM، DM و دادهها. تراکنشها با TM ارتباط دارند. TM ها با DM ها ارتباط برقرار میکنند و DM ها داده ها را مدیریت میکنند. TM ها با سایر TM ها ارتباط برقرار نمیکنند.
TM ها بر ترکانش ها و اجرای آنها نظارت میکنند. هر تراکنش در پایگاه داده های توزیعی فقط با یک TM در ارتباط است. این بدین معنا است که هر تراکنش تمام عملیات پایگاه داده خود را به TM مربوط به خود ارسال میکنند. تمامی عملیاتهای توزیعی که بایستی توسط تراکنش انجام شود توسط TM مزبور مدیریت میشود. چهار عملیات مختلف توسط واسط TM برای تراکنشها قابل تعریف است. read(x) مقدار جاری x را در وضعیت فعلی پایگاه داده های منطقی برمیگرداند. write(x,newvalue) مقدار x را در حالت جاری پایگاه دادههای منطقی به مقدار Newvalue تغییر میدهد. همچنین با استفاده از begin و end ابتدا و انتهای یک تراکنش برای یک TM مشخص میشود.
3-تحلیل مساله کنترل همروندی : در اینجا ما با دو رویکرد به مواجه با مساله کنترل همروندی خواهیم پرداخت. در رویکرد اول به نحوه اجرای صحیح خواهیم پرداخت و در رویکرد دوم به تجزیه مساله به بخشهای قابل حل خواهیم پرداخت.
3-1- قابلیت توالی: فرض کنید E یک ترتیب اجرای تراکنشهای t1 تا Tn باشد. در اینصورت E یک اجرای متوالی از تراکنشها است، در صورتیکه هر تراکنش قبل از اجرای تراکنش بعدی به طور کامل اجرا شده و خاتمه پذیرد. تمامی ترتیبهای اجرای متوالی از دیدگاه پایگاه دادهها صحیح تصور میشوند، چرا که خواص تراکنش اذعان میکند که در خاتمه اجرای متوالی صحت پایگاه داده حفظ میشود. یک ترتیب اجرای تراکنش قابل توالی (Serializable) محسوب میشود در صورتیکه نتیجه خروجی اجرای آن برابر یک اجرای متوالی از تراکنشهای مشابه باشد. در نتیجه تمام اجراهای متوالی serializable محسوب میشوند و نتیجه صحیحی خواهند داشت.
هدف الگوریتم کنترل همروندی این است که تضمین کند که تمامی ترتیب های اجرای تراکنش ها قابل توالی میباشند. تنها عملیاتی که به دادههای پایگاه داده دسترسی پیدا میکنند dm-read و dm-write میباشند. بنا براین برای پایش اجرای توالی لازم است فقط dm-read و dm-write های موجود در پایگاه داده توزیعی در dm ها مختلف مدل شده و رفتار آنها کنترل شود. log فایلها میتوانند شرح دهنده توالی dm-read ها و Dm-write ها باشند. در یک پایگاه داده توزیعی، یک ترتیب اجرا قابل توالی نامیده میشود در صورتیکه به ازای Ti که قبل از tj در توالی قرار دارد، تمامی عملیاتهای Ti قبل از tj در تمامی سایتها انجام شده باشند. این نشان دهنده این است که تمامی تراکنشها باید به ترتیب وارد شده در تمامی سایتها اجرا شوند.
دو عملیات با هم تداخل دارند اگر هر دو عملیات بر روی یک داده مشترک کار کرده و یکی از داده ها dm-write باشد. در این حالت اگر دو عملیات با هم تداخل داشته باشند، ترتیب اجرای دو عمل بر روی نتیجه نهایی تاثیر مستقیم خواهد داشت. برای روشنتر شدن موضوع به بحث در خصوص یک مثال خواهیم پرداخت. فرض کنید ایتم دادهای x و تراکنشهای ti و Tj موجود باشند. اگر ti اقدام به خواندن مقدار X نموده و tj اقدام به نوشتن مقدار جدیدی در x نماید. در اینصورت مقدار خوانده شده توسط ti به تقدم و تاخر عملیاتهای خواندن و نوشتن وابسته خواهد شد. بطور مشابه فرض کنید ti و tj هر دو بخواهند مقدار جدید را در x بنویسند، در اینصورت مقدار x دقیقا به این امر وابسته میشود که کدام عملیات دیرتر انجام شده است. حالت اول را تداخل خواندن- نوشتن (rw) و حالت دوم را تداخل نوشتن – نوشتن (ww) مینامند.
نمایش تداخل های مختلف میتواند به ارائه یک تعریف فرموله شده برای ترتیبهای اجرای هم ارز کمک کند. دو ترتیب اجرای تراکنش از نظر محاسباتی زمانی معادل هستند که دو شرط ذیل در آنها صادق باشد:
هر dm-read در تراکنش، داده ای را بخواند که از ابتدا به تراکنش داده شده باشد یا داده ای باشد که توسط یک dm-write از همین تراکنش نوشته شده باشد.نتیجه نهایی نوشته شده در آیتم دادهای در هر دو ترتیب اجرا یکسان باشد.قضیه 1: فرض کنید t که بصورت ذیل تعریف شده است مجموعه ای از تراکنشها در یک پیگاه داده باشد:
آنگاه اگر E یک ترتیب اجرا از این تراکنشها در log های l1 تا lm باشد، E قابل توالی خواهد بود اگر به ازای هر دو عملیات oi و oj که با یکدیگر تداخل دارند به ازای تمامی Log ها ترتیب یکسانی نسبت به یکدیگر داشته باشند.
قضیه فوق الذکر برای حل مسائل مربوط به ترتیب توالی در سیستم بکارمیرود.
3-2- یک الگو برای کنترل همروندی: در قضیه فوق تداخلهای خواندن- نوشتن و نوشتن – نوشتن بصورت مشترک در یک تعریف عمومی از تداخل ظاهر شده اند. در هر حال ما میتوانیم مساله قابلیت توالی را با تفکیک این دو نوع تداخل بهتر بررسی کنیم. فرض کنید E یک مجموعه از log های ثبت شده در یک توالی باشد. ما چند رابطه را میتوانیم بین تراکنشهای موجود در E تعریف کنیم. برای هر جفت تراکنش Ti و Tj خواهیم داشت:
شرح رابطه
نوع رابظه
اگر log وجود داشته باشد که در آن Ti دادهای را میخواند که بلافاصله Tj در آن مینویسد.
rw
اگر log وجود داشته باشد که در آن Ti در دادهای را مینویسد که بلافاصله Tj از آن میخواند.
wr
اگر log وجود داشته باشد که در آن Ti در دادهای را مینویسد که بلافاصله Tj در آن مینویسد
ww
اگر Ti->rw Tj با Ti->wr Tj
rwr
اگر Ti->rwr Tj با Ti->ww Tj
قضیه 2: اگر روابط rwr و ww بصورت غیر حلقوی بوده و یک ترتیب کلی برای این روابط بتوان متصور شد.
بنا بر قضیه فوق میتوان الگوریتمهای کنترل همروندی را مورد ارزیابی و بررسی قرار داده و صحت آنها را از طریق اثبات ریاضی محک زد. تشخیص تداخلهای rw و ww برای کشف ایراد در الگوریتمهای کنترل همروندی کاربرد فراوانی دارد. قضیه 2 به ما اجازه میدهد تا مساله کنترل همروندی را به قسمتهای کوچکتر تقسیم نموده و بتوان هر یک از این قسمتها را بطور مستقل بررسی نمود.
4-مکانیزمهای کنترل همروندی بر پایه قفل دو مرحلهای : قفل دو مرحله ای با تشخیص روشن تداخل بین عملیاتهای همروند و جلوگیری از آنها، بین عملیاتهای خواندن و نوشتن همزمانی بوجود میآورد. قبل از اینکه یک تراکنش x را بخواند باید یک قفل خواندن بر روی x قرار دهد و قبل از اینکه یک تراکنش روی داده x بنویسد، باید یک قفل نوشتن روی x قرار دهد. تصاحب قفلها با توجه به دو قانون بدست میآید.:
تراکنشهای مختلف نمیتوانند قفلهایی که باعث ایجاد تداخل میشوند بدست آورند.زمانی که یک تراکنش شروع به آزاد کردن قفلهای خود نمود، دیگر نمیتواند قفل دیگری بدست آورد.قفلهایی که باعث تزاحم میشوند با توجه به نوع همزمان سازی مشخص و تعریف میشوند. برای حالت rw دو قفل زمانی با هم تداخل دارند که دو شرط در آنها صدق کند:
هر دو قفل بر روی یک داده واحد باشند.یکی قفل نوشتنی و دیگری قفل خواندنی باشد.برای حالت ww دو قفل زمانی با هم تداخل دارند که دو شرط در آنها صدق کند:
هر دو قفل بر روی یک داده واحد باشند.هر دو قفل از نوع نوشتنی باشند.قانون دوم ایجاب میکند که هر تراکنش برای بدست آوردن قفل دو فاز را طی کند. فاز اول که فاز دستیابی به قفلهاست، تراکنش اقدام به بدست آوردن قفلهای لازم میکند. در فاز دوم که فاز تخلیه است، تراکنش به مرور زمان قفلهای خود را آزاد میکند. هنگامی که تراکنش خاتمه پیدا میکند کلیه قفلها رها میشوند.
روشهای مختلفی برای الگوریتمهای قفل دو مرحلهای پیشنهاد شده است. یکی از این روشها این است که تراکنش قفلهای مورد نیاز را قبل از اجرای اصلی خود بدست آورد. این نسخه از قفل دو مرحلهای را پیش تعریف مینامند. برخی از سیستمهای تراکنشها را مجبور میکنند تا قفلهای خود را تا پیش از خاتمه نگه دارند. قفل دو مرحلهای یک تکنیک صحیح ایجاد قابلیت توالی است. این امر با بررسی سیستم از لحظه عدم وجود حلقه و دور در روابط rwr و ww مشخص است. ترتیب اجرای تراکنشها با ترتیب بدست آوردن قفلها مشخص میگردند. نقطه ای که در آن تراکنش تمامی قفلهای مورد نیاز خود را بدست آورده است را نقطه تصاحب قفل مینامند. روشهای مختلفی برای ایجاد الگوریتم قفل دو مرحله ای در سیستمهای توزیعی وجود دارد که در قسمت بعد مورد بررسی قرار میگیرد.
5-پیاده سازی پایه قفل دو مرحلهای : در پیاده سازی پایه الگوریتم قفل دو مرحلهای یک ماژول نرم افزاری ایجاد میشود که روند دریافت و آزاد سازی قفلها را بر اساس ویژگی های الگوریتم قفل دو مرحلهای کنترل میکند.
یک روش برای پیاده سازی توزیعی این الگوریتم این است که ماژولهای نرم افزاری را بین اجزای پایگاهداده توزیع نمائیم. برای اینکار هر ماژول را در dm یعنی آنجائیکه x داده تحت کنترل است قرار دهیم. اگر یک قفل قابل تخصیص نباشد، درخواست برای قفل در یک صف انتظار قرار داده میشود. قفلهای نوشتن بطور خودکار با انجام عمل write آزاد میشوند. در اینصورت برای آزاد نمودن قفلهای خواندنی بایستی عملیات اضافه تعریف نمود. آزاد نمودن قفلها با نوشتن اطلاعات و آغاز فاز تخلیه آغاز میشود. هرگاه یک قفل آزاد میشود عملیاتهای موجود در صف شروع به ادامه میکنند.
توجه داشته باشید که این پیاده سازی افزونگی داده را به درستی پوشش داده و مشکل افزونگی داده و صحت و مانایی اطلاعات را حل میکند. اگر این روش برای همزمان سازی های rw بکار رود، تراکنش میتواند هر کپی داده ای را که در دسترس بود بخواند و هر قفل خواندنی که مهیا بود را بدست آورد. در هر صورت اگر بخواهد داده را بروزآوری کند، یعنی مقدار جدیدی به داده ای نسبت دهد باید بر روی تمام افزونههای دادهای مورد نظر، مقدار جدید را ثبت کند و داده را بروز کند که مستلزم بدست آوردن قفل نوشتن بر روی تمامی نسخه های داده ای است.
6-قفل دو مرحلهای با نسخه اولیه : قفل دو مرحلهای با نسخه اولیه یک تکنیک از نوع قفله دو مرحلهای است که که به افزونگی داده توجه خاصی دارد. یک کپی از هر داده منطقی به عنوان یک کپی یا نسخه اولیه از داده مزبور مطرح میشود. قبل از دسترسی به هر گونه کپی از داده های منطقی، قفل صحیح باید از کپی اولیه اخذ شود.
برای قفلهای خواندنی این روش تعامل و ارتباطات بیشتری را نیاز دارد.فرض کنید که T یک تراکنش باشد که بخواهد داده x را بخواند. در اینصورت اگر X1 کپی اولیه از x باشد و xi برای خواندن توسط تراکنش در دسترس باشد، تراکنش بایستی با x1 که کپی اولیه داده است تعامل داشته و قفل خود را بدست آورد و پس از آن نیز با تعامل با xi داده مورد نظر خود را از Xi بخواند. برای قفلهای نوشتنی بر عکس پیاده سازی پایه قفل دو مرحله ای تراکنش احتیاجی به تعامل بیشتر با سایر dm ها ندارد. در پیاده سازی پایه قفل دو مرحله ای، اگر یک تراکنش میخواست داده x را بروز کند، لازم بود تا بر تمامی نسخه های x قفل نوشتنی بزند و سپس عمل نوشتن را بر روی تمامی نسخه های x انجام دهد اما در اینجا فقط لازم است که تراکنش قفل نوشتن را بر روی کپی اولیه قرار دهد و در صورت بدست آوردن قفل، باید عملیات نوشتن را مانند روش قبل بر روی تمامی نسخه های x انجام دهد.
6-قفل دو مرحلهای با رای گیری : قفل دو مرحله ای با رای گیری پیادهسازی دیگری از روشهای قفل دو مرحله ای است که در آن افزونگی داده بیشتر مد نظر قرار گرفته است. این روش شکل تغییر یافته الگوریتم توافق اکثریت توماس است و تنها برای همزمان سازیهای ww مناسب است.
برای فهم بهتر این روش بهتر است آنرا در داخل روش two phase commit توصیف کنیم. فرض کنید یک تراکنش بخواهد بر روی داده x مقدار جدیدی را بنویسد، در اینصورت درخواست قفل به تمامی نسخه های داده x ارسال شود. در صورتیکه قفل قابل تخصیص باشد، DM دریافت کننده قفل بایستی یک پیام تخصیص قفل صادر نماید. در صورتیکه قفل قابل تخصیص نباشد نیز یک پیام بلوکه شدن در خواست قفل ارسال میگردد. در صورتیکه پیامها از dm های مختلف برگشت داده شد، حال tm ارسال کننده درخواست قفل اقدام به تصمیمگیری مینماید. در صورتیکه تعداد قفلهای اخذ شده دارای اکثریت باشند، آنگاه tm دقیقا مانند حالتی عمل میکند که قفلهای لازم را بر روی نسخه داده ای مزبور بدست آورده است. در این حالت tm باقی عملیات یعنی نوشتن بر روی داده مزبور را انجام میدهد. در صورتیکه قفلهای لازم بر روی داده مورد نظر به تعداد اکثریت نباشد، Tm منتظر دریافت پاسخ تخصیص قفل از dm هایی که پاسخ بلوکه شدن قفل را ارسال نمودند، میشود. در این حالت با دریافت پاسخ جدید از dm هایی که قبلا درخواست را بلوکه کردند، tm تعداد قفلهای لازم را بررسی میکند. در صورت اخذ اکثریت آرا، اجرای خود را ادامه میدهد. از آنجائیکه فقط یک تراکنش میتواند در هر لحظه اکثریت قفلهای نوشتن را بدست آورد در نتیجه فقط در هر لحظه فقط بک تراکنش میتواند بر روی اطلاعات تغییرات اعمال نماید. در هر لحظه فقط یک تراکنش میتواند در فاز نوشتن خود قرار داشته باشد. در نتیجه تمامی نسخه های x دارای یک ترتیب مشخص و مشترک از مقادیر میباشند. نقطه قفل یک تراگنش جایی است که یک تراکنش توانسته است اکثریت قفلهای لازم را برای نوشتن برای هر آیتم دادهای در مجموعه نوشتاری خود بدست آورد. برای بروز آوری های با حجم بالا ، تراکنش بایستی اکثریت قفلهای نوشتن را بر روی تمامی آیتمهای داده ای نوشتنی خود قبل از ارسال دستورات نوشتن بدست آورد.
در حقیقت، قفل دو مرحله ای با رای گیری میتواند برای همزمان سازی عملیات های rw سازگار شود. برای اینکار برای خواندن یک نسخه دادهای بایستی قفل خواندن از تمامی نسخه های داده ای درخواست شود. در صورتیکه اکثریت قفل خواندن از dm ها بدست آید میتواند اطلاعات مورد نظر را بخواند. این روش روش بسیار خوب و قدرتمندی است ولی در این روش برای خواندن یک آیتم داده ای بایستی از تمامی سایتهایی که دارای یک نسخه از آیتم دادهای مذکور هستند قفل خواندن اخذ شود که عملا سیستم را بسیار کند میکند.
7- قفل دو مرحلهای متمرکز : بجاری توزیع نمودن زمانبندها بر روی سایتهای مختلف، همه زمانبندها را بر روی یک سایت متمرکز خواهیم نمود. در این خالت اگر یک تراکنش بخواهد به یک داده x دسترسی پیدا کند باید از سایت مذکور درخواست قفل مناسب بر روی داده مذکور نماید. در این وضعیت داده ممکن است بر روی یک سایت غیر از سایت زمانبند مرکزی قرار داشته باشد.
فرض کنید تراکنشt بخواهد داده x را بخواند در اینصورت بایستی t یک قفل خواندن را از سایت مرکزی درخواست نماید. در این حالت اگر قفل تخصیص داده شود تراکنش میتواند اطلاعات را از یکی از سایتهایی که دارای xهستند درخواست نماید. در غیر اینصورت باید منتظر دریافت مجوز تخصیص ثقفل خواندن از سوی سایت زمانبند مرکزی باشد. در حالتی که داده x بر روی سایت مرکزی زمانبند نیز باشد، درخواست قفل و داده بطور مشترک به سایت مرکزی ارسال میشود، در صورتیکه قفل قابل تخصیص باشد، عملیات خواندن به همراه تخصیص قفل انجام میشود. برای عملیات بروز آوری و نوشتن نیز فرآیند تخصیص قفل به همین نحو است با این تفاوت که بعد از تخصیص قفل و اعلام به درخواست کننده از سوی سایت مرکزی زمانبندی، سایت درخواست کننده موظف است تمامی کپی های نسخه های اطلاعاتی را بروز نماید. این روش نیز مانند قفل دو مرحلهای کپی اولیه مستلزم نقل و انتقال مضاعف پیام میباشد.
8-تشخیص و ترمیم بن بست : در این خصوص روشهای مختلفی ارائه شده است. مهمترین روش ارائه شده روش ترسیم گراف تخصیص منابع مییاشد. در خصوص بروز آوری این گراف در حالت توزیع شده مراتب مختلفی مطرح میشود که در این مقال نمیگنجد. در خصوص روش قفل دو مرحلهای متمرکز نیازی به نگهداری توزیع شده این گراف و تکنیکهای بروزآوری آن نمیباشد و لی در سایر انواع روشهای قفل دو مرحلهای به نگهداری این گراف و مدیریت نگهداری آن و تصمیم گیری بر اساس آن نیاز مبرم وجود دارد.
4-نتیجه گیری :.در این گزارش با توجه به توسعه سیستمهای پایگاه توزیعی، بحث کنترل همروندی و صحت و مانایی اطلاعات در حضور همروندی مطرح میشود. در بین سه روش پایه ای موجود برای کنترل همروندی، یعنی روشهای قفل دو مرحلهای، برچسب زمانی متوالی و روش خوش بینانه، روش قفل دو مرحله ای مورد تجزیه و تحلیل قرار گرفت. در این خصوص یک مقدمه برای تشریح مساله کنترل همروندی بیان شد.
در این گزارش مزایای روش قفل دو مرحلهای بیان شده و علل صحت این روش تشریح شده است. نهایتا میتوان گفت از آنجائیکه این روش از نظر صحت عملکرد کاملا اثبات شده است، میتواند در پایگاه دادههای توزیعی مورد استفاده قرار گیرد.
5-تقدیر و تشکر : بر خود لازم میدانیم، از راهنماییها و کمکهای جناب آقای دکتر مسعود رهگذر، استادیار گروه مهندسی برق و کامپیوتر دانشکده فنی دانشگاه تهران و نیز جناب آقای مهندس مهدی عمادی، تشکر و قدردانی نمائیم.
6-منابع و مآخذ :
[1] M. Blakey, “Models a Very Large Distributed Database”, ACM Transactions on Computer Systems, Vol. 10, No. 6. 1992
[2] P. A. Bernstein and N. Goodman, ”Concurrency Control in Distributed Database Systems”, Computing Surveys, Vol. 13, No. 2, June 1981
[3] M. J. Carey and M. Livny “Distributed Concurrency Control Performance: A Study of Algorithms, Distribution, and Replication”, 14th VLDB Conference Los Angeles, California 1988
[4] P.A. Franaszek, J. T. Robinson and Thomson, “Concurrency Control for High Contention Environments” ACM Transactions on Database Systems, 1992
[5] A. Thomasian, “Performance Limits of Two-Phase Locking”. IEEE International Conference on Data Engineering, 1991
[6] M.J. Carey, and M. Livny “Parallelism and Concurrency Control Performance in Distributed Database Machines”, 1989 ACM SIGMOD, 1989
[7] Kj. Norvag, O. Sansta and K. Bratbergsengen, “Concurrency Control in Distributed Object-Oriented Database Systems”, Advances in Database and Information Systems, 1997
ک پرداخت و دانلود *پایین مطلب*
فرمت فایل:Word (قابل ویرایش و آماده پرینت)
تعداد صفحه:25
فهرست مطالب
الگوریتم
هر برنامه، می بایست دارای یک طرح و یا الگو بوده تا برنامه نویس بر اساس آن عملیات خود را دنبال نماید.از دیدگاه برنامه نویسان ، هر برنامه نیازمند یک الگوریتم است . بعبارت ساده ، الگوریتم ، بیانه ای روشمند بمنظور حل یک مسئله بخصوص است . از منظر برنامه نویسان ،الگوریتم بمنزله یک طرح کلی و یا مجموعه دستورالعمل هائی است که با دنبال نمودن آنان ، برنامه ای تولید می گردد.
الگوریتم های میکرو در مقابل ماکرو
الگوریتم ها دارای ویژگی های متفاوتی می باشند . ما می توانیم در رابطه با الگوریتم استفاده شده به منظور نوشتن یک برنامه مشخص صحبت نمائیم . از این زاویه ، ما صرفا" در رابطه با الگوریتم در سطح ماکرو(macro level) ، صحبت نموده ایم . در چنین مواردی ، الگوریتم ارائه شده ، سعی در بدست آوردن جنبه های عمومی برنامه از طریق یک مرور کلی به برنامه در مقابل درگیر شدن در جزئیات را دارد.ما می توانیم در رابطه با الگوریتم ها ، از سطح "میکرو" صحبت نمائیم . از این زاویه ، به سطوح پایین تر رفته و به عوامل اساسی ونگهدارنده ای که یک جنبه خاص از برنامه را با یکدیگر مرتبط می نماید، صحبت کرد. مثلا" در صورتیکه شما دارای داده هائی هستید که می بایست قبل از استفاده مرتب گردند ،الگوریتم های مرتب سازی متعددی در این زمینه وجود داشته و می توان یکی از آنها را بمنظور تامین اهداف مورد نظر خود انتخاب نمود. انتخاب یک الگوریتم مرتب سازی ، صرفا" باعث حل شدن یکی از جنبه های متفاوت برنامه می گردد . پس از مرتب سازی داده ها ،می بایست از یک الگوریتم میکرو دیگر بمنظور نمایش داده ها ی مرتب شده استفاده گردد .
همانگونه که احتمالا" حدس زده اید ، ما می توانیم تمام الگوریتم های میکرو را بمنظور ایجاد یک الگوریتم ماکرو ، جمع آوری نمائیم . اگر ما با الگوریتم های میکرو ، آغاز نمائیم ، و حرکت خود را بسمت نمایش ماکروی یک برنامه ، پیش ببریم ، کاری را انجام داده ایم که موسوم به طراحی " پایین به بالا" (buttom-up) ، است . اگر ما فعالیت خود را با یک الگوریتم ماکرو آعاز و حرکت خود را بسمت پائین و الگوریتم های میکرو ، ادامه دهیم ، طراحی از نوع " بالا به پایین " (top-down) را انجام داده ایم .
شاید این سوال مطرح گردد که کدام روش بهتر است ؟ اگر شما تمام مقالاتی را که تاکنون در این زمینه نوشته شده اند را دنبال نمائید ، هرگز به یک نتیجه قابل قبول دست نخواهید یافت . هر رویکرد، دارای نکات مثبت و منفی مربوط به خود است . صرفنظر از رویکرد طراحی استفاده شده ، می بایست دارای الگوئی (طرحی) مناسب برای برنامه باشیم .حداقل، نیازمند یک اعلامیه از مسئله برنامه نویسی و یک طرح ( الگو) برای برخورد با مسئله ، خواهیم بود . پس از شناخت مسئله ، می توان نحوه حل مسئله را ترسیم کرد. شناخت عمیق و مناسب نسبت به مسئله ای که قصد حل آن را داریم ، شرط اساسی و ضروری برای طراحی یک برنامه است .
با توجه به اینکه این اعتقاد وجود دارد که شناخت جامع و کلی از مسئله ای که حل آن را داریم ، بخشی ضروری در اولین مرحله برنامه نویسی است ، ما در ادامه از رویکرد "بالا - پایین "، تبعیـت می نمائیم . فراموش نکنیم که رویکرد فوق ، امکان مشاهده مجازی از هر مسئله برنامه نویسی را فراهم خواهد نمود.
مراحل پنج گانه
هر برنامه را صرفنظر از میزان پیچیدگی آن ، می توان به پنج مرحله اساسی تجزیه کرد :
مقدار دهی اولیه ورودی پردازش خروجی پاکسازیدر ادامه به بررسی هریک از مراحل فوق ، خواهیم پرداخت .
مرحله مقداردهی اولیه
مرحله مقداردهی اولیه ، اولین مرحله ای است که می بایست در زمان طراحی یک برنامه در رابطه با آن فکر کرد . مرحله فوق ، شامل تمامی عملیات مورد نیازی است که برنامه می بایست قبل ازبرقراری ارتباط با کاربر ، انجام دهد . در ابتدا ممکن است این موضوع که عملیاتی را قبل از برقراری ارتباط با کاربر می بایست انجام داد ، تا اندازه ای عجیب بنظر رسد ولی احتمالا" برنامه های زیادی را مشاهده نموده اید که در این راستا عملیات مشابهی را انجام می دهند. مثلا" ، در زمان استفاده از برنامه هائی نظیر Word ، Excel و یا برنامه های مشابه دیگر ، با چنین مواردی برخورد نموده ایم . مثلا" با انتخاب گزینه منو File ، می توان لیستی از فایل هائی را که با آنها کار کرده ایم در بخش انتهائی منوفوق ، مشاهده کرد. ( مشاهده آخرین فایل های استفاده شده در یک برنامه خاص ، با استفاده از جادو! میسر نشده است ) . برنامه مورد نظر شاید ، لیست فایل های اخیر را از دیسک خوانده و آنها را به لیست مربوطه در منوی File ، اضافه کرده باشد . با توجه به اینکه لیست فایل های فوق ، می بایست قبل از اینکه برنامه هر چیز دیگر را برای کاربر نمایش دهد ، خوانده و نمایش داده شوند ، می توان انجام عملیات فوق را نمونه ای از مرحله مقداردهی اولیه، در نظر گرفت.
یکی دیگر از عملیات متداول که به این مرحله مرتبط می باشد ، خواندن فایل های Setup است . چنین فایل هائی ممکن است حاوی اطلاعاتی در رابطه با نام مسیرهائی باشند که بانک ها ی اطلاعاتی خاصی و یا فایل های ذخیره شده دیگری را بر روی دیسک را مشخص می نمایند . با توجه به نوع برنامه ای که اجراء می گردد ، فایل های Setup می توانند شامل اطلاعاتی در رابطه با فونت های نمایش ، نام و محل چاپگر ، رنگ های زمینه و رویه ، وضوح تصویر صفحه نمایشگر و اطلاعات مشابهی دیگر باشند . سایر برنامه ها ممکن است مستلزم خواندن اطلاعاتی در رابطه با اتصالات شبکه ، مجوزهای امنیتی و دستیابی به اینترنت ، رمزهای عبور و سایر اطلاعات حساس دیگر باشند . در چنین مواردی فایل های Setup دارای نقشی مهم خواهند بود.
در زمان طراحی یک برنامه ، همواره می بایست در رابطه با اطلاعاتی که یک برنامه قبل آغاز خدمات و عملیات خود به آنها نیازمند است ، اندیشید و برای آنان در مرحله مقداردهی اولیه راهکار مناسب را انتخاب کرد . مرحله مقداردهی اولیه احتمالا" جائی است که می بایست از طریق آن اقدام به ارائه راهکار مناسب در جهت پاسخ به نیازهای فوق ، کرد.
مرحله ورودی
مرحله ورودی ، در حقیقت چیزی است که انتظار دارید باشد! مرحله فوق ، شامل اخذ ( جمع آوری ) هر آنچیزی است که یک برنامه برای انجام فعالیت های خود به آنها نیاز خواهد داشت . دراکثر موارد، اگر استنباط مناسبی از عملیاتی را که یک برنامه قصد انجام آنان را دارد ، حاصل گردد، مشخص نمودن لیستی از ورودی ها ، کاری ساده خواهد بود. مثلا" اگر شما قصد نوشتن یک برنامه وام را دارید ، می دانید که می بایست از کاربر میزان وام درخواستی ، بهره موردنظر و مدت زمان وام ، درخواست گردد.
در حالات دیگر، لازم است در رابطه با نوع ورودی هائی که می بایست از کاربر اخذ گردد، بررسی لازم و مبتنی بر اندیشه را دنبال نمود. مثلا" در صورتیکه قصدنوشتن یک برنامه دفترچه آدرس را دارید ، آیا می خواهید نام فایل حاوی دفترچه تلفن و محل ذخیره فایل مربوطه را در هر مرتبه که برنامه اجراء می گردد ، از کاربر درخواست نمائید ؟ بعبارت دیگر برخی از مراحل ورودی می توانند و شاید می بایست ، توسط مرحله مقدار دهی انجام شوند. ماهیت واقعی میزان اطلاعاتی که می توان آنها را در مرحله مقداردهی خواند ، بستگی به رفتار برنامه دارد. بعنوان یک قانون عمومی می توان به این مورد اشاره داشت که اکثر کاربران تمایل دارند که اطلاعات تکراری در یک فایل Setup و یا مقداردهی اولیه ذخیره گردد (در مقابل اینکه هر مرتبه که برنامه اجراء می گردد ، مجبور به ورود اطلاعات تکرای باشند ) .
فایل های Setup بسیار مناسب بوده و در هرموردی که امکان بخدمت گرفتن آنان منطقی بنظر می آید ، می بایست از آنان استفاده گردد . برخی دیگر از اطلاعات اولیه دارای ماهیت خاص خود بوده و تا زمانیکه کاربر آنها را تایپ ننماید ، شناخته نمی گردند . در مثال وام اشاره شده ، می توان از TextBox های متعددی بمنظور احذ اطلاعات از کاربر و استفاده از آنان در برنامه ، کمک گرفت . با توجه به اینکه کاربر می بایست با این TextBox ها مرتبط تا اطلاعات موردنیاز برنامه را وارد نماید ، روشی را که شما بمنظور ارائه Textbox ,Labels ,Menus و سایر عناصر برنامه ، استفاده می نمائید ، یکی از بخش های مهم یک برنامه یعنی رابط کاربر ( user interface ) را مشخص خواهد کرد . فراموش نکنیم یکی از عوامل موفقیت هر نرم افزار ، بخش رابط کاربر آن است . طراحی مناسب بخش فوق ، امروزه بعنوان تخصصی خاص در طراحی و پیاد ه سازی نرم افزار مطرح و دارای جایگاه خاص خود است .
مرحله پردازش
مرحله پردازش ، شامل انجام عملیات بر روی ورودی (ورودی ها ) ، بمنظور تولید نتایج مورد نظر برای برنامه است . در مثال وام ، برنامه پس از دریافت ورودی های مورد نظر ( میزان وام ، درصد بهره و زمان وام ) آنها را از طریق یک معادله مالی بیکدیگر مرتبط و پس از حل معادله ، نتیجه مورد نظر حاصل خواهد شد( میزان پرداخت ماهانه ) . بعبارت دیگر ، مرحله پردازش قادر به دریافت ورودی ، برخورد با آنها و تولید پاسخ مناسب به مسئله است . توجه داشته باشید که مرحله پردازش همواره باعث نمایش چیزی بر روی نمایشگر نخواهد شد. هدف ، عمل ( عملیات ) برروی داده ( داده ها ) بمنظور تولید یک نتیجه ( نتایج ) است . در این رابطه هیچگونه استثنائی وجود ندارد . در صورتیکه در برنامه ای از قبل می دانیم که مرحله پردازش زمان زیادی طول خواهد کشید ، منطقی است که فیدبک های لازم بمنظور آگاهی کاربر از میزان و درصد انجام پردازش ( پردازش ها ) در اختیار وی گذاشته شود ( در زمانیکه برنامه در حال اجراء است ) . در این رابطه می توان از روش های متعددی استفاده کرد . ( ارائه یک میله پیشرفت ، برآورد زمان تقریبی بمنظور اتمام عملیات ) .
مرحله خروجی
مرحله فوق ، پاسخ ( پاسخ ها ی) مناسب و مورد انتظار را به کاربران مبنی بر حل مسئله مورد نظر ، ارائه می نماید. تعداد زیادی ازبرنامه ها ، پاسخ نهائی ( نتیجه ) خود را از طریق یک Textbox ، نمایش و در اختیار کاربر قرار می دهند . ، مثلا" اگر برنامه ای نوشته شده است که قصد محاسبه و نمایش میزان پرداخت ماهیانه یک وام دریافتی را داشته باشد ، می توان نتیجه بدست آمده (پرداخت ماهانه) را از طریق یک textbox ، ارائه تا پاسخی مناسب در ارتباط با مرحله خروجی یک برنامه، داده شده باشد . سایر برنامه ها ممکن است دارای وضعیتی بمراتب پیچیده تر باشند .مثلا" می توان برنامه ای را در نظر گرفت که نام ، آدرس ، شماره تلفن و سایر اقلام اطلاعاتی را از بانک اطلاعاتی خوانده و در ادامه آنها را بر روی صفحه نمایشگر ، نشان دهد. برنامه هائی اینچنین ، نیازمند شکل مناسبتری از نمایش خروجی بوده و نمی توان با استفاده از چند textbox به خواسته خود دست یافت ( ارائه یک خروجی مطلوب و انعطاف پذیر) در اینگونه موارد می بایست از راهکارهای مناسبتری استفاده گردد . مثلا" می توان از جداول خاصی بمنظور نمایش اطلاعات مورد نظر استفاده کرد .( استفاده از grid و یا List box که برنامه در صورت ضرورت آنان را تکمیل نماید ) . نکته مهمی که می بایست در رابطه با مرحله خروجی رعایت گردد ، آگاهی از این موضوع است که با توجه به نمایش نتایج خروجی برای کاربر، بخش فوق را می توان جزئی از بخش رابط کاربر یک نرم افزار در نظر گرفت . در زمان ورود اطلاعات ( مرحله ورودی ) از عناصر متفاوتی بمنظور اخذ اطلاعات توسط کاربر در بخش رابط استفاده می گردد ، در مرحله خروجی ، بخش رابط کاربر با کاربر بگونه ای دیگر مرتبط خواهد شد ( ارتباطی بمراتب غیر فعالتر نسبت به مرحله ورود اطلاعات ) .
مرحله پاکسازی ( Cleanup )
مرحله پاکسازی ، بمنظور خاتمه بخشیدن مودبانه یک برنامه، پس از تکمیل عملیات مربوطه است. می توان این مرحله را بعنوان مکمل مرحله مقداردهی اولیه در نظر گرفت .با اینکه تعداد زیادی از برنامه های ساده قادرند بسادگی و بدون انجام عملیات تکمیلی توسط برنامه نویس ، خاتمه یابند ولی برنامه های پیچیده زیادی نیازمند برخی کمک ها در این زمینه می باشند. مثلا" اگر برنامه ای یک فایل Setup را بمنظور مقداردهی برخی از متغیرها در زمان مرحله مقداردهی اولیه ، خوانده باشد ، مرحله پاکسازی می تواند شامل بهنگام سازی آندسته از متغیرهای موجود در فایل Setup باشد که نشاندهنده آخرین اطلاعات کاربر است . مرحله پاکسازی ، اغلب شامل بستن فایل ها ( فایل های Setup و بانک اطلاعاتی) است . برخی برنامه ها میزان استفاده از برنامه توسط کاربران را ثبت و اطلاعات مربوطه را در مکانهائی که Log file نامیده می شوند ، ذخیره می نمایند( ثبت مشخصات افرادیکه برنامه را اجراء نموده بهمراه سایر اطلاعات مرتبط نظیر تاریخ و زمان آغاز و توقف برنامه ، در خیلی از برنامه ها به امری ضروری تبدیل شده است ) .
یکی دیگر از انواع فایل های Log به فایل های ثبت خطاء برمی گردد( error log file ) . هدف این نوع از فایل ها ، ثبت اطلاعاتی در رابطه با هر نوع خطائی است که ممکن است در مدت زمان اجرای یک برنامه ، محقق گردد. برنامه نویسان با استفاده از محتویات این نوع فایل ها ، قادر به اشکال زدائی برنامه خواهند بود .
عملیات واقعی و مورد نظری که می بایست در مرحله پاکسازی ، انجام گردد ، به نیازهای یک برنامه بستگی خواهد داشت . معمولا" اگر در برخی برنامه ها عملیات خاصی را در مرحله مقدار دهی اولیه انجام می هیم ، می بایست برخی از عملیات متناظر با آنان را در مرحله پاکسازی انجام داد . باز نمودن و بستن فایل های مورد نیاز در یک برنامه ، نمونه ای متداول از دو مرحله فوق می باشد .
آیا هر برنامه شامل پنج مرحله گفته شده است؟
در پاسخ به سوال فوق می بایست با صراحت پاسخ منفی داده شود. در این راستا ، برنامه های متعددی وجود دارد که مثلا" به مراحل مقداردهی اولیه و یا پاکسازی ، نیاز نخواهند داشت . مراحل مقداردهی اولیه و پاکسازی در مرحله طراحی برنامه های پیچیده مورد توجه جدی قرار خواهند گرفت. بموازات افزایش تجربه در نوشتن برنامه ، شناخت مناسبی در این رابطه بوجود می آید( کدام برنامه به تمام مراحل پنج گانه نیاز و کدامیک نیاز ندارند).طراحان می بایست همواره یک مسئله برنامه نویسی را با فرض وجود پنج مرحله یاد شده ،دنبال نمائید . قطعا" حذف یک مرحله در زمان طراحی بمراتب ساده تر از نادیده گرفتن ! اولیه آن خواهد بود.
پالایش یک طرفه ( SidewaysRefinement )
همانگونه که قبلا" اشاره گردید ، ما علاقه مند به طراحی بالا به پایین می باشیم .( الگوریتم ماکرو بعنوان یک نقطه شروع در فرآیند طراحی برنامه) . پس از انتخاب رویکرد فوق ، می بایست شناخت مناسبی نسبت به مسئله ای که قصد حل آن وجود دارد ، ایجاد گردد. تا رسیدن به سطح میکرو( ارائه الگوریتم های میکرو) بمنظور حل مسئله مورد نظر راه زیادی را در پیش خواهیم داشت. بموازات حرکت از سطح مرور کلی برنامه به خصوصیات و ویژگی های یک برنامه ، می بایست دانش خود را نسبت به جرئیات مربوطه افزایش داد .
از پنج مرحله گفته شده ، می توان بمنظور نقطه شروع دید ماکرو خود در زمان فرآیند طراحی استفاده کرد. درادامه ، می توان هر یک از مراحل را بدقت بررسی تا جزئیات بیشتری در رابطه با مرحله مورد نظر ، مشخص گردد ( استخراج جزئیات لازم در رابطه با تحقق هر مرحله ) . فرآیند فوق ، " پالایش یک طرفه " ، نامیده می شود . در ادامه ، بمنظور شناخت مناسب فرآیند پالایش یک طرفه ، به بررسی یک نمونه می پردازیم .
فرض کنید ، کاربری دارای یک فایل بانک اطلاعاتی است که در آن تمام قرار ملاقات های وی ، ذخیره شده اند . قرار ملاقات ها در بانک اطلاعاتی با نظم و ترتیب خاص (تاریخ قرار ملاقات ) ذخیره شده اند . کاربر ، می خواهد قادر به مشاهده قرار ملاقات های خود بر اساس حروف الفبائی و بر اساس نام خانوادگی اشخاص مورد نظری که قصد ملاقات با وی را دارند ، باشد. چگونه می توان از پالایش یک طرفه ، بمنظور طراحی یک را ه حل استفاده کرد؟
پالایش یک طرفه مرحله مقدار دهی اولیه
می دانیم که کاربر دارای یک بانک اطلاعاتی شامل قرار ملاقات ها ، می باشد. ما همچنین می دانیم که کاربر می خواهد لیستی از قرار ملاقات های خود را بصورت مرتب شده و بر اساس نام خانوادگی مشاهده نماید . موارد فوق ، دید ماکروی ما از الگوریتم است . بنابراین ، در مرحله مقداردهی اولیه چه عملیاتی می بایست انجام داد ؟ واضح است که ما نیازمند باز نمودن بانک اطلاعاتی قرار ملاقات ها می باشیم . ما همچنین نیازمند یک فرم ( مثلا" یک فرم مبتنی بر VB.NET و یا فرم وب ) بمنظور نمایش نتایج پس از مرتب سازی قرار ملاقات ها ، خواهیم بود. ( فرض می شود از مکان بانک اطلاعاتی بر روی شبکه آگاهی داریم ، و می توان نام و رمز عبور کاربر را از بانک اطلاعاتی مربوطه بمحض آغاز اجرای برنامه توسط کاربر ، مشخص کرد) . با استفاده از اطلاعات فوق، اولین "پالایش یک طرفه " ، بصورت زیر خواهد بود :
همانگونه که در شکل فوق ، مشاهده می گردد بموازات حرکت از سمت چپ بسمت راست ، جزئیات مربوطه افزایش خواهد یافت . شکل فوق ، پالایش یک طرفه ، لیستی از برنامه های جانبی و توابع مورد نیاز بمنظور انجام فعالیت های مربوطه در مرحله مقداردهی اولیه را نشان می دهد . هر روتین کوچک، مسئول انجام عملیاتی خاص خواهد بود .
شبه کد ( PseudoCode )
عملیات پالایش را می توان در رابطه با هر مرحله با استفاده از "شبه - کد " ، دنبال کرد. شبه کد ،الگوریتمی برای بیان عملیاتی است که می بایست توسط یک روتین محقق گردد . در این راستا از یک گرامر مشابه انگلیسی ، استفاده می گردد . مثلا" شبه کد ، روتین IsValidUser بصورت زیر خواهد بود:
شبه کد روتین IsvalidUser
Is ValidUser()
If CurrentUserName Not in ValidUserList
Display Invalid User Error Message
Terminate Program
Else
Return ValidUserIDNumber
End
شبه کد ، عملیاتی را که یک روتین می بایست انجام دهد ، بدون اتکاء به گرامر یک زبان برنامه نویسی خاص ، تشریح می نماید. شبه کد ، زبانی مبتنی بر گرامری خاص نبوده و الگوریتمی از عملیات مورد نظر که می بایست توسط یک روتین انجام شود را مشخص می نماید. مزیت شبه کد، شباهت زیاد آن به زبان انگلیسی است و می توان آن را با افرادیکه برنامه نویس نبوده و بنوعی در فاز طراحی صاحبنظر می باشند ، به اشتراک تا صحت استنباطات حاصل شده تائید و یا اصلاح گردد.( در فاز طراحی می بایست یک ارتباط مستمر با کاربران صاحبنظر برقرارگردد، ما قرار است مسئله آنان را حل نمائیم نه مسئله خود را و یا نمی خواهیم مسئله ای دیگر را بر حجم مسائل آنان اضافه نمائیم!) بدین ترتیب ، امکان تشخیص خطاء و اعمال تعییرات لازم در خصوص برخورد با خطاهای احتمالی در ابتدا فراهم می گردد ( یکی از اصول مهندسی نرم افزار در این رابطه به این موضوع اشاره می نماید که به هر میزان که زمان کشف یک خطاء در چرخه حیات یک برنامه سریعتر باشد ، هزینه برخورد با خطاء کاهش خواهد یافت ) .
پس از آگاهی از اهداف ارائه شده در شبه کد ، می توان بسادگی اقدام به ترجمه شبه کد مربوطه به کدهای برنامه نویسی با استفاده از زبان مورد نظر نمود. فراموش نکنیم که طراحی خوب ، همواره پیاده سازی ساده تر برنامه ها را بدنبال خواهد شد.
الگوریتمی عمومی برای یافتن "Site label "هائیکه احتمال شبکه را حداکثر کنند به نام "Belief Propagation" (BP) نامیده میشوند و مهیا ساز یک ابزار مؤثر برای حل مسائل استنتاجی از طریق گسترش احتمالات مرزی از طریق شبکه عصبی است. در این جا سه تابع اساسی احتمال وجود دارد:
احتمال گره
احتمال مرزی
احتمالات مشروط
ایدة اصلی Belief Propagation عبارت است از:
احتمال Lable های پایه در یک حالت پایه در شبکه عصبی که از طریق محاسبة احتمال نهائی (جمع زدن) بر روی احتمال برای گره های پایه، داده شده فقط برای احتمالات "Site Label" های همسایگی Markov ، Ni که در شکل زیرنشان داده شده است (مثلاً node ها را میتوان به عنوان مدارهای نانومقیاس input/output در نظر گرفت)
میتوان نود ها را در شبکه طبقهبندی کرد به گونهای که هر یک دارای برچسب احتمال معین باشند و نیز آنهائی که مقادیر آنها از طریق الگوریتم تکثیر، تعیین میشود.
نودهای نوع اول از طریق یک ورودی محاسباتی که مقدار آن مقید به setup مسأله است.
چنین نودهائی به نام «نودهای قابل مشاهد» نامیده میشوند و سایر نودها به نام «نودهای پنهان» نامیده میشوند. ما به احتمالاتی استناد میکنیم که به صورت تقریبی محاسبه میشوند و به عنوان "belief" مینامیم و belief در نود i ام را بصورت b(xi) نشان میدهیم.
در روش MRF، نودهای قابل مشاهده موسوم به yi ، ثابت فرض میشود و xi معرف نودهای پنهان است. همان است. سپس فرض میشود که تعدادی وابستگی آماری بین xi و yi در هر موقعیت i ام وجود دارد و به عنوان «احتمال گره» نامیده میشود. تابع فوق اغلب به عنوان evidence برای xi خوانده میشود.
برای آنکه قادر باشیم استناد کنیم به هر چیزی در حوزة معماری کامپیوتر نانوئی، مجبوریم تعدادی ساختار پایه xi داشته باشیم. ساختار xi فرض شده را رمز می کنیم با این فرض که متغیر xi میبایستی تا جائیکه مقدور است با متغیرهای همسایگی xj ، سازگار باشد که آن را با تابع سازگاری نشان میدهیم که می بایستی فقط موقعیتهای همسایه را به هم میپیوندد. سپس تابع توزیع احتمال گره به ازاء متغیرهای مجهول xi که به صورت زیر است را اعمال می کنیم:
که در آن z یک ثابت نرمال شده است.
این احتمالات محاسباتی، قابلیت تکثیر در گام بعدی محاسبات را برآورد میکند. اثبات شده است که این الگوریتم تکثیر به حداکثر احتمال اختصاص یافته به کل شبکه همگرا خواهد شد و در آن هیچ چرخه ای بیرونی وجود ندارد. این الگوریم افزایشی،« پیچیدگی محاسباتی» در مرتبه تعداد نودهای موجود در شبکه با یک جملة وزن دهنده به نسبت ابعاد همسایگی دارد. در مورد چرخه ها، احتمالات میبایستی به
صورت ترکیبی بر روی حوزه شبکه انجام شود که متضمن راه حلهای مبتنی بر حداکثر احتمال است. یعنی اینکه، میبایستی شبکه به بلوکهای شبکهای loop – free که هر یک به صورت درونی دارای loop هستند، تقسیم شود. به هر حال، نشان داده شده است که الگوریتم تکثیر Belief، به حداکثر حالت احتمال در حضور Loopها، همگرا خواهد شد.
کاربرد های عمومی الگوریتمها به همراه استفاده از ساختمان داده ها:
یکی از کاربردهای مهم الگوریتمها و استفاده از ساختمان داده ها در مرتب سازی دادهها است. مرتب سازی عملی بنیادی در علم کامپیوتر است. (برنامههای زیادی از آن بعنوان یک مرحله میانی استفاده میکنند.) در نتیجه تعداد زیادی از الگوریتمهای مرتب سازی بهبود یافتهاند . اینکه کدام الگوریتم برای یک کاربرد مورد نظر بهتر است به تعداد اقلام اطلاعاتی که بایستی مرتب شوند , میزان مرتب بودن اقلام, محدودیتهای حافظه یا زمان و یا نوع دستگاه ذخیره سازی استفاده شده (حافظه اصلی, دیسکها یا نوارهای مغناطیسی و ...) بستگی دارد.
از جمله مهترین الگوریتمهای مرتب سازی میتوان به موارد زیر اشاره کرد :
مرتب سازی درجی (Insertion sort)
مرتب سازی ادغام (Merge sort)
مرتب سازی انتخابی (Selection sort)
مرتب سازی حبابی (Bubble sort)
مرتب سازی سریع (Quick sort)
مرتب سازی تنها مسئله محاسباتی که در آن الگوریتمها توسعه یافتهاند نمیباشد. کاربردهای عملی الگوریتمها و استفاده از ساختمان داده های مناسب در همه جا وجود دارند و شامل نمونههای زیر میباشند :
اینترنت مردم را در سراسر دنیا قادر میسازد تا به مقادیر زیادی از اطلاعات بطور سریع دستیابی یافته و آنها را بازیابی کنند. بنابراین الگوریتمهای هوشمند به منظور اداره و دستکاری این حجم زیاد از اطلاعات به کار گرفته میشود .یافتن مسیرهای مناسب انتقال داده و استفاده از موتورهای جستجو برای یافتن سریع صفحات .
پروژه ژن انسان با هدف شناسایی 1000000 ژن در DNA انسان , تعیین یک توالی از میلیاردها جفت پایه شیمیایی تشکیل دهنده DNA انسان , ذخیره این اطلاعات در پایگاههای داده و توسعه ابزارهای لازم جهت تحلیل دادههای مربوطه.
تجارت الکترونیکی این امکان را فراهم میکند که کالاها و سرویس یطور الکترونیکی معامله و مبادله شوند. طبیعتاّ این امر نیازمند نگهداری اطلاعات مهمی چون کلمات رمز و صورت حسابهای خصوصی بانک هاست. رمزگشایی و امضاهای دیجیتالی بر اساس الگوریتمهای عددی و نظریه اعداد میباشند.
نقشه جاده ها که در آن فاصله بین هر جفت تقاطع همجوار مشخص شدهاست. تعداد مسیرهای ممکن میتواند بسیار زیاد باشد؛ هدف ما این است که کوتاه ترین مسیر از یک تقاطع به تقاطع دیگر را بیابیم. این عمل همان مسئله یافتن کوتاه ترین مسیر از یک رأس به رأس دیگر در گراف میباشد.
منابع
Introduction to Algorithms (CLRS)-Second Edition - The MIT Press
Babylon dictionary (Persian Computer Encyclopedia) - Computer and IT dictionary for Persian
لینک پرداخت و دانلود *پایین مطلب*
فرمت فایل:Word (قابل ویرایش و آماده پرینت)
تعداد صفحه19
چکیده : در این گزارش ما به بررسی ویژگی های الگوریتمهای کنترل همروندی توزیعی که بر پایه مکانیزم قفل دو مرحله ای(2 Phase Locking) ایجاد شده اند خواهیم پرداخت. محور اصلی این بررسی بر مبنای تجزیه مساله کنترل همروندی به دو حالت read-wirte و write-write میباشد. در این مقال، تعدادی از تکنیکهای همزمان سازی برای حل هر یک از قسمتهای مساله بیان شده و سپس این تکنیکها برای حل کلی مساله با یکدیگر ترکیب میشوند.
در این گزارش بر روی درستی و ساختار الگوریتمها متمرکز خواهیم شد. در این راستا برای ساختار پایگاه داده توزیعی یک سطحی از انتزاع را در نظر میگیریم تا مساله تا حد ممکن ساده سازی شود.
مقدمه : کنترل همروندی فرآیندی است که طی آن بین دسترسی های همزمان به یک پایگاه داده در یک سیستم مدیریت پایگاه داده چند کاربره هماهنگی بوجود میآید. کنترل همروندی به کاربران اجازه میدهد تا در یک حالت چند برنامگی با سیستم تعامل داشته باشند در حالیکه رفتار سیستم از دیدگاه کاربر به نحو خواهد بود که کاربر تصور میکند در یک محیط تک برنامه در حال فعالیت است. سخت ترین حالت در این سیستم مقابله با بروز آوری های آزار دهنده ای است که یک کاربر هنگام استخراج داده توسط کاربر دیگر انجام میدهد. به دو دلیل ذیل کنترل همروندی در پایگاه داده های توزیعی از اهمیت بالایی برخوردار است: کاربراان ممکن است به داده هایی که در کامپیوترهای مختلف در سیستم قرار دارند دسترسی پیدا کنند.یک مکانیزم کنترل همروندی در یک کامپیوتر از وضعیت دسترسی در سایر کامپیوترها اطلاعی ندارد.
مساله کنترل همروندی در چندین سال قبل کاملا مورد بررسی قرار گفته است و در خصوص پایگاهدادههای متمرکز کاملا شناخته شده است. در خصوص این مسال در پایگاه داده توزیعی با توجه به اینکه مساله در حوزه مساله توزیعی قرار میگیرد بصورت مداوم راهکارهای بهبود مختلف عرضه میشود. یک تئوری ریاضی وسیع برای تحلیل این مساله ارائه شده و یک راهکار قفل دو مرحله ای به عنوان راه حل استاندارد در این خصوص ارائه شده است. بیش از 20 الگوریتم کنترل همروندی توزیعی ارائه شده است که بسیاری از آنها پیاده سازی شده و در حال استفاده میباشند.این الگوریتمها معمولا پیچیده هستند و اثبات درستی آنها بسیار سخت میباشد. یکی از دلایل اینکه این پیچیدگی وجود دارد این است که آنها در اصطلاحات مختلف بیان میشوند و بیان های مختلفی برای آنها وجود دارد. یکی از دلایل اینکه این پیچدگی وجود دارد این است که مساله از زیر قسمتهای مختلف تشکیل شده است و برای هر یک از این زیر قسمتها یک زیر الگوریتم ارائه میشود. بهترین راه برای