PDA

View Full Version : استفاده از قفل در mysql



under22
سه شنبه 07 بهمن 1393, 21:37 عصر
خیلی وقت بود داشتم در مورده قفل جداول تو Mysql تحقیق میکردم .
کامل متوجه شدم و روالشو فهمیدم چند جا هم تو پروژه هام ازش استفاده کردم اما تو یکی از پروژه هام یه چالش جالب برام پیش اومد که نتونستم از قفل استفاده کنم .
داشتم که فروشگاه آنلاین مینوشتم که قرار بود بازید بالایی داشته باشه میخاستم برای ثبت محصولات قفل جداول بزارم که اگه یه محصول فقط یکی ازش داشتیم و یه کاربر اونو درخواست کرد و به درگاه رفت و وقتی داشت پرداخت میکرد اگه یه نفر دیگه هم اونو درخواست کرد و اونم به درگاه رفت ولی کاربر اول کارش زودتر تموم شد و محصول رو خرید این در حالی هست که کاربر دوم هنوز داره پول رو واریز میکنه اینطوری نفر اول پل رو میریزه و کالا رو میخره و کاربر دوم پولو میریزه میاد میبینه از اون کالا هیچی نیست !!
میخاستم قفل بزارم ولی یه بحثی پیش میاد چون اگه بخام وقتی کاربر درخواست داد جدولو قفل کنم ممکنه پرداخت 5 دقیقه طول بکشه و تو این زمان هیچکسی نمیتونه کالا دیگه سفارش بده و خیلی بد میشه .
میخاستم ببینم کسی از دوستان راه حل پیشنهادی نداره ؟

aliphp1
سه شنبه 07 بهمن 1393, 22:10 عصر
این چیزی که شما میگید به قفل mysql چه ارتباطی داره ؟
تا جایی که من می دونم(البته با اطلاعات ناقصم !) قفل mysql اونه که شما یک جدول یا یک فیلد رو قفل کنید تا وقتی یک کاربر روی اون کارش تموم نشده کاربر دیگه ای نتونه کاری انجام بده
مثل اینکه شما همزمان بخواد از حساب تون از دو روش مثلا دو یا چند سایت پرداخت اینترنتی انجام بدید و هر کدوم اول موجودی رو میگیرن بعد اگر جدول قفل نشه همه شون موجودی دارن بعد که اولی خرید کنه موجودی صفر میشه ولی درگاه های دیگه هم موجودی رو داشتن و اونا هم میتونن خرید کنن و چون جدول قفل میشه در حین عملیات نمیشه اینوطوری بانک رو دور زد !
و این چیزی که شما میخواین مدیریت موجودی محصول هست و نه قفل mysql
راهش هم دوتا هست یکی اینکه همین چند دقیقه محصول رو قفل کنید تا کس دیگه ای نتونه خرید کنه و یا خرید های نفر دومی که محصول نداره رو یکجا ذخیره کنید تا مدیر ببینه
حالا اگر من اشتباه می کنم لطفا دوستان بنده رو روشن کنن

abolfazl-z
سه شنبه 07 بهمن 1393, 23:30 عصر
خیلی وقت بود داشتم در مورده قفل جداول تو Mysql تحقیق میکردم .
کامل متوجه شدم و روالشو فهمیدم چند جا هم تو پروژه هام ازش استفاده کردم اما تو یکی از پروژه هام یه چالش جالب برام پیش اومد که نتونستم از قفل استفاده کنم .
داشتم که فروشگاه آنلاین مینوشتم که قرار بود بازید بالایی داشته باشه میخاستم برای ثبت محصولات قفل جداول بزارم که اگه یه محصول فقط یکی ازش داشتیم و یه کاربر اونو درخواست کرد و به درگاه رفت و وقتی داشت پرداخت میکرد اگه یه نفر دیگه هم اونو درخواست کرد و اونم به درگاه رفت ولی کاربر اول کارش زودتر تموم شد و محصول رو خرید این در حالی هست که کاربر دوم هنوز داره پول رو واریز میکنه اینطوری نفر اول پل رو میریزه و کالا رو میخره و کاربر دوم پولو میریزه میاد میبینه از اون کالا هیچی نیست !!
میخاستم قفل بزارم ولی یه بحثی پیش میاد چون اگه بخام وقتی کاربر درخواست داد جدولو قفل کنم ممکنه پرداخت 5 دقیقه طول بکشه و تو این زمان هیچکسی نمیتونه کالا دیگه سفارش بده و خیلی بد میشه .
میخاستم ببینم کسی از دوستان راه حل پیشنهادی نداره ؟

برای هر محصول یک فیلدی به نام انبار قرار دهید و هر کاربری که سفارش داد از انبار کم کنید و اگر طی 15 دقیقه (یا timeout خود بانک مثلا برای ملت 900 ثانیه) پرداخت نکرد کالا به انبار بازگردد یعنی به مقدار فیلد انبار یکی اضافه بشود و این کار ها را هم با قفل انجام بدهید.