PDA

View Full Version : یک سناریو برای تغییرات کاربران روی رکورد



mariaviolla
شنبه 22 خرداد 1389, 20:50 عصر
یه سوال من یه رکورد دارم که میخوام در ان واحد دو کاربر از ان استفاده کنند یعنی دو کاربر در ان واحد میتونن تغییرات رو روی ان رکورد پیاده سازی کننند برای اینکه بشه یه همچون کاری کرد من نیاز به یه سناریو دارم

جی کار باید بکنم این سوال از من پرسیدن ولی من به دلیل تازه کار بودنم جوابی نداشتم
مرسی منتظر نظرات هستم ممنون

mariaviolla
یک شنبه 23 خرداد 1389, 19:17 عصر
یه سوال من یه رکورد دارم که میخوام در ان واحد دو کاربر از ان استفاده کنند یعنی دو کاربر در ان واحد میتونن تغییرات رو روی ان رکورد پیاده سازی کننند برای اینکه بشه یه همچون کاری کرد من نیاز به یه سناریو دارم

جی کار باید بکنم این سوال از من پرسیدن ولی من به دلیل تازه کار بودنم جوابی نداشتم
مرسی منتظر نظرات هستم ممنون



کسی نیست جوابی بده ؟؟؟؟؟؟؟؟؟؟؟؟:متفکر:

sia_2007
یک شنبه 23 خرداد 1389, 20:15 عصر
دو نفر یا 20 نفر فرقی نمیکنه.
یا حتی دو تا Thread !
اگه یک Resource در آن واحد توسط چند استفاده کننده منبع مورد استفاده بگیره؛ باید در موردش سناریو نویسی کرد.
برای مثال وقتی یک فایل توسط یک برنامه چند نخی مورد استفاده قرار میگیرد.
این از کلیات.
---
حال در این مورد خاص؛ Concurrency این اسمشه.
فرض کن برنامه تو میگه اگه فلان فیلد مقدارش کمتر از 20 هست؛ باید 2 تا بهش اظافه بشه و بالای 20؛ 3 تا.
در یک سیستم تک کاربره و Single Thread فقط یک نفر است که این مقدار را تغییر میدهد.
اصلا گیج نشو سادست :
در سناریوی تک نفره ؛ اون یه نفر ( با اسم فرزین )؛ دیتا رو Load میکنه.
بعد میبینه مقدارش صفره؛ میکنتش 2 و بعد در سری بعدی میکنتش 4 و 6 و الی آخر و وقتی به 20 برسه؛ بازم میدونه که 20 هستش و از این جا سیاست دوم رو اعمال میکنه؛ و 20 رو میکنه 23 و 26 و ...
---
اما در سناریوی دو نفره ( چند نفره )؛
فرزاد و فرزین :
فرزاد و فرزین مقدار اول رو که صفر هست رو میخونن؛ و بعد فرزین اون رو میکنه 2؛ و بعد فرزاد که خبر نداره صفر شده 2 !!!
فکر میکنه هنوز همون صفر هستش؛ و میکنتش 2؛
دوبار اظافه شده؛ ولی به جای 4 ؛ 2 داریم !!! :متعجب:
----
میبینی که خیلی راحت معذرت میخوام گند میخوره به سیستم؛
پس باید کاری کنیم که در سیستم چند نفره؛ فقط کسانی که آخرین دیتای معتبر رو دارند؛ بتونند دیتا رو عوض کنند.
فکر نکن دیگه در این صورت کسی نمیتونه دیتا رو عوض کنه !
اغلب اوقات دیتای معتبر دست ملته.
و اکقر اوقات دیتایی که وارد میشود؛ به دیتای موجود بستگی نداره.
مثلا این جا؛ مقدار جدید همون مقدار قبلی + 2 بود.
ولی مثلا در مورد آدرس این اهمیت زیادی نداره؛
البته خیلی بستگی به سیاستهای برنامه داره.
حالا این که چطور جلوی Concurrency رو بگیریم بحثه دیگه ایه.

ASKaffash
دوشنبه 24 خرداد 1389, 10:51 صبح
سلام
اسم این موضوع همزمانی است اگر واقعا می خواهید چند نفر همزمان روی یک رکورد کار کنند باید Lock اتفاق افتد دستور آن در SQL نیز چنین است تا زمانیکه فرد Lock کننده عملیات UnLock را انجام ندهد بقیه Exception دریافت می کنند :


Set Tran Isolation Level Serializable
Begin Tran
Select * From T With (RowLock) Where ...

sia_2007
دوشنبه 24 خرداد 1389, 15:40 عصر
البته 5 مدل Locking داریم؛ که هر کدوم در جای خودشون مورد استفاده قرار میگیرند.

niloofarabi
یک شنبه 07 شهریور 1389, 11:03 صبح
ببخشید آقای sia_2007 .ادامه مطلب رو توضیح نمیدید که چه طور جلوی این مشکل رو بگیریم .همین مثالی که توضیح دادید همزمان دو نفر یک رکورد آپدیت میکنند ؟