30-03-1394، 12:15 ب.ظ
سلام و خسته نباشید.
الان من یک جدول دارم که Process هایی رو در خودش نگه می داره و هر بار که کاربر یک فعالیت انجام میده Process هایی که زمان انجامشون فرا رسیده باید از جدول انتخاب بشوند و انجام بشوند و تغییراتی رو در جدول های دیگه به وجود بیارند.
این نکته رو هم بگم که این Process ها سراسری هستند؛ یعنی مربوط به کاربر خاصی نیستند.
خوب این که Process ها پردازش شدند یا نه رو با یک ستون در جدول مشخص کردم و وقتی که یک سری از Process ها انتخاب میشن بعدش با یک درخواست دیگه ستون completed اون هارو برابر با 1 قرار میدم. حالا ممکنه در بین این جریان انتخاب شدن و به روز رسانی ستون completed یک کاربر دیگه یک فعالیت انجام بده و دوباره Process هایی که انتخاب شدند ولی فرصت نشده بوده علامت گذاری شوند انتخاب بشن و اون Process ها دو بار انجام بشند که باعث خطا میشه توی برنامه.
حالا من دنبال Transaction ها و Lock ها در InnoDB رفتم ولی خوب چیزی پیدا نکردم که این مشکل رو حل بکنه.
SELECT...FOR UPDATE وجود داشت که خوب فقط جلوی سایر درخواست ها برای به روز رسانی رو می گیره نه انتخاب رو.
آیا باید از قفل کردن کل جدول استفاده بکنم؟!
الان من یک جدول دارم که Process هایی رو در خودش نگه می داره و هر بار که کاربر یک فعالیت انجام میده Process هایی که زمان انجامشون فرا رسیده باید از جدول انتخاب بشوند و انجام بشوند و تغییراتی رو در جدول های دیگه به وجود بیارند.
این نکته رو هم بگم که این Process ها سراسری هستند؛ یعنی مربوط به کاربر خاصی نیستند.
خوب این که Process ها پردازش شدند یا نه رو با یک ستون در جدول مشخص کردم و وقتی که یک سری از Process ها انتخاب میشن بعدش با یک درخواست دیگه ستون completed اون هارو برابر با 1 قرار میدم. حالا ممکنه در بین این جریان انتخاب شدن و به روز رسانی ستون completed یک کاربر دیگه یک فعالیت انجام بده و دوباره Process هایی که انتخاب شدند ولی فرصت نشده بوده علامت گذاری شوند انتخاب بشن و اون Process ها دو بار انجام بشند که باعث خطا میشه توی برنامه.
حالا من دنبال Transaction ها و Lock ها در InnoDB رفتم ولی خوب چیزی پیدا نکردم که این مشکل رو حل بکنه.
SELECT...FOR UPDATE وجود داشت که خوب فقط جلوی سایر درخواست ها برای به روز رسانی رو می گیره نه انتخاب رو.
آیا باید از قفل کردن کل جدول استفاده بکنم؟!