2010-07-01 3 views
1

У меня есть страница, которая выполняет следующие операции:Использование сеанса, чтобы уменьшить нагрузку на процессор

  1. выполняет запрос в БД (Точнее, выберите u.user_uid, ut.user_metatada от пользователей и, user_tag ут где и .uid = ut.uid. Один пользователь может иметь одну или несколько метаданных)
  2. Создает массив данных на основе результата запроса
  3. Выполняет некоторые сложные операции над этими массивами (Подробнее об этой операции прочитайте в этом сообщении.). Возвращает конечный результат как массив. Этот массив представляет собой одномерный массив, содержащий user_uids.
  4. Выполняет другой запрос и получает user_fullname, user_photo всех элементов user_uid
  5. Распечатывает результат запроса на странице.

Когда пользователь перезагружает страницу, эти 5 операций будут выполняться с самого начала. Чтобы избежать выполнения всех этих 5 операций каждый раз, когда пользователь перезагружает страницу, мы можем сохранить конечный результат (номер операции 5) в сеансе. Таким образом, мы можем сказать следующее:

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

Это позволит снизить нагрузку на процессор, но это займет некоторое (не знаю сколько) памяти вместо того, чтобы сохранить информацию в сеансах. Но кто-то утверждает, что лучше загружать процессор, а не память. Вопрос: Что вы мне порекомендовали? Использовать сеансы или нет (в моем случае)? Есть ли еще и лучшие решения?

ответ

3

Использовать APC или Memcached. Они представляют собой в кеш-кеш-память памяти, предназначенные именно для этой цели. Вы можете хранить массивы в них, если хотите, и установить срок действия за аннулирование. Facebook uses them уменьшить нагрузку, поэтому они не могут быть плохо ... :)

0

В вашем случае: что вам нужно больше, процессор или память?

Если результат этих 5 операций не изменяется часто, непременно кешируйте результат (либо в сеансах, либо на диске).

1

Вы также можете использовать что-то вроде memcached

И если это лучше пытаться уменьшить загрузку процессора или памяти, это зависит.

Попытайтесь понаблюдать за потреблением процессора и памяти, который сначала поражает его лимиты, а тот, на который вы должны попытаться уменьшить.

0

Вы также можете сохранить свой результат в новом DB-Table. Или в сеансе.

Используемая память будет зависеть от того, сколько пользователей посещает ваш сайт. Каждый пользователь будет генерировать новую запись в каталоге session_save_path (где хранится информация о сеансе).

Также обратите внимание, что через некоторое время PHP удалит старые записи из этого каталога, то есть значение будет необходимо восстановить при следующем посещении пользователем страницы. Но это также означает, что пространство памяти сохраняется.

Смежные вопросы