PDA

View Full Version : حل مشکل همزمانی



hamidhws
شنبه 11 آبان 1392, 04:37 صبح
با سلام

من یه سایت بر پایه تکنولوژی سیلورلایت دارم
و از طریق dataset ,table adapter با دیتابیس و سپس از طریق wcf با سمت کلاینت ارتباط برقرار میکنم.

احتمالا دوستان با مشکل همزمانی اشنا هستن. از اونجا که بنده اشنایی زیادی با مقوله بانک اطلاعات ندارم یه سوال برام پیش اومده.

مشکل احتمالی که امکان داره پیش بیاد زمانی هست که مثلا کاربر A یک رکورد رو پاک کنه در صورتی که کاربر B اون رکورد رو قبلا پاک کرده باشه. از اونجا که پاک کردن رکورد از طریق کلید تیبل هست و کلید رو هم بصورت auto generate گذاشتم . اینطوری در واقع هر 2 کاربر قصد پاک کردن 1 رکورد رو دارن ولی 2 رکورد پاک میشه (اگه اشتباه میکنم بفرمایید)
و همچنین همچین شرایطی هم ممکنه زمان edit بوجود بیاد.

راه حلی که خودم حدس زدم اینه که قبل از عملیات edit و delete توسط table adapter ، اطلاعات رو چک کنم . مثلا اگه کاربر خواست رکوردی رو پاک کنه قبلش چک کنم ببینم اطلاعات اون رکورد توی دیتاگرید با اطلاعات اون رکورد توی دیتابیس یکی هست یا خیر ، اگه یکی بود پاک کنه اگه نبود پیغام خطا ارسال بشه

میخواستم نظر دوستان و اساتید رو بدونم

با تشکر

mara84
دوشنبه 27 آبان 1392, 23:41 عصر
با سلام
این مبحث تحت عنوان Concurrency مطالب زیادی وجود داره که بهتره خودتون مطالعه کنید.
به طور خلاصه بگم 2 روش وجود داره:
1.lock کردن رکورد در دیتابیس که هزینه این کار زیاده.
2.ایجاد فیلد از نوع time stamp یا row version در جدول مورد نظر به طوریکه هر بار چند نفر همزمان یک رکورد را گرفتند این فیلد را هم نگه میدارند و موقع ویرایش یا حذف آن را با فیلد در جدول مقایسه میکنند،اگه مساوی بود عمل ویرایش یا حذف انجام شده و فیلد update میگردد. حال نفرات بعدی چون فیلدشان با فیلد جدول یکسان نیست پیغامی مبنی بر همزمانی دریافت میکنند یعنی یک نفر قبلاً آن را ویرایش کرده است!

aghayex
دوشنبه 09 دی 1392, 21:45 عصر
آیا دوستی تا حالا بحث همزمانی با استفاده از روشهای استاندارد رو پی گیری کرده؟

حمیدرضاصادقیان
چهارشنبه 11 دی 1392, 22:08 عصر
سلام.
شما باید از تکنولوژی هایی مثل Notification ها استفاده کنید و هر بار که تغییری در سمت دیتابیس رخ میده سمت سایت رو با استفاده از تکنولوژی هایی مثل Ajax بروز کنید که کاربر همیشه آخرین تغییرات رو ببینه. یک راه جلوگیری از این اتفاقات همین روشی هست که عرض کردم.مانند کاری که سایتهایی مانند Gmail,Yahoo,Facebook انجام میدن.

glyas47
یک شنبه 06 آبان 1397, 13:08 عصر
hdfhdfhdghdfh