2010-07-01 98 views
1

我有一个执行以下操作的页面:使用会话,以降低CPU负荷

  1. 执行一个数据库查询(更准确地说,从用户U,user_tag UT其中u选择u.user_uid,ut.user_metatada .uid = ut.uid,一个用户可以具有一个或多个metadatas)
  2. 生成基于所述查询
  3. 的结果数据的阵列上执行这些阵列(更多关于此操作在这篇文章中读取一些复杂的操作。 )。以数组形式返回最终结果。该数组是包含user_uids的一维数组。
  4. 执行另一个查询并获取user_uid的所有元素的user_fullname,user_photo
  5. 在页面中打印查询结果。

当用户重新加载页面时,这5个操作将从头开始执行。为了避免每次用户重新加载页面时执行所有这5个操作,我们可以在会话中保存最终结果(操作编号5)。所以我们可以说以下内容:

If session is not set 
Perform those 5 operations 
else 
Print session values 

这会降低CPU负载,但它会采取一些(我不知道有多少)内存而不是将信息保存在一个会议。但有人认为加载CPU而不是内存会更好。 问题:你推荐我做什么?是否使用会话(在我的情况下)?还有其他更好的解决方案吗?

回答

3

使用APCMemcached。他们在内存键值缓存中为正是为此设计的。 如果需要,您可以在其中存储阵列,并且将失效时间设置到期时间Facebook uses them减轻负荷,所以他们不能坏... :)

0

你的情况:你有什么需要更多的CPU或内存?

如果这5个操作的结果不经常更改,通过各种手段,缓存结果(无论是在会议或磁盘上)。

1

您也可以使用类似memcached

而如果它是更好试图降低CPU负载,或记忆,这要看情况。

尝试观察你的CPU和内存消耗,这是打它首先是限制,即一个是你应该尽量减少。

0

您也可以将结果存储在新的DB-Table中。 或在一个会话中。

使用的内存,将取决于有多少用户访问您的网站。每个用户将在session_save_path目录中生成一个新条目(这是存储会话信息的地方)。

还要注意,一段时间后,PHP会从这个目录中删除旧的条目,这意味着该值将有下一次用户访问你的页面进行再生。但是这也意味着,内存空间被保存了。