PDA

View Full Version : پدیده شبح - داده



marzban
دوشنبه 08 مرداد 1386, 16:34 عصر
با سلام خدمت همه دوستان
تو کتاب سیستم مدیریت پایگاه داده ها(مفاهیم و تکنیک ها) تالیف سید محمد تقی روحانی رانکوهی بحثی بنام پدیده شبح داده (صفحه 133) آورده شده که من اوم مطلب را عینا آوردم و تو مفهومش مشکل دارم.لطفا اگر کسی می تونه کمک کنه:

وقتی که پایگاه داده ها حالت پویا داشته باشد،به این معنی که مرتبا عملیات درج و حذف در آن انجام شود(پایگاه داده ها مرتبا دستخوش تغییرات شود) مشکل ظریفی بروز می کند که به آن مشکل شبخ - داده می گویند.این مشکل به این صورت است که دو تراکنش T1 وT2 در حالی که به داده مشترکی دسیابی ندارند ،اگر بطور همروند اجرا شوند نتیجه اجرا می تواند با نتیجه اجرای متوالی آنها یکسان نباشد.
برای مثال:
SAILORS(SID,SName,RATING,AGE)
این رابطه حاوی اطلاعاتی در مورد فروشندگان است.فرض می کنیم تراکنش T1 می خواهد سن مسن ترین فروشنده با شرط RATING=1 یا RATING=2 را بیابد .تراکنش T1 تمام صفحات حاوی تاپلهای دارای شرط Rating=1 را قفل می کند (فرض می کنیم واحد قفل شدنی صفحه باشد) و سپس سن مسن ترین فروشنده حائز این شرط را پیدا می کند مثلا 71 سال.
تراکنش T2 یک تاپل جدید در رابطه مزبور درج می کند:فروشنده ای با سن 90 سال در Rating=1

marzban
دوشنبه 08 مرداد 1386, 16:41 عصر
این تاپل جدید در صفحه ای درج می شود که حاوی تاپلهای فروشندگان دیگر حائز شرط Rating=1 نیست.بنابر این قفل گذاری این صفحه با یک قفل انحصاری با قفل دریافت شده توسط تراکنش T1 تعارض ندارد.
تراکنش T2 همجنین صفحه حاوی مسن ترین فروشنده با شرط Rating=2 را قفل می کند و این فروشنده را که سنش 80 است ،حذف می کند .
سپس T2 تثبیت شده و قفلها را می گشاید.بالاخره T1 صفحات حاوی فروشندگان دارای شرط Rating=2 را قفل کرده و سن مسن ترین آنها را پیدا می کند که 63 سال است.
با اجرای همروند این دو تراکنش پاسخ ها 71 و 63 است .اما اگر ابتدا T1 و سپس T2 اجرا می شد،پاسخ ها 71 و 80 و اگر ابتدا T2 و سپس T1 اجرا می شد پاسخ های 90 و 63 بدست می آمد.

AminSobati
دوشنبه 08 مرداد 1386, 23:25 عصر
دوست عزیزم،
موضوع Phantom Data یکی از چند مشکلی هست که در حین عملیات همزمان کاربرها رخ میده. به عبارت خیلی ساده، Phantom Data به این شکل میتونه پدید بیاد:
- کاربر اول یک Query انجام میده با شرط خاصی
- کاربر دوم یک رکورد در محدوده دید کاربر اول Insert میکنه
- کاربر اول Query خودش رو تکرار میکنه و یک رکورد جدید میبینه. این رکورد که جدیدا ظاهر شده اصطلاحا Phantom Data گفته میشه.
در بانکهای اطلاعاتی مختلف، روشهای متفاوتی برای جلوگیری از بروز Phantom Data وجود داره. فرضا در SQL Server کاربر اول میتونه این کار رو انجام بده:
SET TRAN ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
این کار باعث میشه Range رکوردهای مورد نیازش Lock بشه به شکلی که کاربر دوم موفق نشه رکورد جدید Insert کنه.

marzban
سه شنبه 09 مرداد 1386, 00:15 صبح
استاد عزیز خیلی از راهنمایی تون ممنونم
احتملا منظور شما این هست که در یک query ما دوبار عمل خواندن از یک renge رکورد را انجام می دهیم در بین این دوبار خواندن این رکورد ها عمل Insert از طرف یک کاربر دیگر انجام میشه و چون در فاصله این دو اجرا یک عمل Insert جدید انجام شده دیگه ممکنه نتیجه اجرای خواندن با هم یکی نشه . و ما در واقع کل نیاز این query را از همون اول قفل میگذاریم تا براش مشکلی پیش نیاد
اگه اشتباه می کنم لطفا راهنمایی کنید

آیا امکانش هست که بعضی از سوالهای تئوری مربوط به مفاهیم بانکهای اطلاعاتی رو اینجا مطرح کنم

با تشکر مرزبان