سلام
یک گروه خارجی جهت تکمیل وبسایت خود، منو استخدام کردند تا این کار رو انجام بدم.
در این سایت حدود 500 هزار کاربر ثبت نام کردند و حدودا روزانه 750 هزار بازدید داره.
متاسفانه این وبسایت از آغاز فعالیتش تا کنون پس از حدود 3 سال هیچ تغییری در منطق برنامه تقریبا نداشته و این گروه هر ماه به دلیل رعایت نشدن اصول برنامه نویسی، هزینه ی زیادی (حدود 3000 دلار) جهت تامین سخت افزاری سرور تقبل میکنند.
به همین دلیل یکی از وظایفی که بر عهده دارم دارم ، ارتقاء performance و سرعت پردازش اطلاعات سایت هست.
چند روز پیش بطور اتفاقی متوجه شدم که قسمت چک کردن اینکه کاربر Login کرده یا نه یکی از بزرگترین مشکلاتو داره و اصلا عملکرد خوبی نداره ، یعنی سرعت بسیار پایینی داره و با حل کردن مشکل این قسمت احتمالا میتونیم حداقل از یکی از 6 سروری که برای up نگه داشتن سایت و داشتن سرعت قابل قبول هر ماه هزینه میکنند، بی نیاز بشوند.
برنامه نویس قبلی سایت برای اینکه ببینه کاربر Login کرده یا نه، برنامه را طوری نوشته که در هر صفحه، چک میکنه ببینه cookie ای ثبت شده یا نه، اگه کوکی ثبت شده بود، مقدار password و از cookie بدست میاره و با اونی که تو دیتابیس هست چک میکنه، اگه برابر بود، پس کاربر قبلا Login کرده و یک کاربر معمولی هست، در غیر اینصورت، مثل یک مهمان با او برخورد میشه و در بعضی مواقع که دسترسی بعضی کارها را نداره، ارجاع داده میشه به صفحه ثبت نام.
حتما فهمیدید مشکل کجاست!
این برنامه نویس با باز شدن هر صفحه، 500 هزار رکورد در پایگاه داده و چک میکنه، با احتساب روزانه بیش از 750 هزار بازدید، یعنی روزانه بیش از 375.000.000.000 رکورد در پایگاه داده search میشه!
خب، 375 میلیارد خیلی خیلی زیاد هست و یکی از مشکلات من هم در همینجاست!
من روی این مساله چند روزی فکر کردم ولی چون تا حالا با جدول بزرگی مثل این مواجه نشده بودم، نتیجه ای نگرفتم که چطوری سرعت پردازش اطلاعات در این پایگاه داده را افزایش بدهیم.
میخواستم نظر شما را هم جویا بشوم.
در ضمن، جدول کاربران در پایگاه داده با 3 ستون id, username, password فرض میکنیم. چون بقیه ستون ها مشخصات کاربران هست.
SQL ای که کلمه عبور رو بدست میاره هم چیزی شبیه به این هست:
SELECT password FROM users WHERE username=$username
منتظر نظرات و راهنمایی های شما هستم.
یک گروه خارجی جهت تکمیل وبسایت خود، منو استخدام کردند تا این کار رو انجام بدم.
در این سایت حدود 500 هزار کاربر ثبت نام کردند و حدودا روزانه 750 هزار بازدید داره.
متاسفانه این وبسایت از آغاز فعالیتش تا کنون پس از حدود 3 سال هیچ تغییری در منطق برنامه تقریبا نداشته و این گروه هر ماه به دلیل رعایت نشدن اصول برنامه نویسی، هزینه ی زیادی (حدود 3000 دلار) جهت تامین سخت افزاری سرور تقبل میکنند.
به همین دلیل یکی از وظایفی که بر عهده دارم دارم ، ارتقاء performance و سرعت پردازش اطلاعات سایت هست.
چند روز پیش بطور اتفاقی متوجه شدم که قسمت چک کردن اینکه کاربر Login کرده یا نه یکی از بزرگترین مشکلاتو داره و اصلا عملکرد خوبی نداره ، یعنی سرعت بسیار پایینی داره و با حل کردن مشکل این قسمت احتمالا میتونیم حداقل از یکی از 6 سروری که برای up نگه داشتن سایت و داشتن سرعت قابل قبول هر ماه هزینه میکنند، بی نیاز بشوند.
برنامه نویس قبلی سایت برای اینکه ببینه کاربر Login کرده یا نه، برنامه را طوری نوشته که در هر صفحه، چک میکنه ببینه cookie ای ثبت شده یا نه، اگه کوکی ثبت شده بود، مقدار password و از cookie بدست میاره و با اونی که تو دیتابیس هست چک میکنه، اگه برابر بود، پس کاربر قبلا Login کرده و یک کاربر معمولی هست، در غیر اینصورت، مثل یک مهمان با او برخورد میشه و در بعضی مواقع که دسترسی بعضی کارها را نداره، ارجاع داده میشه به صفحه ثبت نام.
حتما فهمیدید مشکل کجاست!
این برنامه نویس با باز شدن هر صفحه، 500 هزار رکورد در پایگاه داده و چک میکنه، با احتساب روزانه بیش از 750 هزار بازدید، یعنی روزانه بیش از 375.000.000.000 رکورد در پایگاه داده search میشه!
خب، 375 میلیارد خیلی خیلی زیاد هست و یکی از مشکلات من هم در همینجاست!
من روی این مساله چند روزی فکر کردم ولی چون تا حالا با جدول بزرگی مثل این مواجه نشده بودم، نتیجه ای نگرفتم که چطوری سرعت پردازش اطلاعات در این پایگاه داده را افزایش بدهیم.
میخواستم نظر شما را هم جویا بشوم.
در ضمن، جدول کاربران در پایگاه داده با 3 ستون id, username, password فرض میکنیم. چون بقیه ستون ها مشخصات کاربران هست.
SQL ای که کلمه عبور رو بدست میاره هم چیزی شبیه به این هست:
SELECT password FROM users WHERE username=$username
منتظر نظرات و راهنمایی های شما هستم.