PDA

View Full Version : سوال: مدیریت درخواستهایی که ممکنه بیش از 60 ثانیه طول بکشه و ارتباط با دیتابیس قطع بشه



idocsidocs
پنج شنبه 21 اردیبهشت 1391, 23:49 عصر
من باید با کران جابز یه برنامه بنویسم که ممکنه اتصالش به دیتابیس بیش از 60 ثانیه طول بکشه.

حالا ممکنه این کارها بیشتر از 60 ثانیه طول بکشه و اسکریپت از کار بیافته. بنظرتون باید چیکار کنم که اسکریپت به خوبی اجرا بشه؟

کاری که باید انجام بدم اینه که فاکتور 50 تا سفارش رو از دیتابیس بخونم، بعد با وب سرویس به فروتل وصل بشم و وضعیت این مرسوله ها رو بخونم و بعد وضعیت این سفارشها رو توی دیتابیس خودم رو تغییر بدم.

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

idocsidocs
شنبه 23 اردیبهشت 1391, 23:11 عصر
کسی از دوستان در این مورد نظری نداره؟

yones_safari
یک شنبه 24 اردیبهشت 1391, 01:16 صبح
درود
کوئری هات رو نسبت به تعداد رکوردهات تقسیم کن و چند تا کوئری رو اجرا بکن و نتیجه هر کدوم رو تو یک آرایه مشترک بریز بعد استفاده کن.
موفق باشی

idocsidocs
یک شنبه 24 اردیبهشت 1391, 01:58 صبح
کوئری هات رو نسبت به تعداد رکوردهات تقسیم کن و چند تا کوئری رو اجرا بکن و نتیجه هر کدوم رو تو یک آرایه مشترک بریز بعد استفاده کن.
منظورتون اینه که بعد از هر تعداد مشخص کوئری، کانکشنها رو حذف قطع کنم و مجددا به دیتابیس متصل بشم؟

روش استاندارد همینه؟

yones_safari
یک شنبه 24 اردیبهشت 1391, 14:32 عصر
عزیز من که اصلا از کانکشن حرف نزدم
شما مثلا یه کوئری که 5 تا رکورد رو برمیگردونه اجرا کن ببین چقدر طول میکشه یا 10 رکوردی و متناسب با اون کوئری هات رو بنویس.مثلا برا 50 رکورد 5 تا 10 رکوردی برگردونه.
موفق باشید

idocsidocs
یک شنبه 24 اردیبهشت 1391, 14:55 عصر
شما مثلا یه کوئری که 5 تا رکورد رو برمیگردونه اجرا کن ببین چقدر طول میکشه یا 10 رکوردی و متناسب با اون کوئری هات رو بنویس.مثلا برا 50 رکورد 5 تا 10 رکوردی برگردونه.
وقتی کوئری اجرا شد، باید به وب سرویس فروتل وصل بشم، بعد باید دوباره به دیتابیس خودم وصل بشم، اگر لازم شد باید ایمیل و اس ام اس بفرستم !

کلا ممکنه زمان اجرا از 60 ثانیه (زمان پیش فرض برای کانکشنها) بیشتر بشه.

برای اینکه جلوی قطع شدن اسکریپت رو بگیرم، باید چیکار کنم؟

eshpilen
یک شنبه 24 اردیبهشت 1391, 18:51 عصر
تعریف تابع mysql_ping ظاهرا برای همینطور کارهاست:


.Checks whether or not the connection to the server is working. If it has gone down, an automatic reconnection is attempted. This function can be used by scripts that remain idle for a long while, to check whether or not the server has closed the connection and reconnect if necessary.


ترجمه: چک میکند که آیا اتصال به سرور کار میکند یا خیر. اگر اتصال قطع شده باشد، یک تلاش اتصال مجدد خودکار انجام میشود. این تابع میتواند بوسیلهء اسکریپت هایی که برای زمان طولانی بیکار باقی میمانند برای چک کردن اینکه آیا سرور اتصال را بسته است یا خیر و اتصال مجدد درصورت لزوم استفاده شود.

پس شما باید قبل از اجرای هر کوئری این تابع رو فراخوانی کنی بنظرم!

idocsidocs
یک شنبه 24 اردیبهشت 1391, 19:39 عصر
پس شما باید قبل از اجرای هر کوئری این تابع رو فراخوانی کنی بنظرم!
مسئله اینه که من کانکشن رو توی یه تابع ایجاد می کنم و توی کلاسهای فرزند این کانکشن رو ارث بری می کنم.

با توجه به این مورد تابع mysql_ping رو باید کجا استفاده کنم تا از قطع شدن کانکشن جلوگیری کنه؟ می تونم توی کلاسهای فرزند از این تابع استفاده کنم؟

eshpilen
یک شنبه 24 اردیبهشت 1391, 20:27 عصر
این تابع یک پارامتر داره که همون کانکشن MySQL مورد نظر هست.
اون کانکشن رو هم بهش پاس کن.

با توجه به این مورد تابع mysql_ping رو باید کجا استفاده کنم تا از قطع شدن کانکشن جلوگیری کنه؟
قبل از اجرای هر کوئری.
یا قبل از اجرای کوئری هایی که ممکنه تا اون موقع اتصال پایگاه داده قطع شده باشه.

idocsidocs
یک شنبه 24 اردیبهشت 1391, 23:57 عصر
قبل از اجرای هر کوئری.
با این وجود فکر کنم دیگه نیازی نیست که کار خاصی انجام بدم و فقط باید همین تابع رو استفاده کنم و زمان اجرای اسکریپت رو روی نامحدود تنظیم کنم. درسته؟

eshpilen
دوشنبه 25 اردیبهشت 1391, 08:49 صبح
با این وجود فکر کنم دیگه نیازی نیست که کار خاصی انجام بدم و فقط باید همین تابع رو استفاده کنم و زمان اجرای اسکریپت رو روی نامحدود تنظیم کنم. درسته؟
آره باید کافی باشه.