PDA

View Full Version : نظرتان راجع به استفاده از سیستم کش به این صورت چیست؟



salehforum
سه شنبه 22 مهر 1393, 00:06 صبح
یک اپلیکیشن اندروید رو در نظر بگیرید با حدود 300 هزار نفر کاربر و تعداد در خواست و بازدید بسیار بالای روزانه که وب سرویس اون فریم ورک Yii هست و از سیستم کش XCache هم استفاده می کنه.
حالا من قصد دارم علاوه بر کشی که توسط خود XCache و Nginx صورت میگیره، دو نوع کش دیگه هم داشته باشم که تست هایی هم زدم.
اما می خواستم ببینم دوستان نظرات بهتری ندارن برای این موضوع؟
مورد اول:
در صفحه ی اصلی اپلیکیشن اندرویدمون ما یک سری آمار داریم که توسط هر فردی که وارد اپ میشه یکبار درخواست میشن و میتونه بار زیادی روی سرور داشته باشه، این داده ها توسط جی سان از وب به اندروید ارسال میشه و حالا برای استفاده از سیستم کش من در نظر دارم که آرایه ی مورد نظر رو در کش به مدت چند ساعت ذخیره کنم به این صورت:


public function actionGetMainStats()
{
$result = Yii::app()->cache->get('mainStats');
if($result == null){
// calculate the mainStats Array
$mainStat = User::model()->androidMainStats();
Yii::app()->cache->set('mainStats', $calculatedArray, 100000);
}


echo CJSON::encode($mainStats);
}

و همچنین مورد دوم:
ما تابعی تعریف کردیم که رتبه ی کاربر رو در بازه ی زمانی مشخص شده بر میگردونه که اینکار مستلزم چندین Join تقریبا سنگین هست، در نظر بگیرید که حدود 300 هزار نفر کاربر هم وجود دارن.


/*
* get user rank of the user according to the specified period
* periods: 0-> all 1-> daily 2-> weekly 3-> monthly
*/
public function getUserRank($user_id, $timePeriod){
// piece of code
}


حالا نظرتون چیه من رتبه ی کاربر رو در بازه ی زمانی مورد نظرم مثلا برای چندین ساعت کش کنم تا درخواست ها از پایگاه کم بشن؟
به صورت زیر:


$rank = Yii->app()->cache->get($user_id.$timePeriod); // generate cache id using $user_id.$timePeriod
if($rank == null){
// calculate and populate the cache variable
}

یعنی من بیام برای ساختن id مربوط به کش، آی دی کاربر و بازه ی زمانی مورد نظر رو به هم وصل کنم تا داده ی کش تولید بشه.

آیا چنین مواردی معمول هستن برای کش؟
رم سرور من 20 گیگ هست و 8 سی پی یو داره و کانفیگ MySQL، Apache، Nginx و XCache هم برای چنین درخواست هایی کاملا انجام شده.