ورود

View Full Version : درخواست های زیاد از سرور و دیتابیس



sara.ghavam
دوشنبه 13 دی 1395, 19:21 عصر
سلام دوستان
من هر صفحه ای رو که لود میکنم یکسری دیتا رو از دیتا بیس میخونم و میفرستم به این صفحه یعنی با هر بار رفرش صفحه چند فانکشن اجرا میشه و ممکنه مثلا 10 چند کوئری یا یک کوئری به SQL Server زده بشه که فکر میکنم این روش درستی نباشه چون میزان درخواستها به سرور خیلی زیاد میشه
آیا راهی برای رفع این مشکل هستش؟

من الان view ها رو اینطوری لود میکنم




function index()


{
$this->General_model->online_users_counter();

$data = array (

'title'=>'سامانه ',
'message_num'=> $this->General_model->message_num(),
'san_num'=> $this->General_model->san_num(),
'rejected_num'=> $this->General_model->rejected_num()
);
$this->template->load('dashboard/index', $data);
}



من نتونستم اینطوری لود کنم


<?php




class Page extends CI_Controller {


function index()
{
$data['page_title'] = 'Your title';
$this->load->view('header');
$this->load->view('menu');
$this->load->view('content', $data);
$this->load->view('footer');
}


}
?>




در ضمن من view دارم اما view هارو لود نمیکنم یعنی به این صورت عمل میکنم

plague
سه شنبه 14 دی 1395, 20:04 عصر
اگه نیازه واقعا اون توابع و کوئری ها اجرا بشن پس باید اجرا بشن در هر درخواست
اگه غیر بهینه یا بد نوشته باشیشون مسئله دیگست

شما اگه profilerرو فعال کنی بعد از لود شدن صفحه میتونی آمار عملکرد کوئری ها رو ببینی که چیا اجرا شدن و هرکدوم چقد طول کشیده
اگر کوئری تکرار شونده یا سنگین/کند داری باید اصلاحش کنی

وگرنه کوئری های لازم باید اجرا بشن در هر رفرش

ermya_
شنبه 02 بهمن 1395, 14:41 عصر
دوست من تمام دیتابیس های SQL بیس توی maximum connection per second میپکن پس زمانی که داری باهاشون کار میکنی باید سعی کنی که تمام درخواست ها رو توی یه کانکشن باز انجام بدی
برای این مشکل ریفرش شدن پیج که ریکوعست ها ارسال میشن با هر بار بازدید کاربر بهتره از memcached استفاده کنی
به این صورت که query های insert , delete, update, رو مستقیم بدی به دیتابیس و select ها رو که قبلا کش کردی توی memcached بیای مستقیم از memcached بخونی

sara.ghavam
دوشنبه 04 بهمن 1395, 09:43 صبح
دوست من تمام دیتابیس های SQL بیس توی maximum connection per second میپکن پس زمانی که داری باهاشون کار میکنی باید سعی کنی که تمام درخواست ها رو توی یه کانکشن باز انجام بدی
برای این مشکل ریفرش شدن پیج که ریکوعست ها ارسال میشن با هر بار بازدید کاربر بهتره از memcached استفاده کنی
به این صورت که query های insert , delete, update, رو مستقیم بدی به دیتابیس و select ها رو که قبلا کش کردی توی memcached بیای مستقیم از memcached بخونی


تشکر دوست عزیزم لطف کردین
اما 2 تا سوال داش
1- الان فرض کنید وقتی که صفحات رفرش میشه مثلا فرض کنید تعداد کارهای باقی مانده رو به کاربر نشون میدم (یعنی تو هر رفرش ممکنه مقدارش تغیر کنه) که این توسط select انجام میشه آیا این هم با memcashed میشه انجام داد؟ یا اینکه وقتی یک کار رو برای انجام باز میکنه موارد مختلفی از دیتابیس select زده میشه البته من این هارو تو یک select گذاشتم که نتایج رو با یک آرایه به view میفرستم
2- این memcashed رو چطوری میتونم اجرا کنم؟ چون توی User Guide خود Codeigniter نبود

ermya_
سه شنبه 05 بهمن 1395, 21:17 عصر
خواهش

خوب این دیتابیس یک جایی آپدیت میشه تیبل هاش دیگه ؟ درسته ؟
مثلا فکر کن یه یوزری یه کاری میکنه که باید دیتا بیس آپ دیت بشه شما هم زمان هم دیتابیس رو آپ دیت می کنی هم memcached رو بعد که میخوای کوعری سلکت برنی به دیتابیس همون اطلاعات رو از memcached بگیر چون قبلاً اون رو هم آپ دیت کرده بودی

کلا codeigniter خیلی باحاله زیاد سخت نمیگیره هر کاری میتونی باهاش انجام بدی

برای کار با memcached اول باید اون رو نصب کنی روی سرور



Ubuntu : sudo apt-get install memcached
Gentoo : sudo emerge install memcached
Redhat : sudo yum install memcached


بعد باید extention پی اچ پی رو نصب کنی که راحت ترین روش با استفاده از PECL هست

sudo pecl install memcache




بعد باید apache رو ریستارت کنی یا اگه php رو به صورت fast cgi نصب کردی از مسیر etc/usr/bin بری و سرویسش رو ریستارت کنی که تغییرات اعمال بشه

حالا توی کد خیلی راحت بهش وصل میشی و دیتا رو set و get میکنی

اینجا یه مثال هست به همراه فایل controller و library

https://github.com/tomschlick/memcached-library

sara.ghavam
چهارشنبه 06 بهمن 1395, 07:25 صبح
ممنونم دوست عزیزم اما من از Windows Server استفاده می کنم

ermya_
چهارشنبه 06 بهمن 1395, 13:06 عصر
دوست من اولا که ویندوز کلا برای کاربر های عادی نوشته شده و ورژن سرورش هم فقط برای کار های کوچیک هست

بکار بردن php روی سیستم عامل ویندوز و اونم کنار IIS فقط واسه کارای تحقیقاتی هست

ولی من شدیداً توصیه میکنم از لحاظ مساعل امنیتی به هیچ وجه از ویندوز برای پروژه های تجاری استفاده نکنید و همچنین از لینوکس ها با کرنل debian
برای کار تجاری امن ترین و استیبل ترین OS سیستم عامل های مبتنی بر کرنل redhat هست نظیر centos

ولی اگه اصرار به این کار دارید میتونین به این شکل memcached رو روی ویندوز نصب کنید

اول فایل متناسب با نسخه ویندوزتون رو از اینجا دانلود کنید

http://downloads.northscale.com/memcached-win32-1.4.4-14.zip
http://downloads.northscale.com/memcached-win64-1.4.4-14.zip

بعد توی درایو C ویندوزتون extract کنیدش
و سپس از طریق cmd
با این دستور نصبش کنید
c:\memcached\memcached.exe -d install

و با این دستور استارت یا استپش کنید

c:\memcached\memcached.exe -d start
c:\memcached\memcached.exe -d stop

و همچنین از طریق registery در این مسیر

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic es\memcached

میتونید مقدار حافظه تخصیص داده شده به memcached رو کم یا زیاد کنید

این لاین رو در رجیستری باید ادیت کنید
"c:\memcached\memcached.exe" -d runservice -m 512


و از اونجایی که dll مربوط به memcached برای php بر روی نسخه ویندوز موجود نیست میتونید برای اتصال از این شبیه ساز استفاده کنید

https://github.com/fwolf/memcached-client