بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

پیاده سازی مشابه امکان synchronized block ، در php

مدیریت گفتگو
hamidd 10 سال پیش
آخرین تغییر: 10 سال پیش

سلام دوستان . انجمن چقدر خلوته . یک سوال داشتم نمی دونستم بپرسم یا نه، چون خیلی به سوالات کم جواب داده میشه.

سوالم در زمینه ی برنامه نویسی دیتابیس هست.

در بعضی زبانهای برنامه نویسی مثل جاوا، در تردها ما با استفاده از synchronized block جلوی بروز باگ را می گیریم. 

مثلا در زمینه ی کار با دیتابیس، ما وقتی با ترد های مختلف می خواهیم با دیتابیس کار کنیم (اگر راهی نداشته باشیم تا جلوی باگ را بگیریم) با استفاده از synchronized block، شی مورد نظرمان (که  اینجا منظورمان statement ای که query را اجرا می کند است) را قفل میکنیم و جلوی بروز باگ را می گیریم.

راه حلی دارید برای رفع این مشکل در php ؟

لطفا از stackoverflow و اینها لینک نزارین، اگه خودتون تجربه ای دارید و تست کردید، لطفا مطرح بفرمایید.

نظرات

mhpakdel 10 سال پیش
من تجربه ی مستقیم تو این زمینه ندارم. لینکی هم نمیذارم!! اما راهکار و نظر من اینه که برای جلوگیری از بروز چنین باگی باید برای هر درخواست یک id انحصاری در نظر گرفته بشه که به هیچ وجه تکراری نشه. امیدوارم دوستان دیگه توضیح دقیقتری ارائه بدن.
hamidd 10 سال پیش
ممنونم . البته من اینجا منظورم منحصرا کار با دیتابیس هست و کاری به درخواست ها ندارم. می خوام جوری باشه وقتی اون یک کاربر داره روی (فیلد خاصی از ) دیتابیس کار می کنه کاربر بعدی نتونه روی (اون فیلد خاص)دیتابیس کارکنه و مثل همون synchronized block یه جورایی تو صف بمونه و بعد اجرا بشه کدش.
mhpakdel 10 سال پیش
سوالتون خیلی به جا و مهمه. دوست دارم اساتید نظر بدن. برا خودمم سوال شده الآن! اما حمید جان، ایجاد یک صف انتظار به نظرتون کار درستی هست؟ این وقفه بعدا باعث بروز خطا نمیشه؟ به نظر من ایجاد این محدودیت باعث ایجاد وقفه زمانی هرچند اندک میشه. البته الآن سوال چیز دیگه ای هست و اینکه چطور این محدودیت رو اعمال کنیم
hamidd 10 سال پیش
البته اون چیزی که بنده تو ذهنمه رو نمیشه دقیقا اسم صف انتظار رو روش گذاشت و تقریبا چیزی شبیه به همونه. و اتفاقا کار درستی هست و خیلی ام خوبه، و حتی به غیر از هدفی که ما داریم ،فشار روی دیتابیس در یک زمان خاص رو کم میکنه و جلوی هزینه رو هم میشه گرفت .
fandroid 10 سال پیش
سلام دوست عزیز این مبحثی که شما مطرح کرده اید مربوط به ساختار پایگاه داده میشه و خیلی مفصله توی ارشد یک درسی داریم به اسم پایگاه داده پیشرفه که داخل اون مباحث پیشرفته و اینکه کلا ساختار پایگاه داده ها چطوری هست که باعث جلوگیری از dead lock و دسترسی چند کاربر به طور همزمان از یک فیلد میشه رو مطرح کردن و به گونه ای سیتم رو طراحی میکنن که قابل برگشت به حالت سازگار رو داشته باشه و اگه دوتا کاربر خواستن از یک داده استفاده کنند خود پایگاه داده میاد بر اساس یک timestamp اونها رو اولویت بندی میکنه و اولویت بندی میکنه و معمولا اولویت رو پردازشی میده که پیرتر هست و زمان بیشتری تو سیستم بوده البته چند تا نکته اینجا هست 1.الگوریتم های مختلفی وجود داره یکیش اینه ممکنه هر پیایگاه داده کار حاصی انجام بده ولی مطمنا برای این جور مسایل خود برنامه نویسان پایگاه داده فکری کرده اند که شما با مشکل مواجه نشدید و در گیرش نشین 2.این درس پایگاه داده پیشرفته خیلی مفصل تر این حرفاست که من بتونم همش بگم شاید یکم هم گنگ گفته باشم ویا از این شاخه به اون شاخه رفته باشم 3.اینکه من این درس رو همین ترمی دارم و چیز هایی که تا به الان بهمون گفتن رو منتقل کردم شاید تا آخر ترم راه حل های دیگه ای داشته باشن ولی میخواستم یک درک کلی از این ساختار رو بهت گفته باشم موفق و موید .
fandroid 10 سال پیش
یک چیز دیگه ای هم که یادم رفت بگم اینه که دوستان شما برنامه نویس وب هستین این مسایل مربوط به برنامه نویسی پایگاه داده هست که کار راحتی هم نیست پس خودتون رودر گیر این مسایل نکنید :)
hamidd 10 سال پیش
@fandroid از صورت مساله دور شدیم. ببینید اون بحث قابل برگشت به حالت سازگار که گفتید زیاد چیزی نیست که سخت باشه و به سوال مربوط باشه. خیلی چیز ساده ایه، خود مدیریت دیتابیس query ها رو صف بندی می کنه یعنی همزمان دو تا query رو اجرا نمی کنه و مشکلی هم ایجاد نمیشه. بحث ما روی یک چیز دیگه ست. مثل این که صورت سوال رو با دقت نخوندید. پیشنهاد می کنم یک بار دیگه سوال رو بخونید. صورت سوال روی بحث پیاده سازی مشابه امکان synchronized block ، در php متمرکز شده، که مربوط به برنامه نویسی هست و قابل حل هم هست و براش راه حل هایی وجود داره. اتفاقا بنده پیشنهاد می کنم در فیلم های آموزشی این مورد آموزش داده بشه، درسته که ما یک شغل داریم به اسم طراح پایگاه داده و اگه خودمون نتونیم طراحی پایگاه داده رو انجام بدیم، باید طراح پایگاه استخدام کنیم ولی این بحث مربوط به برنامه نویسیه و جز ابتدایی ترین موضوعاته و اگر در فیلم های آموزشی آموزش داده بشه خوبه، چون برای مبتدی ترین افراد هم یاد گرفتنش مهمه ( بنده جلوی باگ رو به یک صورت دیگه گرفتم و الگوریتم مورد نظرمو تغییر دادم ولی برای افراد دیگه بهتره آموزش داده بشه، چون مربوط به php هست و راه حل برطرف کردنش در این لینک هست لینک ولی توقع داریم از کسانی که روی روشی که توی لینک مطرح کردم تسلط دارن ، علم خودشون رو در اختیار بقیه افراد که در آینده این سوال براشون مطرح میشه بزارن و موضوع بعدی این که برنامه نویس پایگاه داده نداریم، طراح و آنالیزور پایگاه داده داریم. لذا حتی اگر بنده طراح و آنالیزور دیتابیس هم استخدام کنم وظیفه ی برطرف کردن این مشکل بر عهده ی خودم هست.
fandroid 10 سال پیش
دوست عزیز شاید من درست سوالت رو متوجه نشدم ولی اون قمستی که گفتی دو کاربر همزمان مقداری رو بخونن وتغییر دهند دقیقا داخل بحث پایگاه داده پیشرفته مطرح شده و راه حل های مواجه با اونم پیاده سازی شده. مطمئنا شما تو سایتا گشتین مث stackoverflow و... و به جوابی که میخواستین نرسید و دلیلشم فک کنم این باشه که اصلا سوالتون خیلی گنگ هست مطمن هستین همچین چیزی رو باید از طریق php رفع کرد ؟
hamidd 10 سال پیش
اتفاقا همون بحثی که گفتم دو کاربر همزمان مقداری رو بخونن و تغییر دهند مربوط به باگ برنامه نویسی میشه. تفاقا سوالم گنگ نیست چون synchronized block رو هم مثال زدم کسی اگه با synchronized block کار کرده باشه تازه راحت تر می دونه چی میگم و براش خیلی واضحه که چی می خوام.(سوالم شاید حرفه ای باشه ولی گنگ نیست و مبتدی ترین افراد هم باید تسلط پیدا کنن روش. به خاطر همین میگم توی آموزش ها بهتره آموزش داده بشه.( به اندازه ی جلوگیری از sql injection که توی آموزش ها آموزش داده شده این مساله هم اهمیت داره). اره دیگه راه حل اش توی لینک بالا هست از طریق php حل شده مشکل اش.

هنوز پاسخی ثبت نشده است


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .